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

时间: 2024-10-23 09:41:56

(20)Powershell中的特殊运算符的相关文章

(17)Powershell中的重定向运算符

默认情况下,Powershell 把输出发送到屏幕显示.但是,Powershell也可以将输出重定向至一个文本文件,或将错误输出重定向至常规输出流. 重定向运算符有什么用 ? 重定向运算符意味着我们可以将命令的输出信息输出到指定的文件,完全满足脚本中的log的要求,即可以利用重定向打印脚本或命令执行的详细信息. Powershell 中有以下重定向运算符. 运算符 说明 示例 > 将输出发送到指定文件. PS D:\> Get-Process > process.txt >>

(15)Powershell中的类型运算符

这节介绍 Powershell 中的类型运算符. Powershell 中的类型运算符可以与 .Net Framework 类型协同使用,可以用来判断一个对象是否是指定的 .Net Framework 类型的一个实例,或是判断一个对象是否可以转换为 .Net Framework 类型. Powershell 支持以下类型运算符 运算符 说明 示例 -is 如果对象是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSE PS C:\> "abc" -is

C++20草案中的宇宙飞船运算符(&lt;=&gt;,spaceship operator)

C++20草案中的宇宙飞船运算符(<=>,spaceship operator) Herb Sutter提议的新三路运算符<=>已经被合入C++20草案中. 宇宙飞船运算符(hh)形式如lhs<=>rhs. 比如a与b是整型,那么a<=>b返回std::strong_ordering类型的纯右值(prvalue,不能取地址那种): 如果a<b,(a<=>b)返回std::strong_ordering::less 如果a>b,(a&l

(18)Powershell中的字符串拆分运算符

Powershell中提供了对字符串的拆分操作运算符.-split 运算符将一个字符串拆分成多个字符串. 拆分运算符 拆分运算符用于将一个或多个字符串拆分为多个子字符串.可更改拆分操作的以下元素: (1)定界符.默认为空白,但是可指定字符.字符串.模式或用于设置定界符的脚本块. (2)子字符串的最大数目.默认设置为返回所有子字符串.如果指定的数字小于子字符串数,则其余子字符串将合并到最后一个子字符串中. (3)用于指定定界符匹配条件的选项,如 SimpleMatch 和 Multiline. 拆

(8)Powershell中变量的定义和使用

上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的连接,组成bool表达式等用于对管道中的命令执行结果进行筛选,我们将会后续的文章中讲到. 这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项. 和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持双字节的字符,但是像任何编程语言,我们不鼓励

java中的三元运算符详解

最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题.鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习. 什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值. 其示例代码如下:boolean a = 20 < 45 ? true : false

(21)Powershell中的通配符

使用通配符进行文件的模糊查找 Powershell 中的通配符可以实现模糊查找, 也就是说可以对一组项(而不是单个项)进行查找.例如,如果想查找 D:\MyPowerShell 目录中所有扩展名为 .ps1 的文件,可以执行以下命令: PS C:\> Get-ChildItem D:\MyPowerShell\*.ps1     目录: D:\MyPowerShell Mode                LastWriteTime     Length Name ----          

Powershell中命令自动补全功能及使用Windows命令

上一节主要介绍了Powershell中常见的别名,以及怎么通过别名查看真实的Powershell命令,Powershell别名的命名规范以及如何新建自己的别名(Powershell内置别名不可更改)以及Powershell中兼容性别名,详细内容点击这里. 在本节主要包含以下内容. Powershell命令自动补全功能. 在Powershell中使用cmd命令. 总结 Powershell中命令自动补全功能 Powershell命令自动补全的功能也称为Tab扩展,自动补全的功能可以大大提高命令输入

PowerShell中的基础数据类型

PowerShell是一个面向对象的语言,在申明变量的时候不强制要求申明数据类型,使用$开头来申明变量即可. 基本数据类型 PowerShell本身是基于.Net开发出来的,所以在.Net中的基本数据类型,在PowerShell中也可以使用,只是在PowerShell中用”[]”来标识具体的数据类型.比如[int],[long],[string],[bool],[double]等. 使用-is来判断某个变量是否指定的数据类型,和C#中的is关键字是一样的.比如: $a=10; $a -is [i