Powershell 中除了常见的算术运算符,赋值运算符,比较运算符,位运算符,逻辑运算符,字符串的拆分和合并运算符,转义字符,还有一些特殊的运算符,这些特殊的运算符往往可以解决一些特殊的问题,比如执行运行命令,更改值的数据类型等。
- & (调用运算符)
使用 & (调用运算符)可以运行命令、脚本或脚本块。因为调用运算符不进行分析,所以它不能解释命令参数。此调用运算符用于指示它后面的值为命令(而不是字符串)。使用此运算符可以运行存储在变量中并由字符串表示的命令。例如:
PS C:\> $command = "Get-Service" PS C:\> $command Get-Service PS C:\> & $command Status Name DisplayName ------ ---- ----------- Stopped AdobeFlashPlaye... Adobe Flash Player Update Service Stopped Alerter Alerter Stopped ALG Application Layer Gateway Service Stopped AppMgmt Application Management Stopped aspnet_state ASP.NET 状态服务 Running Ati HotKey Poller Ati HotKey Poller Running AudioSrv Windows Audio ...
从上面的例子中可以看出,将 Get-Service 命令赋值给变量 $command , 所以当输入 $command 输出的是字符串值 "Get-Service",如果要执行该命令,则需要在变量前添加调用运算符。
这个命令在实际的应用中非常有用,比如可以将cmd 命令赋值给变量,然后利用调用运算符就可以执行 cmd 命令。
2. . (属性引用运算符,或称为点运算符)
利用属性运算符就可以像高级语言语言一样,通过点运算符访问对象的属性和方法。例如:
PS C:\> $myStr = "This is my string" PS C:\> $myStr.Length 17 PS C:\> $myStr.Substring(1,4) his
点运算符,再加上 Powershell 的自动补全功能,可以极大地提高输入命令的准确度,例如你可以输出 $myStr.Len<Tab键> , 命令就会自动补全。 前面我们介绍了字符串的拆分和合并运算符,其实有很大一部分操作,可以通过字符串的方法来实现,比如字符串的SubString()可以截取指定的子字符串。
除了引用属性,点运算符还有一种更重要的应用。
使用点"." 获得来源运算符
意思是通过运行脚本,使脚本中的项目成为调用作用域的组成部分,通俗点将就是,可以在当前脚本中调用其他的脚本,则其他脚本中的方法及变量在当前作用域都有效。这在脚本的模块化的使用中非常有用,即可以将经常使用的方法放在一个脚本中,每次使用时加载这个脚本,就可以使用该脚本中的方法。例如:
. c:\.sample.ps1
如果在脚本中加入该语句,则可以在当前作用域使用sample.ps1 中的所有方法及变量。
除此之外,点运算符还有最常见的使用。
点 (.) 还用作父目录符号
这一点应该是大家都属性的。在 Powershell 中,双击脚本,默认是不会执行的(不像bat等脚本,双击直接运行),这主要是出于对安全的考虑。在 Powershell 执行脚本的格式如下:
PS C:\> .\sample.ps1
3. :: (静态成员运算符)
静态成员运算符经常用来调用 .NET Framework 类的静态属性运算符和方法。要查找对象的静态属性和方法,可以把命令的输出通过管道(|)输入给 Get-Member cmdlet 命令。例如:
PS C:\> [datetime]::now 2017年1月15日星期日 19:11:40 PS C:\> [datetime]::now | Get-Member TypeName: System.DateTime Name MemberType Definition ---- ---------- ---------- Add Method System.DateTime Add(System.TimeSpan value) AddDays Method System.DateTime AddDays(double value) AddHours Method System.DateTime AddHours(double value) AddMilliseconds Method System.DateTime AddMilliseconds(double value) AddMinutes Method System.DateTime AddMinutes(double value)
4. ..(范围运算符)
范围运算符表示给定上下限的整数数组中的序列整数,注意该运算符只针对整数有效。利用该运算可以快速创建指定范围的整数数组。例如:
PS C:\> 1..4 1 2 3 4 PS C:\> 4..1 4 3 2 1 PS C:\> $max = 5 PS C:\> foreach ( $a in 1..$max )` >> { >> Write-Host $a >> } >> 1 2 3 4 5
从上面的例子中可以看出,使用范围运算符可以使语法更简洁和直观。
5. -f (格式运算符)
使用字符串对象的格式化方法对字符串进行格式化。在运算符左侧输入格式字符串,在运算符右侧输入要格式化的对象。例如:
PS D:\> "{0} {1} {2:N}" -f 1,"Hello",[math]::pi 1 Hello 3.14
以上语句中-f 之前的{0} {1} {2} 都是占位符,-f 之后是要替换占位的值,对于第三个值,格式化使其只输出两位小数。
格式运算符常用在对时间,日期,以及对输出结果(保留几位小数等)的格式化。
6. $( ) 子表达式运算符
返回一条或多条语句的结果。对于单个结果将返回标量。对于多个结果将返回数组。例如:
PS C:\> $x = 2 PS C:\> $( $x * 5) 10 PS C:\> $( Get-Process powershell) Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 432 6 29248 20352 139 3.27 3320 powershell
7. @( ) 数组子表达式运算符
通过数组返回一条或多条语句的结果。如果只有一项,则数组只有一个成员。例如:
PS C:\> @( Get-WmiObject win32_logicalDisk) DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 27906625536 Size : 44811317248 VolumeName : DeviceID : D: DriveType : 3 ProviderName : FreeSpace : 7755649024 Size : 42950717440 VolumeName : 软件
8. ,(逗号运算符)
用作二元运算符时,逗号用于创建数组。用作一元运算符时,逗号用于创建只含一个成员的数组。逗号放在成员之前。例如对比一下命令的执行结果:
PS C:\> $myArray = 1,2,3 PS C:\> $singleArray = ,1 PS C:\> $singleInt = 1
第一条命令和第二条命令创建都是整数数组,第二条命令创建的数组只有一个元素。第三条命令创建的是一个数型变量。
总结
Powershell 中的特殊运算符可以实现一些其他运算无法实现的一些功能。尤其是调用运算符和点运算,以及静态成员运算符,可以实现其他运算望尘莫及的功能,掌握好这些特殊运算符,可以实现 Powershell 中许多奇技淫巧。