设为首页 收藏本站
查看: 998|回复: 0

PowerShell 运算符详解

[复制链接]

尚未签到

发表于 2018-9-3 07:32:33 | 显示全部楼层 |阅读模式
  1.Arithmetic operators(算术运算符)
  算术运算符包括加、减、乘、除、取模
  此外,加法运算符 (+) 和乘法运算符 (*) 还可对字符串、数组和哈希表进行运算。加法运算符将输入连接起来。乘法运算符返回输入的多个副本。
  运算符
  说明
  
  示例
-------- ------------------- -------------------------
  +整数相加;连接字符串、数组和哈希表 6+2"file" + "name"
  —值减值6-2 (get-date).date - 1
  —对数字取负—4 -6+2
  *整数相乘;按指定次数复制字符串和数组 6*2 "w"*3
  /两值相除 6/2
  %返回除法运算的余数 7%2
  
  运算符优先级
  圆括号() > -(对负号) > *,/,% > +,-(对减号)
  
  对非数字类型进行加法和乘法运算
  可以对数字、字符串、数组和哈希表进行加法运算。在进行加法运算时会将元素连接起来。在连接集合(如数组或哈希表)时,会创建包含两个集合中的对象的新对象
  也可以对数字、字符串和数组进行乘法运算。但是,不能对哈希表进行乘法运算。因为试图连接具有相同键的哈希表,运算会失败。
e.g:
  c:\PS> "file" + 16输出file16
c:\PS> $array = 1,2,3
c:\PS> $array + 16
  输出
1
2
3
16
c:\PS> $array + "file"
1
2
3
file
  c:\PS> "file" * 3输出 filefilefile
  
  此外,还可以对不同类型的对象执行算术运算。Windows PowerShell 执行的运算由运算中最左边的对象的 Microsoft .NET Framework 类型确定。Windows PowerShell 会尝试将运算中的所有对象都转换为第一个对象的 .NET Framework 类型。如果转换对象成功,则执行适用于第一个对象的 .NET Framework 类型的运算。如果在转换任何对象时失败,则运算失败。
  
  因为用于计算语句的方法由最左边的对象确定,所以 Windows PowerShell 中的加法和乘法不是严格可交换的。例如,(a + b) 并不总是等于 (b + a),而 (a * b) 也不总是等于 (b * a)
  e.g: "file" + 2≠2 + "file"
  
  关于加法运算后结果的类型
  1.Windows PowerShell 自动选择最适于表示结果而不丢失精度的 .NET Framework 数值类型
  2.如果运算结果超出类型的表示范围,则扩大结果的类型以容纳结果
  3.结果的类型不一定与其中某个操作数相同。在下面的示例中,负值不能转换为无符号整数,而无符号整数太大,不能转换为 Int32:C:\PS> ([int32]::minvalue + [uint32]::maxvalue).gettype().fullname输出System.Int64
  4.System.Decimal 类型是一个例外。如果任意一个操作数是 Decimal 类型,则结果将是 Decimal 类型。如果结果超出 Decimal 类型的表示范围,将不会转换为 Double。而会生成错误
  C:\PS> [Decimal]::maxvalue + 1
  Error:Valuewas either too large or too small for a Decimal.
  At line:1 char:22
  + [Decimal]::maxvalue + $a输出8
  c:\PS>$c输出8
  后缀形式:后缀形式在变量的值用于语句之后使变量递增
  C:\PS> $a = 7
  C:\PS> $c = $a++
  C:\PS> $a输出8
  C:\PS> $c输出7
  递减运算符的前缀形式和后缀形式类似
  
  为多个变量赋值
  在 Windows PowerShell 中,可以使用单个命令对多个变量赋值。所赋值的第一个元素将赋予第一个变量,第二个元素赋予第二个变量,第三个元素赋予第三个变量,依此类推。
  如果所赋值包含的元素个数超过变量数,则将所有剩余的值都赋予最后一个变量。
  通过串联变量,还可以将单个值赋予多个变量。e.g:$a = $b = $c = $d = "three"
  除了使用赋值运算来设置变量值以外,还可以使用 Set-Variable cmdlet。例如,下面的命令使用Set-Variable 将包含 1、2、3 的数组赋予 $a 变量。
  Set-Variable -name a -value 1, 2, 3
  
  3.Comparison operators(比较运算符)
  默认情况下,所有比较运算符都不区分大小写。若要使一个比较运算符区分大小写,请在运算符名称前加字母"c"。例如,"-eq"区分大小写的形式为"-ceq"。若要明确表示不区分大小写,则在运算符前加字母"i"。例如,"-eq"的明确不区分大小写的形式为"-ieq"。
  符号说明
------ ---------------
  -eq等于.在一个或多个输入值与指定模式相同时,返回一个 TRUE 值或返回匹配项
  -ne不等于
  -gt大于
  -ge大于或等于
  -lt小于
  -le小于或等于
  -like使用通配符(*)匹配e.g: "windows powershell" -like "*shell"输出true
  -notlike使用通配符(*)不匹配e.g:"windows powershell" -like "*shell"输出false
  -match使用正则表达式来查找与指定模式匹配或不匹配的元素。 -match
  -notmatch使用正则表达式来查找与指定模式匹配或不匹配的元素。
  -contains包含运算符。包含一个相同的完整值(而不是值的一部分)。不过,包含运算符始终返回布尔值,即使在输入为集合时也如此。
  -notcontains包含运算符。不包含一个相同值。e.g:C:PS> "Windows", "PowerShell" -notcontains "Shell"返回True
  -replace替换运算符。更改值的指定元素。e.g:C:\PS> "Get-Process" -replace "Get", "Stop"输出stop-Process
  
  关于match/notmatch二三事
  匹配运算符(-match 和 -notmatch)使用正则表达式来查找与指定模式匹配或不匹配的元素。
  语法是:
   -match
   -notmatch
  匹配运算符仅在字符串中搜索。它们无法在整数数组或其他对象中搜索。
  当运算符的输入(左侧参数)是一个单标量对象(像单字符串)时,-match 和 notmatch 运算符返回布尔值,并将 $Matches 自动变量的值设置为参数的匹配项目。
  如果输入是一个集合,则 -match 和 -notmatch 运算符返回该集合中的匹配成员,但运算符不会填充 $Matches 变量。
e.g:
  C:\PS> "Sunday", "Monday", "Tuesday" -match "sun"输出Sunday c:\PS> $matches将不会输出任何东西
  C:\PS> "Sunday" -match "sun"输出True c:\PS> $matches输出
  Name  Value
  ----- -----
  0  Sum
  上一条命令向匹配运算符提交一个单字符串。-match 运算符返回布尔值并填充 $Matches 自动变量。
  而-notmatch 运算符在输入是标量且结果为 False 时(也就是说,当它检测到匹配项时)填充 $Matches 自动变量。
  
  比较运算符还包括用于操作值中的位模式的位运算符(-bAND、-bOR、-bXOR、-bNOT)
  
  4.Logical and bitwise operators(位逻辑运算符)
  Windows PowerShell 逻辑运算符可连接表达式和语句,从而可以用单个表达式来测试多个条件
  运算说明示例
-------- -------------------------------------------- ------------
  -and逻辑与。仅当两条语句都为True时才为true (1 -eq 1) -and (1 -eq 2) False
  -or逻辑或。当其中有一条语句为True时即为true (1 -eq 1) -and (1 -eq 2) True
  -xor逻辑异或。仅当一条语句为True而另一条语句为False时才为True(1 -eq 1) -xor (2 -eq 2) False
  -not逻辑非。对后面的语句取反。-not (1 -eq 1) False
  !逻辑非。对后面的语句取反。(与-not相同)!(1 -eq 1) False
  注:整数 0 的布尔值为 FALSE。所有其他整数的布尔值都为 TRUE。
  逻辑运算符的语法如下:
   {-AND | -OR | -XOR}
  {! | -NOT}
  使用逻辑运算符的语句返回布尔值(TRUE 或 FALSE)
  
  5.Redirection(重定向运算符)
  默认情况下,Windows PowerShell 将其命令输出发送至 Windows PowerShell 控制台。但是,也可以将输出重定向至一个文本文件,或将错误输出重定向至常规输出流。
  可以使用以下几种方式重定向
  a.使用 Out-File cmdlet,该 cmdlet 将命令输出发送至一个文本文件。通常在需要使用 Out-File cmdlet 的参数(例如 Encoding、Force、Width 或 NoClobber 参数)时使用该 cmdlet。
  b.使用 Tee-Object cmdlet,该 cmdlet 将命令输出发送至一个文本文件,然后将其发送至管道。
  c.使用 Windows PowerShell 重定向运算符。
  Windows PowerShell重定向运算符如下:
  运算符说明示例
------ ------------------------- -----------------
  >将输出发送到指定文件get-process > process.txt
  >>将输出追加到指定文件的内容dir *.ps1 >> scripts.txt
  2>将错误发送到指定文件get-process none 2> errors.txt
  2>>将错误追加到指定文件的内容get-process none 2>> save-errors.txt
  2>&1将错误发送到成功输出流get-process none, powershell 2>&1
  重定向运算符的语法如下:  [\]
  
  如果指定的文件已存在,则不追加数据的重定向运算符(> 和 2>)将在不发出警告的情况下覆盖文件当前内容。但是,如果该文件是只读、隐藏或系统文件,则重定向将会失败。追加重定向运算符(>> 和 2>>)不会写入只读文件,但会在系统或隐藏文件中追加内容。
  
  要将内容强制重定向到只读、隐藏或系统文件,请带 Force 参数使用 Out-File cmdlet。当写入文件时,重定向运算符使用 Unicode 编码。如果文件采用的是不同的编码,可能无法正确设置输出的格式。要将内容重定向到非 Unicode 文件,请带 Encoding 参数使用 Out-File cmdlet。
  
  6.拆分运算符与联接运算符
  -split 和 -join 运算符用于拆分和合并子字符串。-split 运算符将一个字符串拆分为多个子字符串。-join 运算符将多个字符串连接成单个字符串。
  
  
  7.类型运算符
  说明运算符如何与 Microsoft .NET Framework 类型协同使用。使用类型运算符(-is、-isnot、-as)可查找或更改对象的 .NET Framework 类型。
  
  布尔类型运算符(-is 和 -isnot)用来判断一个对象是否是指定的 .NET Framework 类型的一个实例。如果类型匹配,-is 返回值为 True;否则返回值为 False。如果类型匹配,-isnot 返回值为 False;否则返回值为 True。
  
  -as 运算符会尝试将输入对象转换为指定的 .NET Framework 类型。如果成功,那么返回转换后的对象。如果失败,则什么也不返回。也不返回错误。
  
  类型运算符的语法如下:  [.NET type]也可以是  ".NET type"
  要指定 .NET Framework 类型,可用中括号 ([ ]) 将类型名字括起来,或者以字符串方式输入类型
  e.g:C:\PS> (get-process powershell)[0] -is [System.Diagnostics.Process]输出True
  以下演示的是类型运算符在匹配对象集合,与集合中单个对象
  C:\PS> (get-culture) -is [System.Globalization.CultureInfo]
  True
  C:\PS> (get-uiculture) -is [System.Globalization.CultureInfo]
  True
  C:\PS> (get-culture), (get-uiculture) -is [System.Globalization.CultureInfo]
  False
  C:\PS> (get-culture), (get-uiculture) -is [Array]
  True
  C:\PS> (get-culture), (get-uiculture) | foreach {$_ -is [System.Globalization.CultureInfo])
  True
  True
  C:\PS> (get-culture), (get-uiculture) -is [Object]
  True
  
  8.特殊运算符
  使用特殊运算符可以执行其他类型的运算符无法执行的任务。例如,特殊运算符可以执行诸如运行命令和更改值的数据类型这样的操作。
  
  & 调用运算符
  说明:运行命令、脚本或脚本块。因为调用运算符不进行分析,所以它不能解释命令参数。此调用运算符用于指示它后面的值为命令。使用此运算符可以运行存储在变量中并由字符串表示的命令。示例:
  & "new cmdlet"
  $c = "get-executionpolicy"
  & $c
  
  . 属性取消引用运算符
  说明:访问对象的属性和方法。示例:
  $myString.length
  $myString.substring(1,3)
  
  . 使用点"."获得来源运算符
  说明:运行脚本,使脚本中的项目成为调用作用域的组成部分。有关详细信息,请参阅 about_Scope。示例:
  . c:\scripts.sample.ps1
  注意:点 (.) 还用作父目录符号,如下例所示:
  .\sample.ps1
  此命令运行 Sample.ps1 脚本,但不属于调用作用域的组成部分。
  
  :: 静态成员运算符
  说明:调用 .NET Framework 类的静态属性运算符和方法。要查找对象的静态属性和方法,请使用 Get-Member cmdlet 的 Static 参数。示例:
  [datetime]::now
  
  .. 范围运算符
  说明:表示给定上下限的整数数组中的序列整数。示例:
  1..10
  10..1
  foreach ($a in 1..$max) {write-host $a}
  
  -f 格式运算符
  说明:使用字符串对象的格式化方法对字符串进行格式化。在运算符左侧输入格式字符串,在运算符右侧输入要格式化的对象。示例:
  C:\PS> "{0} {1,-10} {2:N}" -f
  C:\PS> 1,"hello",[math]::pi
  1 hello 3.14
  
  $( ) 子表达式运算符
  说明:返回一条或多条语句的结果。对于单个结果将返回标量。对于多个结果将返回数组。示例:
  $($x * 23)
  $(Get-WMIObject win32_Directory)
  
  @( ) 数组子表达式运算符
  说明:通过数组返回一条或多条语句的结果。如果只有一项,则数组只有一个成员。示例:
  @(Get-WMIObject win32_logicalDisk)
  
  , 运算符
  说明:用作二元运算符时,逗号用于创建数组。用作一元运算符时,逗号用于创建只含一个成员的数组。逗号放在成员之前。示例:
  $myArray = 1,2,3
  $SingleArray = ,1
  转载至:http://blog.sina.com.cn/s/blog_7926c5a90100rzey.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561780-1-1.html 上篇帖子: PowerShell获取系统日志 下篇帖子: 17 从PowerShell查询MSDN-Cantgis
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表