• Windows PowerShell 语言快速参考


     

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

    Windows PowerShell WMIXMLASDIADO 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)

    返回包含 123 的数组。

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

  • 相关阅读:
    树莓派更新镜像源于镜像源推荐
    树莓派安装系统并设置中文界面
    查询linux文件的MD5值
    iOS安全攻防(二十三):Objective-C代码混淆
    【v2.x OGE教程 20】粒子效果
    JNI_最简单的Java调用C/C++代码
    JavaScript面向对象精要(一)
    频繁模式挖掘apriori算法介绍及Java实现
    hdu1573X问题(不互素的中国剩余定理)
    hive优化之自己主动合并输出的小文件
  • 原文地址:https://www.cnblogs.com/ahuo/p/1458885.html
Copyright © 2020-2023  润新知