zhang-snail

导航

 

(10)Powershell赋值运算符(一)

上一节介绍了Powershell中的内置变量,细节使劲戳jia er kuai er


本节介绍Powershell中的赋值运算符,赋值运算符可向一个变量赋予一个或多个值。赋值运算符可以在赋值之前对值执行数值运算。


Powershell支持以下赋值运算符。
运算符 说明 备注
= 将变量的值设置为指定值。
+= 使变量的值增加指定值,或将指定值追加到现有值。
-= 使变量的值减少指定值。
*= 将变量的值与指定值相乘,或将指定值追加到现有值。 第二个操作数必须是数字,详细内容参考Powershell赋值运算符(二)
/= 将变量的值除以指定值。 两个操作数都必须是数字,详细内容参考Powershell赋值运算符(二)
%= 将变量的值除以指定值,然后将余数(模)赋予变量。 两个操作数都必须是数字,详细内容参考Powershell赋值运算符(二)
++ 使变量、可赋值属性或数组元素的值增加 1。 一元运算符,有前缀和后缀的形式,并且可赋值表达式必须是数字或是可以转换为数字。
-- 使变量、可赋值属性或数组元素的值减少 1。 一元运算符,有前缀和后缀的形式,并且可赋值表达式必须是数字或是可以转换为数字。

1. 赋值运算符的语法

赋值运算符的语法如下:

<可赋值表达式><赋值运算符(上表格列出的内容)><值>,

可赋值表达式包括变量和属性,值可以是单个值,值数组,也可以是命令,表达式或是语句,例如:

PS C:\WINDOWS\system32> $a=1

PS C:\WINDOWS\system32> $pro=Get-Process

PS C:\WINDOWS\system32> $a="apple","orange","lemon","grape"

2. 赋值运算符(=)

变量是存储值的内存空间,使用赋值运算符可以将值存储在变量中,新值可以替换变量的现有值,也可以将值追加到现有值。例如以下语句将字符串"Powershell"赋值给变量$myStr

PS C:\WINDOWS\system32> $myStr="Powershell"

PowerShell 中向变量赋值时,如果该变量不存在,则会创建该变量。例如,下面两条赋值语句中的第一条创建 $a 变量并将值 1 赋予 $a。第二条赋值语句将值 3 赋予 $a。第一条语句创建一个新变量。第二条语句只更改该变量的值:

PS C:\WINDOWS\system32>  $a=1

PS C:\WINDOWS\system32> $a=3

PowerShell 中的变量没有特定数据类型,除非进行转换。如果变量仅包含一个对象,则变量采用该对象的数据类型。如果变量包含对象集合,则变量为 System.Object 数据类型。因此,可以向该集合赋予任何类型的对象。例如下面的语句可以向变量添加进程对象、服务对象、字符串和整数,而不会生成错误:

PS C:\WINDOWS\system32> $a = "Liming"

PS C:\WINDOWS\system32> $a+= "Lily"

PS C:\WINDOWS\system32> $a+= "my string"

PS C:\WINDOWS\system32> $a+=13

PS C:\WINDOWS\system32> $a
LimingLilymy string13

赋值运算符 (=) 的优先级低于管道运算符 (|),所以在将命令管道的结果赋予变量时不需要圆括号。例如,下面的命令对计算机上的进程进行排序,然后将排序后的进程赋予 $a 变量:

PS C:\WINDOWS\system32> $a=Get-Process | Sort-Object -Property name

PS C:\WINDOWS\system32> $a

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                                                       
-------  ------    -----      -----     ------     --  -- -----------                                                       
    144      10     4204       9916             10532   0 AggregatorHost                                                    
    157      21    12040      14988       0.16  19768   1 ai                                                                
    248      15     4608      14740              2808   0 AppHelperCap                                                      
    589      41    37788      47732       3.73  16308   1 ApplicationFrameHost                                              
    464      19    21740      26116   1,150.47  50828   0 audiodg                                                           
    437      39    27876      39468              5452   0 BitlockerEnablementToolService                                    
   5450      54    62880      73592             13608   0 CcmExec                                                           
   1026      50   110476      68996       7.20  46256   1 chrome                                                            
   1027      46    77644      92988       6.80  44700   1 chrome                                                            
    522      38    28936      32652       1.56  40404   1 chrome                                                            
    570      43    47692      68836       8.38  39216   1 chrome                                                            
   1844      79    99680     165268      28.31  34772   1 chrome                                                            
    689      44    31184      46724       5.73  13404   1 chrome                                                            
    497      38    25172      27908       1.56  20756   1 chrome                                                            
    597      42    32804      47592       1.58  18240   1 chrome                                                            
    496      32    14496      18120       1.34  48564   1 chrome                                                            
    609      42    33128      52152       1.73  11460   1 chrome                                                            
    471      36    24148      24072       1.34  10352   1 chrome                                                            
    586      41    33424      59292       1.88  23488   1 chrome                                                            
    735      44    57036      84104       3.98  50804   1 chrome                                                            
    156      16     2452       9400       0.06  15160   1 ChsIME                                                            
    355      30    10452      12372       0.36   2236   1 cmd                                                               
    355      30    10428      12524       0.39  45576   1 cmd                                                               
    235      16    24016      12220              6168   0 CmRcService                                                       
    198      19     7068      12896       0.30  47220   1 conhost                                                           
    153      11     6068      14244             37928   0 conhost                                                           
    163      11     6072       9908             20748   0 conhost                                                           
    145      17     6584       9800       0.06  19324   1 conhost                                                           
     89       8     5524       5920             13572   0 conhost                                                           
     89       8     5524       5932             12764   0 conhost                                                           
    152      11     6072       9108             12756   0 conhost                                                           
     89       8     5572       5776             12272   0 conhost                                                           
     89       8     5576       5732             10940   0 conhost                                                           
    153      11     6052       8696              7568   0 conhost                                                           
     89       8     5524       5640              6604   0 conhost                                                           
     89       8     5520       5924              3004   0 conhost                                                           
    145      17     6580       9448       0.67   2568   1 conhost                                                           
    982      40     3788       7964               976   1 csrss                                                             
   1126      39     2348       6532              1008   0 csrss                                                             
   1038      51   145192      64844     782.36  12520   1 ctfmon                                                            
     91       6     1176       5172             15704   0 dasHost                                                           
    210      21     4952      21428       0.27  45184   1 DataExchangeHost                                                  
    940      31    83144      82660              1736   0 DefendpointService                                                
    518      93    50352      50052             10776   0 DgAdmin                                                           
   1606      80    93688      65460              5560   0 DgAgent                                                           
    381      18    14556       4984      19.56   6808   1 DgPrompt                                                          
    238      14     5168        956              5472   0 DgService                                                         
   2228     870   152840     119368             11968   0 DgWip                                                             
    437      32    10844      14500       3.78  31876   1 dllhost                                                           
    589      41    15572      14332       4.75  31612   1 dllhost                                                           
    440      32    10660      18604       3.58  30456   1 dllhost                                                           
    559      31    13148      19600             28980   0 dllhost                                                           
    458      33    11328      16928      10.02  19700   1 dllhost                                                           
    528      25     7736      15860       3.98  16392   1 dllhost                                                           
    210      18     3908      12124             11332   0 dllhost                                                           
   2890     164   996000     151948              1708   1 dwm                                                               
    433      24    10352      13100              6268   0 esif_uf                                                           
   3677     146   501084     452312   2,024.47  22340   1 EXCEL                                                             
   8248     252   814368     252008   3,702.22  14944   1 explorer  

还可以将语句创建的值赋予变量,如下面的语句所示

PS C:\WINDOWS\system32>  $a=if($b -lt 0) { 0 } else { $b }

-lt 是 less then 的缩写,相当于高级语言中的<=,会在Powershell的比较运算符中讲到。上面语句的意思是如果$b 的值小于 0 时将 0 赋予 $a 变量。如果 $b 的值不小于零,则将 $b 的值赋予 $a。

如果要将哈希表赋予变量,请使用 PowerShell 中的标准哈希表表示法。一个 at 符号 (@),在其后键入使用分号 (😉 分隔、括在大括号 ({ }) 内的键/值对。例如,下面的语句将哈希表赋予 $a 变量:

PS C:\WINDOWS\system32> $a=@{one=1; two=2;three=3}

PS C:\WINDOWS\system32> $a

Name                           Value                                                                                        
----                           -----                                                                                        
one                            1                                                                                            
three                          3                                                                                            
two                            2                                                                                            

如果要将十六进制值赋予变量,请在值前面加上"0x"。PowerShell 会将十六进制值 (0x10) 转换为十进制值(本例中为 16),然后将该值赋予 $a 变量。例如,以下语句将值 0x10 赋予变量 $a:
PS C:\WINDOWS\system32> $a=0x10

PS C:\WINDOWS\system32> $a
16

如果要将指数值赋予变量,需要输入根数字、字母"e"和一个表示 10 的倍数的数字。例如,若要将 3.1415 的 100 次幂值赋予 $a 变量,请输入:
PS C:\WINDOWS\system32> $a=3.1415e2

PS C:\WINDOWS\system32> $a
314.15

PowerShell 中还可以将千字节 (KB)、兆字节 (MB) 和千兆字节 (GB) 转换为字节。例如,如要将值 10 千字节赋予 $a 变量,请输入:

PS C:\WINDOWS\system32> $a=10kb

PS C:\WINDOWS\system32> $a
10240

3. 加法赋值运算符(+=)

加法赋值运算符 (+=) 可增加变量的值或将指定值追加到现有值。具体操作取决于变量是数字还是字符串类型,以及变量是包含单个值(标量)还是多个值(集合)。+=运算符组合了两个运算。首先执行加法,然后赋值。因此,以下语句是等效的。

PS C:\WINDOWS\system32> $a = 1

PS C:\WINDOWS\system32> $a+=2

PS C:\WINDOWS\system32> $a=($a+2)

PS C:\WINDOWS\system32> $a
5

如果变量包含单个数字值,则 += 运算符使现有值增加该运算符右侧的数量。将运算符将得到的值赋予变量。例如:

PS C:\WINDOWS\system32> $a=5

PS C:\WINDOWS\system32> $a+=3

PS C:\WINDOWS\system32> $a
8

如果变量的值是字符串,则将该运算符右侧的值追加到该字符串,如下所示:

PS C:\WINDOWS\system32> $a="Windows"

PS C:\WINDOWS\system32> $a+=" Powershell"

PS C:\WINDOWS\system32> $a
Windows Powershell

如果变量的值是数组,则 += 运算符将其右侧的值追加到数组。除非通过转换显式指定数组的类型,否则可以将任何类型的值追加到数组,如下所示:
PS C:\WINDOWS\system32> $a=1,2,3

PS C:\WINDOWS\system32> $a+=4

PS C:\WINDOWS\system32> $a
1
2
3
4

PS C:\WINDOWS\system32> $a+="string"

PS C:\WINDOWS\system32> $a
1
2
3
4
string

如果变量的值是哈希表,则 += 运算符将其右侧的值追加到该哈希表。不过,因为只能向哈希表添加另一个哈希表,所以所有其他赋值都会失败。

例如,下面的命令将哈希表赋予 $a 变量。然后,该命令使用 += 运算符将另一个哈希表追加到现有哈希表,实际上是将一个新键/值对添加到现有哈希表。此命令成功,输出如下所示:

PS C:\WINDOWS\system32> $a=@{a=1;b=2;c=3}

PS C:\WINDOWS\system32> $a+=@{four="4"}

PS C:\WINDOWS\system32> $a

Name                           Value                                                                                        
----                           -----                                                                                        
c                              3                                                                                            
a                              1                                                                                            
b                              2                                                                                            
four                           4                                                                                            

下面的命令试图将一个整数 (1) 追加到 $a 变量中的哈希表。此命令将失败:
PS C:\WINDOWS\system32> $a=@{a=1; b=2; c=3}

PS C:\WINDOWS\system32> $a+1
A hash table can only be added to another hash table.
At line:1 char:1
+ $a+1
+ ~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : AddHashTableToNonHashTable

4. 减法赋值运算符 (-=)

减法赋值运算符 (-=) 使变量的值减少在该运算符右侧指定的值。此运算符不能用于字符串变量,也不能用于从集合中删除元素。-= 运算符组合了两个运算。首先执行减法,然后赋值。因此,以下语句是等效的:

$a-=2 <=> $a=($a-2)


以下语句使用 -= 运算符减少变量的值:

PS C:\WINDOWS\system32> $a=9

PS C:\WINDOWS\system32> $a-=4

PS C:\WINDOWS\system32> $a
5

还可以使用 -= 赋值运算符减少数值数组的成员的值。请指定要更改的数组元素的索引。在下面的示例中,数组中第三个元素(元素 2)的值减少 1:

PS C:\WINDOWS\system32> $a=1,3,5

PS C:\WINDOWS\system32> $a[1]-=1

PS C:\WINDOWS\system32> $a
1
2
5

不能使用 -= 运算符删除变量的值。要删除赋予变量的所有值,请使用 Clear-Item 或 Clear-Variable cmdlet 将值 $null 或 "" 赋予变量。
PS C:\WINDOWS\system32> $a=8

PS C:\WINDOWS\system32> $a=$null

PS C:\WINDOWS\system32> $a

要从数组中删除特定值,请使用数组表示法将值 $null 赋予该特定项。例如,下面的语句从数组中删除第二个值(索引位置 1):
PS C:\WINDOWS\system32> $a=1,2,4

PS C:\WINDOWS\system32> $a
1
2
4

PS C:\WINDOWS\system32> $a[1]=$null

PS C:\WINDOWS\system32> $a
1
4

要删除变量,请使用 Remove-Variable cmdlet。在变量已显式转换为特定数据类型,而您需要非类型化变量时,可以使用此方法。下面的命令删除 $a 变量:
PS C:\WINDOWS\system32> $a=5

PS C:\WINDOWS\system32> Remove-Variable a

PS C:\WINDOWS\system32> $a

需要注意的是,使用Remove-Variable命令时,使用的命令名称,变量之前没有美元符号($)。

posted on 2024-01-19 19:18  zhang-snail  阅读(135)  评论(0)    收藏  举报