zhang-snail

导航

 

(20)Powershell中的特殊运算符

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


1. & (调用运算符)

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

PS C:\Windows\System32\WindowsPowerShell\v1.0> $command = "Get-Service"

PS C:\Windows\System32\WindowsPowerShell\v1.0> $command
Get-Service

PS C:\Windows\System32\WindowsPowerShell\v1.0> & $command

Status   Name               DisplayName                           
------   ----               -----------                           
Stopped  AarSvc_1ba9ab      Agent Activation Runtime_1ba9ab       
Running  ACN_HFB_Complia... ACN_HFB_Compliance_Check              
Stopped  AJRouter           AllJoyn Router Service                
Stopped  ALG                Application Layer Gateway Service     
Stopped  AppIDSvc           Application Identity                  
Running  Appinfo            Application Information               
Stopped  AppMgmt            Application Management                
Stopped  AppReadiness       App Readiness                         
Stopped  AppVClient         Microsoft App-V Client                
Running  AppXSvc            AppX Deployment Service (AppXSVC)     
Stopped  AssignedAccessM... AssignedAccessManager 服务              
Running  AudioEndpointBu... Windows Audio Endpoint Builder        
Running  Audiosrv           Windows Audio                         
Stopped  autotimesvc        手机网络时间                                
Running  Avecto Defendpo... Avecto Defendpoint Service     

从上面的例子中可以看出,将 Get-Service 命令赋值给变量 $command , 所以当输入 $command 输出的是字符串值 "Get-Service",如果要执行该命令,则需要在变量前添加调用运算符。

这个命令在实际的应用中非常有用,比如可以将cmd 命令赋值给变量,然后利用调用运算符就可以执行 cmd 命令。


2. . (属性引用运算符,或称为点运算符)

利用属性运算符就可以像高级语言语言一样,通过点运算符访问对象的属性和方法。例如:

PS C:\Windows\System32\WindowsPowerShell\v1.0> $myStr = "This is my string"

PS C:\Windows\System32\WindowsPowerShell\v1.0> $myStr.Length
17

PS C:\Windows\System32\WindowsPowerShell\v1.0> $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:\Windows\System32\WindowsPowerShell\v1.0> [datetime]::now

2024年1月28日 16:09:13



PS C:\Windows\System32\WindowsPowerShell\v1.0> [datetime]::now | Get-Member


   TypeName: System.DateTime

Name                 MemberType     Definition                                                                                                       
----                 ----------     ----------                                                                                                       
Add                  Method         datetime Add(timespan value)                                                                                     
AddDays              Method         datetime AddDays(double value)                                                                                   
AddHours             Method         datetime AddHours(double value)                                                                                  
AddMilliseconds      Method         datetime AddMilliseconds(double value)                                                                           
AddMinutes           Method         datetime AddMinutes(double value)                                                                                
AddMonths            Method         datetime AddMonths(int months)                                                                                   
AddSeconds           Method         datetime AddSeconds(double value)                                                                                
AddTicks             Method         datetime AddTicks(long value)                                                                                    
AddYears             Method         datetime AddYears(int value)  

4. ..(范围运算符)

范围运算符表示给定上下限的整数数组中的序列整数,注意该运算符只针对整数有效。利用该运算可以快速创建指定范围的整数数组。例如:

PS C:\Windows\System32\WindowsPowerShell\v1.0> 1..4
1
2
3
4

PS C:\Windows\System32\WindowsPowerShell\v1.0> 4..1
4
3
2
1

PS C:\Windows\System32\WindowsPowerShell\v1.0> $max = 5

PS C:\Windows\System32\WindowsPowerShell\v1.0> foreach ( $a in 1..$max )
{
     Write-Host $a
 }
1
2
3
4
5

从上面的例子中可以看出,使用范围运算符可以使语法更简洁和直观。


5. -f (格式运算符)

使用字符串对象的格式化方法对字符串进行格式化。在运算符左侧输入格式字符串,在运算符右侧输入要格式化的对象。例如:

PS C:\Windows\System32\WindowsPowerShell\v1.0> "{0} {1} {2:N}" -f 1,"Hello",[math]::pi
1 Hello 3.14

以上语句中-f 之前的{0} {1} {2} 都是占位符,-f 之后是要替换占位的值,对于第三个值,格式化使其只输出两位小数。

格式运算符常用在对时间,日期,以及对输出结果(保留几位小数等)的格式化。


6. $( ) 子表达式运算符

返回一条或多条语句的结果。对于单个结果将返回标量。对于多个结果将返回数组。例如:

PS C:\Windows\System32\WindowsPowerShell\v1.0> "{0} {1} {2:N}" -f 1,"Hello",[math]::pi
1 Hello 3.14

PS C:\Windows\System32\WindowsPowerShell\v1.0> $x = 2

PS C:\Windows\System32\WindowsPowerShell\v1.0> $( $x * 5)
10

7. @( ) 数组子表达式运算符

通过数组返回一条或多条语句的结果。如果只有一项,则数组只有一个成员。例如:

PS C:\Windows\System32\WindowsPowerShell\v1.0> @( Get-WmiObject win32_logicalDisk)


DeviceID     : C:
DriveType    : 3
ProviderName : 
FreeSpace    : 52780847104
Size         : 252841029632
VolumeName   : Windows

8. ,(逗号运算符)

用作二元运算符时,逗号用于创建数组。用作一元运算符时,逗号用于创建只含一个成员的数组。逗号放在成员之前。例如对比一下命令的执行结果:


PS C:\Windows\System32\WindowsPowerShell\v1.0> $myArray = 1,2,3

PS C:\Windows\System32\WindowsPowerShell\v1.0> $singleArray = ,1

PS C:\Windows\System32\WindowsPowerShell\v1.0> $singleInt = 1

第一条命令和第二条命令创建都是整数数组,第二条命令创建的数组只有一个元素。第三条命令创建的是一个数型变量。


总结

Powershell 中的特殊运算符可以实现一些其他运算无法实现的一些功能。尤其是调用运算符和点运算,以及静态成员运算符,可以实现其他运算望尘莫及的功能,掌握好这些特殊运算符,可以实现 Powershell 中许多奇巧。

posted on 2024-01-28 16:27  zhang-snail  阅读(69)  评论(0编辑  收藏  举报