PowerShell 基本語法及常用命令

PowerShell常用命令:

一 Get類

1.Get-Command : 得到所有PowerShell命令,獲取有關 cmdlet 以及有關 Windows PowerShell 命令的其他元素的基本信息。 包括Cmdlet、Alias、Function。

2.Get-Process : 獲取所有進程
3.Get-Help : 顯示有關 Windows PowerShell 命令和概念的信息

4.Get-History : 獲取在當前會話中輸入的命令的列表

5.Get-Job : 獲取在當前會話中運行的 Windows PowerShell 後臺作業

6.Get-FormatData : 獲取當前會話中的格式數據

7.Get-Event : 獲取事件隊列中的事件

8.Get-Alias : 獲取當前會話的別名

9.Get-Culture :獲取操作系統中設置的當前區域性

  1. Get-Date :獲取當前日期和時間

  2. Get-Host : 獲取表示當前主機程序的對象

12.Get-Member : 獲取對象的屬性和方法。

                         如:$var = 3

                                $var | get-member

                          結果:TypeName: System.Int32

                         Name        MemberType      Definition                                                                                           
                         ----                   ----------         ----------                                                                                           
                         CompareTo       Method      int CompareTo(System.Object value), int CompareTo(int value)                                         
                         Equals              Method     bool Equals(System.Object obj), bool Equals(int obj)                                                 
                        GetHashCode    Method     int GetHashCode()                                                                                    
                        GetType            Method     type GetType()                                                                                       
                        GetTypeCode     Method     System.TypeCode GetTypeCode()                                                                        
                        ToString             Method     string ToString(), string ToString(string format), string ToString(System.IFormatProvider provider...

13.Get-Random : 從集合中獲取隨機數或隨機選擇對象

14.Get-UICulture : 獲取操作系統中當前用戶界面 (UI) 區域性設置

15.Get-Unique : 從排序列表返回唯一項目

16.Get-Variable :獲取當前控制檯中的變量

17.Get-EventLog : 獲取本地或遠程計算機上的事件日誌或事件日誌列表中的事件

18.Get-ChildItem : 獲取一個或多個指定位置中的項和子項

19.Get-Content : 獲取指定位置的項的內容

20.Get-ItemProperty :獲取指定項的屬性

21.Get-WmiObject : 獲取 Windows Management Instrumentation (WMI) 類的實例或可用類的相關信息

22.Get-Location :獲取當前工作位置的相關信息(如:F:\Users\TaoMin )

23.Get-PSDrive:獲取當前會話中的 Windows PowerShell 驅動器

24.Get-Item:獲取位於指定位置的項

25.Get-Process :獲取在本地計算機或遠程計算機上運行的進程

26.Get-Service : 獲取本地或遠程計算機上的服務

27.Get-Transaction :獲取當前(活動)事務

28.Get-ExecutionPolicy :獲取當前會話中的執行策略

二.Set類 (set類命令一般都含有參數)

1.Set-Alias : 在當前 Windows PowerShell 會話中爲 cmdlet 或其他命令元素創建或更改別名(替代名稱)

                  如:如:Set-Alias aaa Get-Command

2.Set-PSDebug :打開和關閉腳本調試功能,設置跟蹤級別並切換 strict 模式

3.Set-StrictMode :建立和強制執行表達式、腳本和腳本塊中的編碼規則

4.Set-Date :將計算機上的系統時間更改爲指定的時間

5.Set-Variable :設置變量的值,如果該變量還不存在,則創建該變量

6.Set-PSBreakpoint :在行、命令或者變量上設置斷點

7.Set-Location :將當前工作位置設置爲指定的位置

8.Set-Item :將項的值更改爲命令中指定的值

9.Set-Service :啓動、停止和掛起服務並更改服務的屬性

10.Set-Content :在項中寫入內容或用新內容替換其中的內容

11.Set-ItemProperty :創建或更改某一項的屬性值

12.Set-WmiInstance :創建或更新現有 Windows Management Instrumentation (WMI) 類的實例

13.Set-ExecutionPolicy :更改 Windows PowerShell 執行策略的用戶首選項。

三.Write類

1.Write-Host : 將自定義輸出內容寫入主機。類似於.net的 write()或者writeline()功能

2.Write-Progress :在 Windows PowerShell 命令窗口內顯示進度欄

3.Write-Debug :將調試消息寫入控制檯

4.Write-Verbose:將文本寫入詳細消息流

5.Write-Warning :寫入警告消息

6.Write-Error : 將對象寫入錯誤流

7.Write-Output : 將指定對象發送到管道中的下一個命令;如果該命令是管道中的最後一個命令,則在控制檯上顯示這些對象

8.Write-EventLog :將事件寫入事件日誌

PowerShell變量、常量、數組:

一、變量

PowerShell的變量無需預定義,可直接使用。當使用一個變量時,該變量被自動聲明。

變量以 $ 符號開頭。如:$a

PowerShell普通變量:

1.給變量賦值:

方式一:

$a = "This is a string"

$b = 123

$c = 0.125

方式二:

Set-Variable var 100

Set-Variable var1 ”test“

Set-Variable va2 800

2.獲取變量值

get-variable var #獲取單個變量值

get-variable var* #獲取多個變量值

3.清空變量值

clear-variable var

4.刪除變量

remove-variable var

5.連接兩個字符串變量

$a = "This is the 1st string"

$b = "This is the 2nd string"

c =a + " and " + $b

$c

結果:This is the 1st string and This is the 2nd string

6.變量的方法

$date = Get-Date #獲取當前時間

$date.AddDays(3) #當前時間加三天

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 語句中的枚舉器

強制指定變量類型:

一般不需要爲PowerShell的變量指定類型。但是也可以強制指定變量類型。

如:[int] $b = 5

  則此變量只能包含整數值,如果包含其他類型會出錯。 如 [int] $b = "aaaa" 就會報錯

常見變量類型如下:

  [int] 、[long]、[string] 、[char] 、[bool] 、[byte] 、[double] 、[decimal] 、[single]

  [array] :數組對象

  [xml] :XML對象

  [hashtable] :哈希表對象,類似於一個字典對象

二、常量

 PowerShell常量的值永遠不會變。常量不能被刪除。

 使用常量之前,需要通過Set-Variable來創建常量,且指定一些參數來使它等於某個常量。

 當使用常量的時候,必須用$開頭。但是,使用Set-Variable定義常量時,不可用$符號開頭。

 例如:

         $aryComputers = "loopback", "localhost"   #數組變量

         Set-Variable -name intDriveType -value 3 -option constant  #常量定義 常量:intDriveType 值:3

         foreach ($strComputer in $aryComputers)   #循環遍歷數組對象

         {"Hard drives on: " + $strComputer

          #獲取wmi對象 分類:win32_logicaldisk 電腦名稱:$strComputer 源自數組對象 電腦過濾條件:drivetype = 3 ,驅動器類型爲3

         Get-WmiObject -class win32_logicaldisk -computername $strComputer|  

         Where {$_.drivetype -eq $intDriveType}}

三、數組

  PowerShell中創建數組的方式非常簡單:

  $arrName = "LOGONSERVER","HOMEPATH", "APPDATA","HOMEDRIVE"

  和創建變量方式一樣,只是賦值時可以付多個值。

  使用數組方式:$arrName[0] :表示數組中第一個數組項的值

   數組從0開始

PowerShell註釋用法:

   註釋符號:#

   用法如下(一般在.ps1腳本文件中使用):

   Get-Process   #此處寫註釋

   sort ws

PowerShell運算符用法:

運算符如下:

1.算術二元運算符:

  +   加、串聯

   -    減

   *    乘

   /    除

   %   模

2.賦值運算符

     =   +=    -=    *=    /=   %=

3.邏輯運算符

     ! 不等於

     not  非

     and  且

      or   或

4.比較運算符(可在運算符前加上 i 或者 c ,以指定是否區分大小寫)

       -eq  等於   -ceq  區分大小寫

       -ne  不等於

       -gt   大於

       -ge  大於等於

        -lt    小於

        -le   小於等於

        -contains  包含 

 用法如下:

        此數組中是否包含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    二進制非

   8.運算符優先級

                   (){} 

                   @$  

                    !  

                    [] 

                     . 

                    &   

                    ++或者--   

                    一元+ -   

                      * / %

                      二元 + -

                      比較運算符

                      -and -or

                        |

                        >>>

                         =

     9.WindowsPowershell命令解析順序

                      別名(alias)

                      函數

                       cmdlet

                        腳本

                         可執行文件

                         正常文件

PowerShell函數用法:

用法一如下:(函數中改變變量值並不影響實際值)

           $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-hostn
$n++
}

執行結果:

        0

        1
        2
        3
        4
        5
  1. do...while的用法

用法一如下:
n = 0 do { write-hostn
n++ } while(n -ne 3) #當$n<>3時進行循環操作

執行結果:

        0

        1
        2
  1. do...until的用法

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

執行結果:

       0

       1
       2

       3

二、分支類

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拋出異常的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"
       }

執行結果:會出現逐步調試的對話框

Memo

本文轉自 https://www.cnblogs.com/feng-zhizi/p/9935874.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章