PowerShell随笔2_分支 选择 循环 特殊变量

PowerShell特殊变量:

    PowerShell的特殊变量由系统自动创建。用户自定义的变量名称应该不和特殊变量相同。

    $^ :前一命令行的第一个标记

    $$ :前一命令行的最后一个标记

    $_ :表示表示当前循环的迭代变量。

    $? :前一命令执行状态,成功(Ture) 或者 失败(False)

    $Args :为脚本或者函数指定的参数

    $Error :错误发生时,错误对象存储于变量 $Error 中

    $Foreach :引用foreach循环中的枚举器

    $Home :用户的主目录

    $Host :引用宿主 POWERSHELL 语言的应用程序

    $Input :通过管道传递给脚本的对象的枚举器

    $LastExitCode :上一程序或脚本的退出代码

    $Matches : 使用 –match 运算符找到的匹配项的哈希表

    $PSHome :Windows PowerShell 的安装位置

    $profile :标准配置文件(可能不存在)

    $StackTrace : Windows PowerShell 捕获的上一异常

    $Switch :switch 语句中的枚举器

 

============================================================

  此数组中是否包含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)

 

============================================================

 

5.调用运算符

             &  可用于调用脚本块或者命令/函数的名称 

                    用法如下:

                     $a = { Get-Process | Select -First 2}  #获取处理器信息排名前二的两条记录

                     &$a

              .  可用于方法调用

                     用法如下:

                      $a = "这是字符串"

                      $a.substring(0,3)

                 ::  用于静态方法调用   

 

                       用法如下:         

                       [DateTime]::IsLeapYear(2008)

                       结果:True  

                       [DateTime]::Now  #返回当前时间

      6.字符串运算符

                +  连接两个字符串

                 *   按指定次数重复字符串

                  -f   设置字符串格式

                   -replace   替换运算符    用法:"abcd" -replace "bc","TEST"   返回结果:aTESTd

                   -match   正则表达式匹配

                   -like       通配符匹配

      7.其他运算符

                    , 数组构造函数

                     ..  范围运算符

                     -is  类型鉴别器  用法: $a = 100  $a -is [int]  返回结果:Ture  $a -is [string] 返回结果:False

                     -as   类型转换器  用法: 1 -as [string]   #将1作为字符串处理

                     -band  二进制与

                     -bor     二进制或

                     -bnot    二进制非

 

=====================================================================

 

一如下:函数中改变变量值并不影响实际值

               $var1=10
               function one{"The Variable is $var1"}
               function two{$var1=20;one}
               one
               two
               one

执行结果:

              The Variable is 10
              The Variable is 20
              The Variable is 10

用法二如下:(函数中变量值的改变要用$Script:var的形式)

                $var1=10
                function one{"The Variable is $var1"}
                function two{$Script:var1=20;one}
                one
                two
                one

执行结果:

               The Variable is 10
               The Variable is 20
               The Variable is 20

 

PowerShell条件控制的用法:        

一、循环类

1.foreach的用法

用法一如下:

            $var=1..6 #定义数组

            foreach($i in $var)
            {
                     $n++
                     Write-Host "$i"
             }
            Write-Host "there were $n record"

执行结果:

            1
            2
            3
            4
            5
            6
            there were 6 records

用法二如下:直接获取管道数据

            $n = 0
            "a","b","c","d" | foreach{
                    $n++
                    Write-Host $_
                    }
            Write-Host "there were $n record"

执行结果:

            a

            b

            c

            d

             there were 4 records

 

2.while的用法

用法一如下:
            $n = 0
            while($n -le 5)    #当$n小于等于5时进行下面操作
            {
                  write-host $n
                  $n++
            }

执行结果:

            0

            1
            2
            3
            4
            5

 

3. do...while的用法

用法一如下:
            $n = 0
            do
            {
                  write-host $n
                  $n++
            }
            while($n -ne 3)    #当$n<>3时进行循环操作

执行结果:

            0

            1
            2

 

4. do...until的用法

用法一如下:
            $n = 0
            do
            {
                  write-host $n
                  $n++
            }
            until($n -gt 3)    #当$n>3时停止操作

执行结果:

           0

           1
           2

           3

$JobName = "JobUpdateCheck"
$Null = Start-Job -Name $JobName -scriptblock ${Function:TaskSch} -ArgumentList $TaskCheckName,$UserName,$UserPass,$TaskChecktime,$TaskCheckdate,$TaskCheckScriptPath
Do {
Start-Sleep -Milliseconds 500
$JobState = (Get-Job -Name $JobName).State
}
Until ($JobState -eq "Completed")
Receive-Job -Name $JobName
Get-Job -Name $JobName |Remove-Job


 

二、分支类

1.if用法

   if语法结构如下:

              if(条件1)

              {处理1}

               elseif(条件2)

               {处理2}

               ...elseif 可多次重复

               else

               {处理3}

用法如下:

             Get-Service |foreach{  #foreach{必须放在一起,不可换行放置
                      if($_.status -eq "running"){   #if(){ 必须放在一起,不可换行放置
                                  write-host $_.displayname "("$_status")" -foregroundcolor "green"
                        }
                     else
                     {
                                 write-host $_.displayname "("$_status")" -foregroundcolor "red"
                     }
            }

执行结果:

             Windows Audio Endpoint Builder ( )
             Windows Audio ( )

             ActiveX Installer (AxInstSV) ( )
             BitLocker Drive Encryption Service ( )

             Base Filtering Engine ( )

 

2.switch用法

   switch语法结构如下:

               switch [-regex | -wildcard | -exact] [-casesensitive](表达式)| -file filename   #表达式可以为数组,为数组时顺序处理数组每一项 

                                                                                                                  # -file表示从文本获得输入,读取文本每一行,并对其执行switch块

               {

                     字符1|数字1|变量1|表达式1

                      {处理1}     #此处可加上;break 表示若匹配上则跳出switch语句      

                      字符2|数字2|变量2|表达式2

                      {处理2}

                       ...以上的组合可有多个,不可重复

                       default   #默认处理方式,这个是防止匹配不上时的处理方式,类似错误处理。且default语句只可有一个

                        {处理3}

               }

 用法一如下: switch(表达式)

                     $a = 3
                     switch($a)
                     {
                              1
                              {"It's one";break}   #break:表示若匹配跳出swith语句
                              2
                              {"It's two";break}
                              3
                              {"It's three";break}
                               4
                              {"It's four";break}
                               5
                               {"It's five";break}
                               default
                                {"It's unknown";break}
                      }

 

执行结果:

              It's three

              若 $a = 8  执行结果为:It's unknown

用法二如下:switch -casesensitive (表达式)表示区分大小写

             $day = "day1"
             switch -casesensitive($day)  # -casesensitive 表示大小写敏感,即区分大小写
             {
                    day1
                    {"It's Monday" ;break}
                    day2
                    {"It's Tuesday";break}
                    day3
                    {"It's Wednesday";break}
                    day4
                    {"It's Thursday";break}
                    day5
                    {"It's Friday";break}
                    day6
                    {"It's Saturday";break}
                    day7
                    {"It's Sunday";break}
                    default
                   {"It's unknown";break}
              }

 

执行结果: It's Monday

                  若定义  $day = "Day1"  执行结果:It's unknown

用法三如下:switch -regex(表达式)表示正则表达式匹配

      $day = "day5"
      switch -regex ($day)
      {
           ^[a-z]+$ 
           {"字母,匹配为:" +$_ ;break}
           ^[\d]+$ 
           {"数字,匹配为:" +$_ ;break}
           ^\w+$ 
           {"字母+数字,匹配为:" +$_ ;break}
           default
           {"什么都不是" +$_;break}
      }

执行结果:字母+数字,匹配为:day6

                  若 $day = "day" 执行结果为:字母,匹配为:day6

                  若 $day = "1234" 执行结果为:数字,匹配为:1234

                  若 $day = 12 执行结果为:数字,匹配为:123

                  若 $day = "*&^%" 执行结果为:什么都不是,匹配为:*&^%

用法四如下:switch -regex(表达式)表示正则表达式匹配 表达式可为数组

       $day = "day5","day6"
       switch -regex ($day)
       {
              ^[a-z]+$ 
              {"字母,匹配为:" +$_ ;}
              ^[\d]+$ 
              {"数字,匹配为:" +$_ ;}
              ^\w+$ 
              {"字母+数字,匹配为:" +$_ ;}
              default
              {"什么都不是" +$_;}
       }

执行结果:字母+数字,匹配为:day5

                 字母+数字,匹配为:day6

用法五如下:switch -wildcard (表达式)表示通配符匹配 

            $day = "day2"
            switch -wildcard ($day)
            {
                 day2 
                 {"day2,匹配为:" + $_;break}
                  day3
                 {"day3,匹配为:" + $_;break}
                 day* 
                 {"通配符,匹配为:" + $_;break}
                 default
                 {"什么都不是:" +$_;break}
            }

执行结果:day2,匹配为:day2

                 若 $day = "day5",执行结果为:通配符,匹配为:day5

                 若 $day = "sunshine",执行结果为:什么都不是:sunshine


 

三、跳转类

1.break用法:break语句出现在foreach、for、while、switch等结构中时,break语句将使windows powershell立即退出整个循环。

                      在不循环的switch结构中,powershell将退出switch代码块。

 用法如下: 

             $var = 0
             while ($var -lt 10)
             {
                    $var += 1
                    if($var -eq 5)
                    {
                          break       #当var=5时,终止while循环

                     }
                    write-host $var
              }

执行结果:

              1
              2
              3
              4

 

2.continue用法:continue语句出现在foreach、for、while等循环结构中时,continue语句将使windows powershell立即退出某一次轮循环,并继续下一轮循环。

用法如下:

          $var = 0
          while ($var -lt 10)
          {
                $var += 1
                if($var -eq 5)
                {
                        continue       #当var=5时,跳出本轮循环,继续下一轮循环
                }
               write-host $var
         }

执行结果:

            1
            2
            3
            4
            6
            7
            8
            9
            10

 

在 PowerShell 的循环中,有两个特殊的关键字:break 和 continue。

使用 continue,循环继续执行,但是跳过剩下的代码。当您执行 break 时,循环提前结束并返回所有的结果。

另外,还有一个关键字 return。它将导致立即退出当前的作用域。所以当您在一个函数中执行 return,那么该函数将会退出;而如果您在一个脚本中执行 return,那么整个脚本将退出。

 

 PowerShell抛出异常的Throw用法:

 用法如下:

                   Throw  字符串|异常|ErrorRecord

                  如:throw  "danger"

返回结果:danger 及详细错误信息

 

PowerShell获取出错信息的用法:

用法如下:
            function one
           {
                 get-process -ea stop  #-ea定义错误发生以后该如何继续执行,意同-ErrorAction
                 get-childitem ada -ErrorAction stop  #此处有错误 路径ada不存在
                 get-process -ErrorAction stop
           }

          one

返回结果:报出错误信息

 

PowerShell单步调试的用法:

用法如下:

           #单步调试 首先设置调试可用 set-psDebug -step ;若要设置为非调试状态 可用 set-psDebug -off
           for($i = 1;$i -le 10 ; $i++)
           {
                    write-host "loop number $i"
           }

执行结果:会出现逐步调试的对话框

 

from:http://lovetaomin18.blog.163.com/blog/static/18086849620125553711920/

posted on 2014-05-12 21:14  momingliu11  阅读(1574)  评论(0编辑  收藏  举报