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:  Value was either too large or too small for a Decimal.

At line:1 char:22

+ [Decimal]::maxvalue + <<<< 1

2.Assignment operators(赋值运算符)

赋值运算符可向一个变量赋予一个或多个值。赋值运算符可以在赋值之前对值执行数值运算。

运算符   说明

------- ---------------

=       将变量的值设置为指定值

+=        使变量的值增加指定值,或将指定值追加到现有值

-=      使变量的值减少指定值

*=      将变量的值与指定值相乘,或将指定值追加到现有值

/=         将变量的值除以指定值

%=        将变量的值除以指定值,然后将余数(模)赋予变量

++        使变量、可赋值属性或数组元素的值增加 1

--         使变量、可赋值属性或数组元素的值减少 1

递增运算符

递增运算符可以放在变量之前(前缀)或之后(后缀)。

前缀形式:在变量的值用于语句之前使变量递增

e.g:

c:\PS> $a = 7

c:\PS> $c = ++$a

c:\PS>$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   使用正则表达式来查找与指定模式匹配或不匹配的元素。<string[]> -match <regular-expression>

-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)使用正则表达式来查找与指定模式匹配或不匹配的元素。

语法是:

<string[]> -match <regular-expression>

<string[]> -notmatch <regular-expression>

匹配运算符仅在字符串中搜索。它们无法在整数数组或其他对象中搜索。

当运算符的输入(左侧参数)是一个单标量对象(像单字符串)时,-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。

逻辑运算符的语法如下:

<statement> {-AND | -OR | -XOR} <statement>

{! | -NOT} <statement>

使用逻辑运算符的语句返回布尔值(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

重定向运算符的语法如下:<input> <operator> [<path>\]<file>

如果指定的文件已存在,则不追加数据的重定向运算符(> 和 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 类型。如果成功,那么返回转换后的对象。如果失败,则什么也不返回。也不返回错误。

类型运算符的语法如下:<input> <operator> [.NET type]  也可以是<input> <operator> ".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

PowerShell---Operators 介绍的更多相关文章

  1. nuget包管理器控制台下的powershell脚本介绍

    http://personball.com/powershell/2016/07/15/powershell-tips 定制自己的powershell,减少重复工作 安装一系列自己的常用nuget包 ...

  2. [2016-07-15]nuget包管理器控制台下的powershell脚本介绍

    博客有阵子没打理了,今天刚恢复样式,但是标题还是不太正常,总算能凑合看看. 回到正题,最近为了能在VS的程序包管理器控制台上能方便的自定义ps脚本去调整project的package,就开始看powe ...

  3. VM 映像 PowerShell 教学系列博客文章

     编辑人员注释:本文章是与Microsoft Azure工程的项目经理Kay Singh共同撰写的 正如我在第一篇博客文章中所承诺的,我又回来了,为大家分步介绍如何在PowerShell中使用VM ...

  4. (2)Windows PowerShell使用

    什么是PowerShell: Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework 的强大功能.PowerShell是命 ...

  5. Azure 新的管理模式 —— Resource Manager

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  6. RAC学习笔记

    RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...

  7. Lotus开发性能优化

    之前也总结过一篇关于性能的文章,地址在http://www.cnblogs.com/carysun/archive/2008/08/09/BasicPerformance.html,今天又看到DW上又 ...

  8. 理解RxJava:(一)基础知识

    理解RxJava:(一)基础知识 本文翻译自Grokking RxJava, Part 1: The Basics,著作权归原作者danlew所有.译文由JohnTsai翻译.转载请注明出处,并保留此 ...

  9. WSL与Windows交互实践

    1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案  * 5.1 使用别名  * 5.2 多复制一份  * 5.3 重定向  * 5.4 symlink 6 ...

  10. Jenkins持续部署-Windows环境持续部署探究1

    目录 Jenkins持续部署-Windows环境持续部署探究1 目录 前言 目的 方案流程 技术实现 PowerShell FTP上传插件 环境变量插件 脚本执行 远程调用 升级服务 启动服务 总结 ...

随机推荐

  1. PHP手册笔记

    <?php getenv — 获取一个环境变量的值 $ip = getenv ( 'REMOTE_ADDR' ); // 或简单仅使用全局变量($_SERVER 或 $_ENV) $ip = $ ...

  2. CDOJ 1277 智商杯考试 每周一题 div2 二分+数学

    智商杯考试 题目连接: http://acm.uestc.edu.cn/#/problem/show/1277 Description 你是一个挂科选手. 你现在正在考试,你很方. 你参加的考试叫做智 ...

  3. HDU 4305 Lightning(计算几何,判断点在线段上,生成树计数)

    Lightning Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. openssh相关

    openssh相关    DSA RSA,非对称加密,产生公钥.私钥,前者存放在remote,后者存放在local,ssh-keygen产生公钥私钥时,提示输入私钥密码,防止私钥泄露被盗    ssh ...

  5. OpenCV平面物体检测

    平面物体检测 这个教程的目标是学习如何使用 features2d 和 calib3d 模块来检测场景中的已知平面物体. 测试数据: 数据图像文件,比如 “box.png”或者“box_in_scene ...

  6. cc攻击技术

    攻击者借助代理服务器生成指向受害主机的合法请求,实现DOS,和伪装就叫:cc(ChallengeCollapsar). CC主要是用来攻击页面的.大家都有这样的经历,就是在访问论坛时,如果这个论坛比较 ...

  7. less、sass、stylus

    less.sass.stylus 它们是三种类似的样式动态语言,属于css预处理语言,它们有类似css的语法,为css赋予了动态语言的特性.如变量.继承.运算.函数等.这么做是为了css的编写和维护. ...

  8. 突破防盗链机制:使用referrer-killer

    在开发it博客汇的过程中遇到一个难题:很多图片链接设置了防盗链机制,从我的网站请求图片会返回403错误,但直接在浏览器中打开图片的url时却又正常. 使用fiddler抓包发现,从我的网站请求图片会带 ...

  9. 使用Material Design 创建App翻译系列---列表和卡片集的创建

    上一篇是使用Material Design 创建App翻译系列--材料主题的使用(Using Material Theme),进入正题: 想要在应用里创建Material Design风格的复杂列表和 ...

  10. 我的Android进阶之旅------&gt;Android关于TextWatcher的初步了解

    首先来看一下TextWatcher的源码 package android.text; /** * When an object of a type is attached to an Editable ...