• 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/

  • 相关阅读:
    Newtonsoft.Json.SerializeObject 转换参数
    EntityFramework Code First 特性
    删除SVN
    C# 数据库连接字符串
    javascript 计算后 无聊的小数点处理
    python index 自己实现
    springcloud 网关过滤器Zuul Filter
    Spring Cloud Feign服务通信与负载均衡机制
    Spring Cloid Ribbon服务的通信与负载均衡搭建
    spring-cloud注册中心集群
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/3724217.html
Copyright © 2020-2023  润新知