首页 > 代码库 > (20)Powershell中的特殊运算符

(20)Powershell中的特殊运算符

    Powershell 中除了常见的算术运算符,赋值运算符,比较运算符,位运算符,逻辑运算符,字符串的拆分和合并运算符,转义字符,还有一些特殊的运算符,这些特殊的运算符往往可以解决一些特殊的问题,比如执行运行命令,更改值的数据类型等。



  1. & (调用运算符)

    使用 & (调用运算符)可以运行命令、脚本或脚本块。因为调用运算符不进行分析,所以它不能解释命令参数。此调用运算符用于指示它后面的值为命令(而不是字符串)。使用此运算符可以运行存储在变量中并由字符串表示的命令。例如:

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 中许多奇技淫巧。

本文出自 “花开花落” 博客,谢绝转载!

(20)Powershell中的特殊运算符