1. 程式人生 > >Windows PowerShell常用命令

Windows PowerShell常用命令

轉自:http://blog.csdn.net/mr_pang/article/details/50571866

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 :獲取作業系統中設定的當前區域性

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

11. 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-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

二、分支類

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"
           }

執行結果:會出現逐步除錯的對話方塊