Windows PowerShell 语言快速参考

Windows PowerShell 语言快速参考

 
为不同类型的系统提供的本机支持      
Windows PowerShell 对 WMI、XML、ASDI、ADO 和 COM 对象进行了改编以提供通用语法来访问其属性和方法。  
示例
$g = Get-WmiObject Win32_Process
$g[0].Name  # instead of $g[0].Properties[“Name”]
      
算术二元运算符      
 
+     加法,串联      
-    减法      
*    乘法,字符串重复      
/     除法      
%     模
     
      
数组操作      
此数组中是否包含 3
1,2,3,5,3,2 –contains 3

返回所有等于 3 的元素:
1,2,3,5,3,2 –eq 3

返回所有小于 3 的元素:
1,2,3,5,3,2 –lt 3

测试 2 是否存在于集合中:
if (1, 3, 5 –contains 2)
其他运算符:-gt、-le、-ge、-ne
      
数组      
 
“a”,“b”,”c”    字符串数组      
1,2,3     整数数组      
@()    空数组      
@(2)    1 个元素的数组      
1,(2,3),4    数组包含数组      
,”hi”    一个元素的数组      
$a[5]    数组的第六个元素*      
$a[2][3]    数组的第四个或第三个      
    元素      
$a[2..20]    返回从第 3 个元素到第 21 个元素     
·    数组从零开始。
      
赋值运算符      
=, +=, -=, *=, /=, %=

      
关联数组(哈希表)      
 
$hash = @{ }    创建空哈希表      
$h =@{foo=1;bar=2}    创建并初始化哈希表      
$hash.key1 = 1    将 1 赋予键“key1”      
$hash.key1    返回 key1 的值      
$hash["key1"]    返回 key1 的值     
      
布尔值和运算符      
 
TRUE    FALSE      
$TRUE    $FALSE      
所有长度大于 0 的字符串(单词“false”除外)    空字符串或字符串“false”      
所有不等于 0 的数字    所有等于 0 的数字      
长度大于 1 的数组    长度为 0 的数组      
长度为 1,其元素为 TRUE 的数组    长度为 1,其元素为 FALSE 的数组      
对所有对象的引用    空值     
      
Break(脚本)      
break 命令用于退出循环。它可以接收要退出到的可选 LABEL
示例:
while (1)
{               $a = something
if ($a –eq 1) break;
}
      
命令扩展运算符      
 
$( )    返回空值      
$(1,2,3)    返回包含 1、2、3 的数组。      
$(Get-Alias a*)    返回表达式的计算结果      
@(Get-Alias;Get-Process)    执行其中的两条命令,然后在数组中返回结果     
      
注释      
# 这是注释,因为 # 是第一个标记字符
$a = “#这不是注释…”
$a = “something” # …但这个 # 号后是注释。
Write-Host Hello#world
      
比较运算符      
 
-eq    等于      
-ne     不等于      
-gt –ge    大于,大于或等于      
-lt –le    小于,小于或等于     

可以在运算符前加上“i”或“c”以指定不区分大小写或区分大小写的操作(例如,–ceq)      
Continue(脚本)      
continue 语句表示继续执行循环的下一次迭代,而不退出循环。示例:
while (1)
{               $a = something
    if ($a –eq 1) (continue)
    # 除非 $a 等于 1,否则将不会执行此行。
}
#  永远不会执行此行。      
Dot Sourcing      
Dot sourcing 允许在当前作用域(而不是本地作用域)中运行函数、脚本块和脚本。示例:
. MyFunction

如果 MyFunction 设置了变量,则该变量是针对当前作用域(而不是该函数的本地作用域)设置的。
$a = {$x = Get-Process | Select –First 2}
. $a    #在当前作用域中计算脚本块
      
转义序列      
 
Windows PowerShell 转义字符为倒撇号,即 `。若要将字符设置为文本格式,请在其前加上 `。若要指定 `,请使用 ``。
特殊转义序列      
`0     (空值)      
`a     (警报)      
`b     (退格)      
`f     (换页)      
`n     (新行)      
`r     (回车)      
`t     (制表符)      
`v    (垂直引号)
     
      
执行顺序      
Windows PowerShell 尝试按以下顺序解析命令:别名、函数、cmdlet、脚本、可执行文件和正常文件。
      
For(脚本)      
[:label] for ([初始值]; [条件]; [迭代值]) {}

示例:
for ($i = 0; $i –lt 5; $i++) {Write-Object $i}
      
Foreach(脚本)      
[:label]
foreach (集合中的标识符) {}
Expression | foreach {}
Expression | foreach {BEGIN{} PROCESS{} END{}}

示例:
$i = 1,2,3
foreach ($z in $i) {Write-Object $z}
Get-Process |foreach {BEGIN{$x=1}
PROCESS{$X++}
END{“$X Processes”}}
      
Function(脚本)      
function MyFunction {
    write-object $args[0]
}

function test ([string]$label=”default label”,[int]$start=0)
{ BEGIN {$x=$start} PROCESS {¡?label:$_’; $x++}
END{“$x total”}
}      
Filter(脚本)      
Filter 是编写带有 PROCESS 脚本块的函数的速记方式。
filter MyFilter {
    $_.name
}      
If/elseif/else(脚本)      
if (condition) {…}
elseif (condition) {…}
else {…}

在命令行中,右大括号必须与 elseif 和 else 同行。此限制不适用于脚本。      
调用运算符      
& 运算符可用于调用脚本块或命令/函数的名称。
示例:
$a = “Get-Process”
&$a
$a = { Get-Process | Select -First 2 }
&$a
      
逻辑运算符      
!、-not、-and、-or
      
方法调用      
可以针对对象调用方法。示例:
$a = “这是字符串”
$a.ToUpper()
$a.SubString(0,3)
$a.SubString(0,($a.length/2))
$a.Substring(($a.length/2), ($a.length/3))

使用“::”运算符可以调用静态方法
[DateTime]::IsLeapYear(2005)
      
Windows PowerShell 自动变量(未全部列出)      
 
$$    前一命令行的最后一个标记      
$?    上一命令的布尔状态      
$^    前一命令行的第一个标记      
$_    当前管道对象      
$Args    为脚本或函数指定的参数      
$Error    先前命令中的错误数组      
$Foreach    引用 foreach 循环中的枚举器      
$Home    用户的主目录;通常设置为 %HOMEDRIVE%/%HOMEPATH%      
$Host    引用宿主 POWERSHELL 语言的应用程序      
$Input    通过管道传递给脚本的对象的枚举器      
$LastExitCode    上一程序或脚本的退出代码      
$Matches    使用 –match 运算符找到的匹配项的哈希表      
$PSHome    Windows PowerShell 的安装位置      
$profile    标准配置文件(可能不存在)      
$StackTrace    Windows PowerShell 捕获的上一异常      
$Switch    switch 语句中的枚举器     
      
对象属性      
使用“.”运算符可以直接引用对象的属性。
$a = Get-Date
$a.Date
$a.TimeOfDay.Hours
使用“::”运算符可以引用静态属性
[DateTime]::Now

      
运算符优先级      
在 Windows PowerShell 中,运算符是按照以下优先顺序进行计算的:() {}、@ $、!、[ ]、.、&、++ --、一元 + -、* / %、二元 + -、比较运算符、-and –or、|、> >>、=

      
其他运算符      

 
,    数组构造函数      
..    范围运算符      
-contains          
-is    类型鉴别器      
-as    类型转换器      
-band    二进制与      
-bor    二进制或      
-bnot    二进制非     
      
Return(脚本)      
return 命令用于退出当前脚本或函数并返回值。 
示例:
function foo {
    return 1
}
      
Scopes(脚本)      
在不同的作用域中可以将变量和其他数据元素实例化:
·    全局作用域中的变量对所有作用域均可见。
·    脚本作用域中的变量只对该脚本文件中的所有作用域可见。
·    本地作用域中的变量仅在当前作用域及其子域中可见。
·    私有作用域变量仅对当前作用域可见。 
作用域是在外壳程序函数的函数体中创建的(请参阅函数创建)

示例:
$global:a = 4
$script:a = 5
$local:a  = 3
$private:a = 6

      
脚本块      
命令和表达式可存储于脚本块以供以后执行。 
示例:

$block = {Get-Process; $a=1}
&$block      
脚本      
Windows PowerShell 命令可存储于脚本文件中,并可从其中执行。Windows PowerShell 脚本的文件扩展名为“.ps1”。参数可传递给脚本,而脚本可返回值。 
示例:
$sum = MyAdder.ps1 1 2 3
      
字符串      
字符串常量:
“这是字符串,此 $variable 可展开为 $(2+2)”
‘这是字符串,此 $variable 不能展开’
@”
这是“here string”,其中可包含任意字符(包括回车和引号)。将计算表达式 $(2+2)
”@
@’
带单引号的“here string”不计算表达式。 ‘@

 
字符串运算符      
+    连接两个字符串      
*    按特定次数重复字符串      
-f    设置字符串格式(.NET 格式说明符)      
-replace    替换运算符
"abcd" –replace “bc”, “TEST”
aTESTd      
-match    正则表达式匹配      
-like    通配符匹配     
      

Switch(脚本)      
在该脚本中可以使用变量 $_。$_ 表示当前正在计算的值。如果在 switch 中使用了数组,则将测试该数组的所有元素。
示例:
$var = "word1","word2","word3"
switch -regex ($var) {
"word1"  {"Multi-match Exact " + $_ }
"word2"  {"Multi-match Exact " + $_ }
"w.*2"   {"Pattern match Exact " + $_ }
default  {"Multi-match Default " + $_ }
}

输出:
Multi-match Exact word1
Multi-match Exact word2
Pattern match Exact word2
Multi-match Default word3
      
Throw      
Throw 为脚本提供的功能等同于 ThrowTerminatingError API 为 cmdlet 提供的功能。 
throw "Danger, Danger"
Danger, Danger
所在行:1 字符:6
+ throw  <<<< "Danger, Danger"
Throw 接受字符串、异常或 ErrorRecord 作为参数。
      
Trap      
Trap [ExceptionType] {
if (…)
{    continue
# 从导致 trap 的脚本语句之后的下一语句继续;
# $? 将更新,但不生成任何错误记录
} else  (…)
{      Break  
#  再次引发异常
}
#  不执行 $ErrorActionPreference 设置中
#  指定的任何操作
}

      
类型操作(脚本)      

-is   IS 类型(例如,$a -is [int])
-as   转换为类型(例如 1 -as [string] 将 1 作为字符串处理)
      
Until(脚本)      

do
{

} until (condition)

      
变量      
格式:
$[scope:]名称  或 ${任何名称} or ${任何路径}

示例:
$a = 1
${!@#$%^&*()}=3
$global:a = 1  # 在所有位置可见
$local:a = 1     # 在此作用域中定义且对子作用域可见
$private:a=1    # 与本地作用域相同,但对子作用域不可见
$script:a=1     # 对此脚本中的所有作用域均可见
$env:path = “d:/windows”
${C:/TEMP/testfile.txt}=”这将写入文件”
Get-Variable –scope 1 a  #从父作用域获取值
Get-Variable –scope 2 a  # 祖父

      
While(脚本)      
[:label] while (condition)


}

do
{

} while (condition)


      
分析      
Windows PowerShell 可以按两种模式进行分析 -- 命令模式和表达式模式。在表达式模式下,Windows PowerShell 以最高级别语言分析方法来进行分析:若为数字,则原样表示该数字;若为字符串,则需要加引号,依此类推。表达式的表示方法如下所示:
2+2
4
"Hello" + " world"
Hello world
$a = "hi"
$a.length * 13
26
在命令模式下进行分析时,字符串不需要加引号,除变量和圆括号中的内容外的所有内容均可看作字符串。例如:
copy users.txt accounts.txt     
可将 users.txt 和 accounts.txt 视为字符串
write-host 2+2           
可将 2+2 视为字符串,而不是要计算结果的表达式
copy $src $dest          
$src 和 $dest 是变量。从长远的角度来看,如果在命令外壳程序中工作时不需要使用引号,则大有裨益,因为这大大减少了所需的键入量。
分析模式是由遇到的第一个标记确定的。如果该标记为数字、变量或由引号括起的字符串,则外壳程序以表达式模式进行分析。如果该行以字母、&(and 符)或 .(点)后跟空格或字母开头,则将以命令模式进行分析。
 
2+2     以数字开头为表达式模式。      
"text"    以引号开头为表达式模式。      
text    以字母开头为命令模式。       
& "text"     以 and 符开头为命令模式。      
. "file.ps1"    以点后跟空格开头为命令模式。       
.125    以点后跟数字(而不是空格或字母)开头为表达式模式。      
.text    以作为命令名称“.text”的一部分的点开头为命令模式     
将表达式和命令混合使用是非常有用的;使用圆括号即可实现这一点。模式发现过程从圆括号内开始。
Write-Host (2+2)
将 2+2 视为要计算结果的表达式,传递给 Write-Host 命令。
(Get-Date).day + 2
将 Get-Date 视为命令,其执行结果将成为该表达式左边的值。
您可以不受限制地嵌套命令和表达式。
Write-Host ((Get-Date).day + 2)
Get-Date 是命令。((Get-Date).day+2) 是表达式,而 Write-Host ((Get-Date).day + 2) 也是命令。
Write-Host ((Get-Date) - (Get-Date).date)
两次使用 Get-Date 命令以确定自午夜 12 点起(条件)已过多长时间。
     
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值