PowerShel程序执行完后删除脚本自身的方法 2016年08月01日 56 阅读 当脚本执行完成后,可以删除自身复制代码 代码如下:#删除脚本自身remove-item $MyInvocation.MyCommand.Path -force...
Powershell实现监测服务器连通状态 2016年08月01日 55 阅读 工作中可能会遇到有几台托管的服务器,比如数据库,一旦网络中断就会影响到数据采集。为此你可以使用下面脚本,它用计划任务每小时执行一次,一旦服务器出现断网,则会弹出提示窗口,代码如下:复制代码 代码如下:$computerNames = @("10.3.X.56","10.0.XX.123")$computerNames|%{ if(!(Test-Connection -ComputerName $_ -Quiet )){ cmd /c msg * ($_) ...
PowerShell中终止管道的方法 2016年08月01日 57 阅读 如果你能够提前知道你想从管道中获取元素的个数,可以使用Select-Object来终止流处理命令的的管道,这会节省很多时间。下面的例子会从Windows文件夹下搜寻 explorer.exe示例,因为Select-Object语句可以在管道找到结果的那一瞬终止管道。否则,Get-ChildItem会递归的遍历所有子目录然后匹配出你想要的结果。复制代码 代码如下:#requires -Version 3Get-ChildItem -Path c:Window...
PowerShell实现在控制台中插入绿色的打勾符号 2016年08月01日 55 阅读 在前面的PowerShell技巧中,我们看到了PowerShell控制台支持输出所有TrueType字体的字符,你只需将你的字符代码转换成Char类型。今天再来一个更高级的例子,让用户在控制台中插入绿色的打勾符号。$greenCheck = @{ Object = [Char]8730 ForegroundColor = "Green" NoNewLine = $true } Write-Host "Status check... " -NoNewline...
PowerShell实现在字符串中查找大写字母 2016年08月01日 58 阅读 如果你想找到字符串中的大写字符,你可能会使用正则表达式。亦或者使用你的大写字母列表一个个匹配,当然更灵活的是使用.NET中的 IsUpper()函数。小编注:.NET是PowerShell的土壤,尽最大可能挖掘出这些framework框架中的函数,是我们伸手党永恒的追求。下面的例子,会扫描字符串中的每一个字符,然后返回遇到的第一个大写字母的位置:$text = "here is some text with Uppercase letters" $c = ...
PowerShell实现查询打开某个文件的默认应用程序 2016年08月01日 57 阅读 许多文件扩展名和一个可执行应用程序绑定。正因为这样你才可以使用Invoke-Item打开一个文档。要找出一个给定后缀名的文件是由那个默认引用程序打开它,并不麻烦。我们可以使用Windows系统中的注册表,自行编程解决。但是在扫描注册表时,要稍微留意一下32位和64位机器的问题,这不是本文重点,点到为止。另外一种途径,稍显旁门左道,调用Windows API。下面的例子会演示如何调用。采取这种途径最大的优势是借力于操作系统。而你的付出成本只是用C#代码间接调...
PowerShell在控制台输出特殊符号的方法 2016年08月01日 58 阅读 您知道吗,PowerShell控制台也可以输出特殊的图标?而你需要做的只是,设置控制台的字体为TrueType 字体,比如”Consolas”。要显示特殊字符,请使用十进制或十六进制字符代码,例如:[Char]8730[Char]0x25BA或着打开系统上内置的应用程序 “CharacterMap” 来选择一个你想在控制台上显示的的符号。下面的例子就是通过这种途径来把PowerShell控制台上的提示符信息变得更加诡异:或着打开系统上内置的应用程序 “Ch...
PowerShell实现统计函数嵌套深度 2016年08月01日 57 阅读 当你调用某个函数时,PowerShell会增加一次嵌套层次。当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次。今天分享一个函数,它能告诉你的脚本嵌套的层次:function Test-NestLevel{$i = 1$ok = $truedo{try{$test = Get-Variable -Name Host -Scope $i}catch{$ok = $false}$i++} While ($ok) $i}当你调用的函数具有递归调用时,上面的函...
Powershell互斥参数使用实例 2016年08月01日 55 阅读 有时Powershell的函数需要互斥,让用户只能在其中二选一。要给脚本创建一组互斥的参数,可以给他们打上不同的属性标志,同时确保它们的唯一性(假设不能自动识别参数类型).function Test-ParameterSet{ [CmdletBinding(DefaultParameterSetName="number")] param ([int][Parameter(ParameterSetName="number", Position=0)]$id,...
PowerShell实现按条件终止管道的方法 2016年08月01日 61 阅读 有时你可能想在管道运行在某个特定的条件下,终止管道。今天来演示一个比较新颖的方式,它适用于PowerShell 2.0或着更高版本。先看代码:filter Stop-Pipeline{param([scriptblock]$condition = {$true}) if (& $condition){continue}$_} do {Get-ChildItem c:Windows -Recurse -ErrorAction SilentlyContinue...
PowerShell Continue语句使用示例 2016年08月01日 58 阅读 当你在一个循环的内部使用 “Continue”语句时,可以跳过循环的当前迭代,继续执行下一个迭代。如果使用了”Break”语句,则会跳过剩余的所有迭代循环。这样就引发了一个问题,在一个多层嵌套循环中,哪一个循环会被影响。默认情况下,”Continue”只会影响到内层循环,但是你也可以用”Continue” 和 “Break” 指向外层循环的某一个标签。:outerForeach ($element in (1..10)){for ($x = 1000; $...
PowerShell实现动态获取当前脚本运行时消耗的内存 2016年08月01日 52 阅读 想粗略地理解一个脚本消耗了多少内存,或着在你往PowerShell中的变量存结果时,消耗了多少内存,可以借助于下面的函数:#requires -Version 2 $script:last_memory_usage_byte = 0 function Get-MemoryUsage{$memusagebyte = [System.GC]::GetTotalMemory("forcefullcollection")$memusageMB = $memusag...
PowerShell实现参数互斥示例 2016年08月01日 49 阅读 在PowerShell的函数中如果想让参数互斥,可以使用 “ParameterSetName”属性将一个parameter属性定义在不同的参数或着参数集合中。很多人可能没有留意,在PowerShell的函数中,我们可以将多个参数属性定义在同一个参数名上,这样配合mandatory可以让一个参数在某个场景下是强制的,在另外的场景下则是可选的。function Test-ParameterSet{[CmdletBinding(DefaultParameterS...
PowerShell中使用.NET将程序集加入全局程序集缓存 2016年08月01日 65 阅读 通常情况下,将程序集(Assembly)加入全局程序集缓存(GAC,Global Assembly Cache),可以使用GacUtil工具。只要使用/i参数,就可以把指定路径的程序集添加进GAC了。不过由于GacUtil并不是.Net Framework的一部分,而是和Windows SDK一起发布的,这就导致了机器中安装了.Net,却可能找不到GacUtil的情况。在PowerShell中,我们可以直接使用.Net的类库来搞定这件事,而不需要通过Gac...
PowerShell中获取当前运行脚本路径的方法 2016年08月01日 60 阅读 在运行脚本的时候,有时候需要通过脚本文件所在位置的相对路径来做一些事,比如执行另一个脚本。以前在CMD时代,可以通过%~dp0来获取脚本所在的文件夹,那在PowerShell中要怎么做呢?很简单,通过内置的$MyInvocation变量:复制代码 代码如下:$x = $MyInvocation.MyCommand.Definition此时$x的值是当前运行中的脚本的绝对路径,再用Split-Path取它的父路径就可以了:复制代码 代码如下:$x = Spl...
PowerShell中的函数重载示例 2016年08月01日 55 阅读 在PowerShell中,我们可以使用Function关键字来定义一个函数,比如:Function Get-Data { Param ([int] $data = -1 ) return $data;}这个名为Get-Data的函数接收一个int类型的参数$data,直接将其返回。那么,我同时还需要一个接收string类型的Get-Data函数怎么办?方法比较奇怪,至少和传统的C++之类的语言不同。在PowerShell中定义重载函数,需要指定参数所属的P...
PowerShell中以管理员权限启动应用程序的方法 2016年08月01日 61 阅读 又一个PowerShell比CMD好的地方。在CMD中用管理员权限来启动应用程序很复杂,但在PowerShell中就简单多了,如下:复制代码 代码如下:Start-Process notepad -Verb runasStart-Process "$PSHOMEpowershell.exe" -Verb runas...
PowerShell批量文件重命名操作实例 2016年08月01日 62 阅读 总算发现PowerShell相对于CMD来说实用的地方了。事情是这样的,我下载了一些美剧(抱歉,看完会删的),通常文件名都比较长,包含了很多我不需要的信息,,比如:复制代码 代码如下:别对我撒谎.Lie.To.Me.S02E11.Chi_Eng.HDTVrip.720×396-YYeTs人人影视V2.rmvb别对我撒谎.Lie.To.Me.S02E12.Chi_Eng.HDTVrip.720×396-YYeTs人人影视.rmvb别对我撒谎.Lie.To.M...
PowerShell中的转义字符是什么? 2016年08月01日 50 阅读 PowerShell中转义字符是`,向后撇号(backward apostrophe,是tab键上面的按键,不是单引号),例如:复制代码 代码如下:Write-Host `$env:processor_architecture=$env:processor_architecture会输出$env:processor_architecture=AMD64当然还有一个转义字符是在正则表达式(Regular Expression)中使用的,斜线。...
Powershell脚本的4种执行权限介绍 2016年08月01日 57 阅读 Restricted——默认的设置, 不允许任何script运行AllSigned——只能运行经过数字证书签名的scriptRemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名Unrestricted——允许所有的script运行windows默认不允许任何脚本运行,你可以使用"Set-ExecutionPolicy"cmdlet来改变的你PowerShell环境。例如,你可以使用如下命令让...