为不同类型的系统提供的本机支持

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 点起(条件)已过多长时间。

转载于:https://www.cnblogs.com/ahuo/archive/2009/05/17/1458885.html

Windows PowerShell 语言快速参考相关推荐

  1. OWL2 Web本体语言快速参考指南

    2019独角兽企业重金招聘Python工程师标准>>> 本文档<OWL2 Web本体语言入门>是W3C发布的OWL 2 Web Ontology Language Pri ...

  2. Windows PowerShell 2.0语言之字面类型系统

    PowerShell语言允许通过一个字面类型(type Literals)来访问类型,它是用括号抬起的类型名,返回.NET底层的System.Type对象实例,如: PS C:\> [Syste ...

  3. Windows PowerShell 2.0语言的内置类型系统

    PowerShell不仅允许用户操作各种类型的对象,而且可以通过统一方式来修改这些类型.当然也包括内置类型,这样可以更贴近日常工作中用到的对象类型.PowerShell的类型在很大程度上依靠.NET框 ...

  4. 易学易用的Windows PowerShell(转)

    出处:http://www.cnblogs.com/shanyou/archive/2007/02/12/648204.html Windows PowerShell 是微软为 Windows 环境所 ...

  5. Windows PowerShell™ 用户手册(zz)

    Windows PowerShell™ 用户手册 Microsoft Corporation 发布日期:2006 年 9 月 摘要 Windows PowerShell™ 是专为系统管理员设计的新 W ...

  6. Windows PowerShell™ 用户手册

    Windows PowerShell™ 用户手册 Microsoft Corporation 发布日期:2006 年 9 月 摘要 Windows PowerShell™ 是专为系统管理员设计的新 W ...

  7. 抢先体验 Windows PowerShell 2.0 全新技术

    Windows PowerShell(下简称"PowerShell")是微软公司为Windows环境所开发的Shell及脚本语言技术,采用命令行界面.第1个版本于2006年第4季度 ...

  8. windows编写linux脚本,Windows PowerShell:共享您的脚本 - 在脚本中编写 Cmdlet | Microsoft Docs...

    Windows PowerShell:在脚本中编写 Cmdlet 08/17/2016 本文内容 Don Jones Windows PowerShell v2 中一项很酷的新功能是能够编写性能明显改 ...

  9. 【WIN32之旅】WINDOWS错误处理与参考(四)

    转载请说明原出处,谢谢~ http://blog.csdn.net/seven_1992/article/details/44497435 上一篇,我们说到了GetLastError()函数,可是它返 ...

最新文章

  1. 中国肠道大会 | 日程及嘉宾
  2. VisualStudio2013 如何打开之前版本开发的(.vdproj )安装项目
  3. 腾讯云centos7搭建javaweb服务器(本人亲自经历,详细)
  4. com/android/dx/command/main,com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
  5. Java工作笔记-使用IDEA开始我的第一个Spring项目
  6. JavaScript:Date 对象
  7. Python数据结构与算法(1.3)——Python基础之输入、输出与高阶赋值
  8. DSP程序中 ,如何完成延时且不影响整体程序的工作效率
  9. Gif动图如何裁剪?收下这个图片在线裁剪工具
  10. 《项目开发团队分配管理软件》
  11. python获取已打开的网页内容_从Python3浏览器中已打开的网页获取HTML文件
  12. codevs 2147 数星星
  13. Intel CPU型号解读以及如何粗略判断Intel CPU的性能(i3、i5、i7以及CPU的代数)
  14. MySQL5.7修改root账户密码
  15. 华为Mate7-打开开发者选项
  16. 什么样内容的书值得买纸质书
  17. 数据库-面试题-MySQL数据库的优化方法
  18. 在Windows 2003下安装ZoneAlarm Pro 7
  19. 【产品经理】用户增长方法论
  20. 2022年山东省安全员C证考试内容及山东省安全员C证试题及解析

热门文章

  1. Android ——SoundPool播放音频
  2. VB之修改机器码达到WG
  3. Java学习----集合框架总结
  4. 小白学数据分析-----ARPDAU的价值
  5. [Math]添加了一个EulerProject标志
  6. [Vue.js]实战 -- 电商项目(三)
  7. 关于用jQuery实现的checkbox全选和反选功能
  8. Vue「四」—— 组件生命周期、数据共享
  9. 取到小数后三位_小数名师工作室 数学实验 || 一个小数乘10、100、1000……的计算规律...
  10. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)