PowerShell - 快速指南



Powershell - 概述

Windows PowerShell 是一種命令列 shell指令碼語言,專為系統管理而設計。它在 Linux 中的類似物稱為 Bash 指令碼。Windows PowerShell 基於 .NET Framework 構建,幫助 IT 專業人員控制和自動化 Windows 作業系統及其在 Windows Server 環境中執行的應用程式的管理。

Windows PowerShell 命令(稱為cmdlet)允許您從命令列管理計算機。Windows PowerShell 提供程式使您可以像訪問檔案系統一樣輕鬆地訪問資料儲存,例如登錄檔和證書儲存。

此外,Windows PowerShell 具有豐富的表示式解析器和完全開發的指令碼語言。因此,簡單來說,您可以完成所有使用 GUI 執行的任務以及更多其他任務。

PowerShell ISE

Windows PowerShell整合指令碼環境 (ISE) 是 Windows PowerShell 的主機應用程式。在 Windows PowerShell ISE 中,您可以在單個基於 Windows 的圖形使用者介面中執行命令以及編寫、測試和除錯指令碼,該介面具有多行編輯、選項卡補全、語法著色、選擇性執行、上下文相關幫助以及對從右到左語言的支援。

您可以使用選單項和鍵盤快捷鍵來執行在 Windows PowerShell 控制檯中執行的許多相同任務。例如,當您在 Windows PowerShell ISE 中除錯指令碼時,要在指令碼中設定行斷點,請右鍵單擊程式碼行,然後單擊切換斷點

PowerShell 基本命令

PowerShell 命令很多,很難將所有這些命令都放入本教程中,我們將重點介紹一些最重要的也是最基本的 PowerShell 命令。

第一步是使用 Get-Help 命令,該命令會向您解釋如何提供命令及其引數。

Get Help Command

Powershell - 環境設定

PowerShell 圖示可以在工作列和開始選單中找到。只需點選圖示即可開啟。

PowerShell Icon

要開啟它,只需點選圖示,然後將開啟以下螢幕,這意味著 PowerShell 已準備好供您使用。

PowerShell Ready

PowerShell 版本

PowerShell 的最新版本為 5.0,要檢查伺服器中安裝了哪個版本,我們鍵入以下命令 – :$PSVersionTable,如以下螢幕截圖所示,從螢幕上我們還知道我們擁有 PSVersion 4.0

PSVersionTable

要更新到包含更多 Cmdlet 的最新版本,我們必須從以下連結下載Windows Management Framework 5.0https://www.microsoft.com/en-us/download/details.aspx?id=50395 並安裝它。

Windows Management Framework

PowerShell ISE

Windows PowerShell整合指令碼環境 (ISE) 是 Windows PowerShell 的主機應用程式。在 Windows PowerShell ISE 中,您可以在單個基於 Windows 的圖形使用者介面中執行命令以及編寫、測試和除錯指令碼,該介面具有多行編輯、選項卡補全、語法著色、選擇性執行、上下文相關幫助以及對從右到左語言的支援。

您可以使用選單項和鍵盤快捷鍵來執行在 Windows PowerShell 控制檯中執行的許多相同任務。例如,當您在 Windows PowerShell ISE 中除錯指令碼時,要在指令碼中設定行斷點,請右鍵單擊程式碼行,然後單擊切換斷點

要開啟它,只需轉到開始 - 搜尋,然後鍵入 - PowerShell,如以下螢幕截圖所示。

Search PowerShell

然後單擊 Windows PowerShell ISE。或者單擊以下螢幕截圖中顯示的下拉箭頭。

PowerShell ISE

它將列出伺服器上安裝的所有應用程式,然後單擊 Windows PowerShell ISE。

Windows PowerShell ISE

將開啟以下表格 –

Following Table

它包含三個部分,包括 - 編號為 1 的PowerShell 控制檯,然後是編號為 2 的指令碼檔案,第三個是命令模組,您可以在其中找到模組。

在建立指令碼時,您可以直接執行並檢視結果,例如以下示例 –

Creating Script

PowerShell 基本命令

PowerShell 命令很多,很難將所有這些命令都放入本教程中,我們將重點介紹一些最重要的也是最基本的 PowerShell 命令。

第一步是使用 Get-Help 命令,該命令會向您解釋如何提供命令及其引數。

Get Help Command

獲取更新列表

  • Get-HotFix,並按如下方式安裝修補程式
  • Get-HotFix -id kb2741530
Updates

Powershell - cmdlet

Cmdlet 或“Command let”是在 Windows PowerShell 環境中使用的輕量級命令。Windows PowerShell 執行時在命令提示符下呼叫這些 cmdlet。您可以透過 Windows PowerShell API 以程式設計方式建立和呼叫它們。

Cmdlet 與命令

Cmdlet 與其他命令 shell 環境中的命令有以下區別 –

  • Cmdlet 是 .NET Framework 類物件;而不僅僅是獨立的可執行檔案。

  • Cmdlet 可以輕鬆地用少至十幾行程式碼構建。

  • Cmdlet 不處理解析、錯誤顯示和輸出格式。這是由 Windows PowerShell 執行時完成的。

  • Cmdlet 處理物件而不是文字流,並且物件可以作為輸出傳遞以進行管道傳輸。

  • Cmdlet 基於記錄,因為它們一次處理一個物件。

獲取幫助

第一步是使用 Get-Help 命令,該命令會向您解釋如何提供命令及其引數。

Get Help Command

Powershell - 檔案和資料夾操作

以下是有關檔案和資料夾的 PowerShell 指令碼示例。

序號 操作和描述
1 建立資料夾

顯示如何使用 PowerShell 指令碼建立資料夾的示例指令碼。

2 建立檔案

顯示如何使用 PowerShell 指令碼建立檔案的示例指令碼。

3 複製資料夾

顯示如何使用 PowerShell 指令碼複製檔案的示例指令碼。

4 複製檔案

顯示如何使用 PowerShell 指令碼建立檔案的示例指令碼。

5 刪除資料夾

顯示如何使用 PowerShell 指令碼刪除資料夾的示例指令碼。

6 刪除檔案

顯示如何使用 PowerShell 指令碼刪除檔案的示例指令碼。

7 移動資料夾

顯示如何使用 PowerShell 指令碼移動資料夾的示例指令碼。

8 移動檔案

顯示如何使用 PowerShell 指令碼移動檔案的示例指令碼。

9 重新命名資料夾

顯示如何使用 PowerShell 指令碼重新命名資料夾的示例指令碼。

10 重新命名檔案

顯示如何使用 PowerShell 指令碼重新命名檔案的示例指令碼。

11 檢索專案

顯示如何使用 PowerShell 指令碼檢索專案的示例指令碼。

12 檢查資料夾是否存在

顯示如何使用 PowerShell 指令碼檢查資料夾是否存在的示例指令碼。

13 檢查檔案是否存在

顯示如何使用 PowerShell 指令碼檢查檔案是否存在的示例指令碼。

Powershell - 日期和時間操作

以下是有關係統日期和時間的 PowerShell 指令碼示例。

序號 操作和描述
1 獲取系統日期

顯示如何使用 PowerShell 指令碼獲取系統日期的示例指令碼。

2 設定系統日期

顯示如何使用 PowerShell 指令碼設定系統日期的示例指令碼。

3 獲取系統時間

顯示如何使用 PowerShell 指令碼獲取系統時間的示例指令碼。

4 設定系統時間

顯示如何使用 PowerShell 指令碼設定系統時間的示例指令碼。

Powershell - 檔案 I/O 操作

以下是建立和讀取不同型別檔案的 PowerShell 指令碼示例。

序號 操作和描述
1 建立文字檔案

顯示如何使用 PowerShell 指令碼建立文字檔案的示例指令碼。

2 讀取文字檔案

顯示如何使用 PowerShell 指令碼讀取文字檔案的示例指令碼。

3 建立 XML 檔案

顯示如何使用 PowerShell 指令碼建立 XML 檔案的示例指令碼。

4 讀取 XML 檔案

顯示如何使用 PowerShell 指令碼讀取 XML 檔案的示例指令碼。

5 建立 CSV 檔案

顯示如何使用 PowerShell 指令碼建立 CSV 檔案的示例指令碼。

6 讀取 CSV 檔案

顯示如何使用 PowerShell 指令碼讀取 CSV 檔案的示例指令碼。

7 建立 HTML 檔案

顯示如何使用 PowerShell 指令碼建立 HTML 檔案的示例指令碼。

8 讀取 HTML 檔案

顯示如何使用 PowerShell 指令碼讀取 HTML 檔案的示例指令碼。

9 擦除檔案內容

顯示如何使用 PowerShell 指令碼擦除檔案內容的示例指令碼。

10 追加文字資料

顯示如何使用 PowerShell 指令碼將文字追加到檔案內容的示例指令碼。

Powershell - 高階 Cmdlet

Cmdlet

Cmdlet 或“Command let”是在 Windows PowerShell 環境中使用的輕量級命令。Windows PowerShell 執行時在命令提示符下呼叫這些 cmdlet。您可以透過 Windows PowerShell API 以程式設計方式建立和呼叫它們。以下是 cmdlet 的高階用法示例。

序號 Cmdlet 型別和描述
1 Get-Unique Cmdlet

演示 Get-Unique Cmdlet 的示例程式。

2

Group-Object Cmdlet

演示 Group-Object Cmdlet 的示例程式。

3 Measure-Object Cmdlet

演示 Measure-Object Cmdlet 的示例程式。

4 Compare-Object Cmdlet

演示 Compare-Object Cmdlet 的示例程式。

5 Format-List Cmdlet

演示 Format-List Cmdlet 的示例程式。

6 Format-Wide Cmdlet

演示 Format-Wide Cmdlet 的示例程式。

7 Where-Object Cmdlet

演示 Where-Object Cmdlet 的示例程式。

8 Get-ChildItem Cmdlet

演示 Get-ChildItem Cmdlet 的示例程式。

9 ForEach-Object Cmdlet

演示 ForEach-Object Cmdlet 的示例程式。

10 Start-Sleep Cmdlet

演示 Start-Sleep Cmdlet 的示例程式。

11 Read-Host Cmdlet

演示 Read-Host Cmdlet 的示例程式。

12 Select-Object Cmdlet

演示 Select-Object Cmdlet 的示例程式。

13 Sort-Object Cmdlet

演示 Sort-Object Cmdlet 的示例程式。

14 Write-Warning Cmdlet

演示 Write-Warning Cmdlet 的示例程式。

15 Write-Host Cmdlet

演示 Write-Host Cmdlet 的示例程式。

16 Invoke-Item Cmdlet

演示 Invoke-Item Cmdlet 的示例程式。

17 Invoke-Expression Cmdlet

演示 Invoke-Expression Cmdlet 的示例程式。

18 Measure-Command Cmdlet

演示 Measure-Command Cmdlet 的示例程式。

19 Invoke-History Cmdlet

演示 Invoke-History Cmdlet 的示例程式。

20 Add-History Cmdlet

演示 Add-History Cmdlet 的示例程式。

21 Get-History Cmdlet

演示 Get-History Cmdlet 的示例程式。

22 Get-Culture Cmdlet

演示 Get-Culture Cmdlet 的示例程式。

Powershell - 指令碼

Windows PowerShell 是一種命令列 shell指令碼語言,專為系統管理而設計。它在 Linux 中的類似物稱為 Bash 指令碼。Windows PowerShell 基於 .NET Framework 構建,幫助 IT 專業人員控制和自動化 Windows 作業系統及其在 Windows Server 環境中執行的應用程式的管理。

Windows PowerShell 命令(稱為cmdlet)允許您從命令列管理計算機。Windows PowerShell 提供程式使您可以像訪問檔案系統一樣輕鬆地訪問資料儲存,例如登錄檔和證書儲存。

此外,Windows PowerShell 具有豐富的表示式解析器和完全開發的指令碼語言。因此,簡單來說,您可以完成所有使用 GUI 執行的任務以及更多其他任務。Windows PowerShell 指令碼是一種完全開發的指令碼語言,並具有豐富的表示式解析器/

特性

  • Cmdlet – Cmdlet 執行常見的系統管理任務,例如管理登錄檔、服務、程序、事件日誌以及使用 Windows Management Instrumentation (WMI)。

  • 面向任務 – PowerShell 指令碼語言基於任務,併為現有指令碼和命令列工具提供支援。

  • 一致的設計 – 由於 cmdlet 和系統資料儲存使用通用的語法並具有通用的命名約定,因此資料共享很容易。一個 cmdlet 的輸出可以被管道傳輸到另一個 cmdlet,無需任何操作。

  • 易於使用 – 簡化的基於命令的導航允許使用者像檔案系統導航一樣導航登錄檔和其他資料儲存。

  • 基於物件 – PowerShell 擁有強大的物件操作功能。物件可以直接傳送到其他工具或資料庫。

  • 可擴充套件的介面。 – PowerShell 是可定製的,因為獨立軟體供應商和企業開發人員可以使用 PowerShell 構建自定義工具和實用程式來管理其軟體。

變數

PowerShell 變數是命名的物件。由於 PowerShell 使用物件,因此這些變數用於處理物件。

建立變數

變數名應以 $ 開頭,名稱中可以包含字母數字字元和下劃線。可以透過鍵入有效的變數名來建立變數。

在 PowerShell ISE 控制檯中鍵入以下命令。假設您位於 D:\test 資料夾中。

$location = Get-Location

這裡我們建立了一個變數 $location 並將其賦值為 Get-Location cmdlet 的輸出。它現在包含當前位置。

使用變數

在 PowerShell ISE 控制檯中鍵入以下命令。

 $location

輸出

您可以在 PowerShell 控制檯中看到以下輸出。

Path                                                                                    
----                                                                                    
D:\test                                                                                 

獲取變數資訊

Get-Member cmdlet 可以告訴您正在使用的變數型別。請參見下面的示例。

 $location | Get-Member

輸出

您可以在 PowerShell 控制檯中看到以下輸出。

   TypeName: System.Management.Automation.PathInfo

Name          MemberType   Definition                                               
----          ----------   ----------                                               
Equals        Method       bool Equals(System.Object obj)                           
GetHashCode   Method       int GetHashCode()                                        
GetType       Method       type GetType()                                           
ToString      Method       string ToString()                                        
Drive         Property     System.Management.Automation.PSDriveInfo Drive {get;}    
Path          Property     System.String Path {get;}                                
Provider      Property     System.Management.Automation.ProviderInfo Provider {get;}
ProviderPath  Property     System.String ProviderPath {get;}

Powershell - 特殊變數

PowerShell 特殊變數儲存有關 PowerShell 的資訊。這些也稱為自動變數。以下是自動變數的列表:

運算子 描述
$$ 表示會話接收到的最後一行中的最後一個標記。
$? 表示上次操作的執行狀態。如果上次操作成功,則包含 TRUE;如果失敗,則包含 FALSE。
$^ 表示會話接收到的最後一行中的第一個標記。
$_ 與 $PSItem 相同。包含管道物件中的當前物件。您可以在對管道中的每個物件或選定物件執行操作的命令中使用此變數。
$ARGS 表示傳遞給函式、指令碼或指令碼塊的未宣告引數和/或引數值的陣列。
$CONSOLEFILENAME 表示會話中最近使用的控制檯檔案 (.psc1) 的路徑。
$ERROR 表示表示最近錯誤的錯誤物件的陣列。
$EVENT 表示表示正在處理的事件的 PSEventArgs 物件。
$EVENTARGS 表示表示正在處理的事件的派生自 EventArgs 的第一個事件引數的物件。
$EVENTSUBSCRIBER 表示表示正在處理的事件的事件訂閱者的 PSEventSubscriber 物件。
$EXECUTIONCONTEXT 表示表示 PowerShell 主機的執行上下文的 EngineIntrinsics 物件。
$FALSE 表示 FALSE。您可以使用此變數在命令和指令碼中表示 FALSE,而不是使用字串“false”。
$FOREACH 表示 ForEach 迴圈的列舉器(而不是結果值)。您可以在 $ForEach 變數的值上使用列舉器的屬性和方法。
$HOME 表示使用者主目錄的完整路徑。
$HOST 表示表示 PowerShell 當前主機應用程式的物件。
$INPUT 表示列舉傳遞給函式的所有輸入的列舉器。
$LASTEXITCODE 表示最後執行的基於 Windows 的程式的退出程式碼。
$MATCHES $Matches 變數與 -match 和 -notmatch 運算子一起使用。
$MYINVOCATION $MyInvocation 僅針對指令碼、函式和指令碼塊填充。$MyInvocation 自動變數的 PSScriptRoot 和 PSCommandPath 屬性包含有關呼叫方或呼叫指令碼的資訊,而不是當前指令碼的資訊。
$NESTEDPROMPTLEVEL 表示當前提示級別。
$NULL $null 是一個自動變數,包含 NULL 或空值。您可以使用此變數在命令和指令碼中表示不存在或未定義的值。
$PID 表示託管當前 PowerShell 會話的程序的程序識別符號 (PID)。
$PROFILE 表示當前使用者和當前主機應用程式的 PowerShell 配置檔案的完整路徑。
$PSCMDLET 表示表示正在執行的 cmdlet 或高階函式的物件。
$PSCOMMANDPATH 表示正在執行的指令碼的完整路徑和檔名。
$PSCULTURE 表示作業系統中當前使用的區域性的名稱。
$PSDEBUGCONTEXT 在除錯期間,此變數包含有關除錯環境的資訊。否則,它包含 NULL 值。
$PSHOME 表示 PowerShell 安裝目錄的完整路徑。
$PSITEM 與 $_ 相同。包含管道物件中的當前物件。
$PSSCRIPTROOT 表示正在執行指令碼的目錄。
$PSSENDERINFO 表示有關啟動 PSSession 的使用者的資訊,包括使用者身份和源計算機的時區。
$PSUICULTURE 表示作業系統中當前使用的使用者介面 (UI) 區域性的名稱。
$PSVERSIONTABLE 表示一個只讀雜湊表,顯示有關當前會話中執行的 PowerShell 版本的詳細資訊。
$SENDER 表示生成此事件的物件。
$SHELLID 表示當前 shell 的識別符號。
$STACKTRACE 表示最近錯誤的堆疊跟蹤。
$THIS 在定義指令碼屬性或指令碼方法的指令碼塊中,$This 變數引用正在擴充套件的物件。
$TRUE 表示 TRUE。您可以使用此變數在命令和指令碼中表示 TRUE。

Powershell - 運算子

PowerShell 提供了一套豐富的運算子來操作變數。我們可以將所有 PowerShell 運算子劃分為以下幾組:

  • 算術運算子
  • 賦值運算子
  • 比較運算子
  • 邏輯運算子
  • 重定向運算子
  • 分割和連線運算子
  • 型別運算子
  • 一元運算子

算術運算子

算術運算子用於數學表示式,就像它們在代數中使用的方式一樣。下表列出了算術運算子:

假設整數變數 A 持有 10,變數 B 持有 20,則:

顯示示例

運算子 描述 示例
+(加法) 將運算子兩側的值相加。 A + B 將得到 30
-(減法) 從左運算元中減去右運算元。 A - B 將得到 -10
*(乘法) 將運算子兩側的值相乘。 A * B 將得到 200
/(除法) 將左運算元除以右運算元。 B / A 將得到 2
%(模數) 將左運算元除以右運算元並返回餘數。 B % A 將得到 0

比較運算子

以下是 PowerShell 語言支援的賦值運算子:

假設整數變數 A 持有 10,變數 B 持有 20,則:

顯示示例

運算子 描述 示例
eq(等於) 比較兩個值是否相等。 A -eq B 將得到 false
ne(不等於) 比較兩個值是否不相等。 A -ne B 將得到 true
gt(大於) 比較第一個值是否大於第二個值。 B -gt A 將得到 true
ge(大於或等於) 比較第一個值是否大於或等於第二個值。 B -ge A 將得到 true
lt(小於) 比較第一個值是否小於第二個值。 B -lt A 將得到 false
le(小於或等於) 比較第一個值是否小於或等於第二個值。 B -le A 將得到 false

賦值運算子

以下是 PowerShell 語言支援的賦值運算子:

顯示示例

運算子 描述 示例
= 簡單賦值運算子。將右側運算元的值賦給左側運算元。 C = A + B 將 A + B 的值賦給 C
+= 加法和賦值運算子。它將右運算元加到左運算元,並將結果賦給左運算元。 C += A 等效於 C = C + A
-= 減法和賦值運算子。它從左運算元中減去右運算元,並將結果賦給左運算元。 C -= A 等效於 C = C - A

邏輯運算子

下表列出了邏輯運算子:

假設布林變數 A 持有 true,變數 B 持有 false,則:

顯示示例

運算子 描述 示例
AND(邏輯與) 稱為邏輯 AND 運算子。如果兩個運算元都不為零,則條件變為 true。 (A -AND B) 為 false
OR(邏輯或) 稱為邏輯 OR 運算子。如果兩個運算元中的任何一個不為零,則條件變為 true。 (A -OR B) 為 true
NOT(邏輯非) 稱為邏輯 NOT 運算子。用於反轉其運算元的邏輯狀態。如果條件為 true,則邏輯 NOT 運算子將變為 false。 -NOT(A -AND B) 為 true

其他運算子

以下是 PowerShell 語言支援的各種重要運算子:

顯示示例

運算子 描述 示例
>(重定向運算子) 重定向運算子。將輸出分配到重定向的檔案/輸出裝置中。 dir > test.log 將目錄列表列印到 test.log 檔案中

Powershell - 迴圈

可能存在需要多次執行程式碼塊的情況。通常,語句按順序執行:函式中的第一個語句首先執行,然後是第二個語句,依此類推。

程式語言提供各種控制結構,允許更復雜的執行路徑。

迴圈語句允許我們多次執行語句或語句組,以下是大多數程式語言中迴圈語句的一般形式:

Loop Architecture

PowerShell 程式語言提供了以下型別的迴圈來處理迴圈需求。點選以下連結檢視其詳細資訊。

序號 迴圈和描述
1 for 迴圈

多次執行一系列語句,並縮寫管理迴圈變數的程式碼。

2 forEach 迴圈

增強型 for 迴圈。這主要用於遍歷元素集合,包括陣列。

3 while 迴圈

在給定條件為 true 時重複語句或語句組。它在執行迴圈體之前測試條件。

4 do...while 迴圈

類似於 while 語句,但它在迴圈體末尾測試條件。

Powershell - 條件

決策結構包含一個或多個條件,程式需要對其進行評估或測試,以及在條件確定為真時要執行的語句(一個或多個),以及可選地在條件確定為假時要執行的其他語句。

以下是大多數程式語言中常見決策結構的一般形式:

Decision Making

PowerShell 指令碼語言提供以下型別的決策語句。點選以下連結檢視詳細資訊。

序號 語句及描述
1 if 語句

一個if 語句包含一個布林表示式,後跟一個或多個語句。

2 if...else 語句

一個if 語句後面可以跟著一個可選的else 語句,當布林表示式為假時執行。

3 巢狀 if 語句

你可以在另一個ifelseif語句內使用一個ifelseif語句。

4 switch 語句

一個switch語句允許將變數與其值列表進行相等性測試。

Powershell - 陣列

PowerShell 提供了一種資料結構,陣列,它儲存固定大小的任何型別的元素的順序集合。陣列用於儲存資料集合,但通常將其視為變數或物件的集合更有用。

與其宣告單獨的變數,如 number0、number1、... 和 number99,不如宣告一個數組變數,如 numbers,並使用 numbers[0]、numbers[1]、... 和 numbers[99] 來表示單個變數。

本教程介紹如何宣告陣列變數、建立陣列以及使用索引變數處理陣列。

宣告陣列變數

要在程式中使用陣列,必須宣告一個變數來引用陣列,並且可以指定變數可以引用的陣列型別。以下是宣告陣列變數的語法:

語法

$A = 1, 2, 3, 4
or
$A = 1..4  

注意 - 預設情況下,陣列物件的型別為 System.Object。GetType() 方法返回陣列的型別。可以傳遞型別。

示例

以下程式碼片段是此語法的示例:

[int32[]]$intA = 1500,2230,3350,4000

$A = 1, 2, 3, 4
$A.getType()

這將產生以下結果:

輸出

IsPublic    IsSerial    Name                        BaseType                     
--------    --------    ----                        --------                     
True        True        Object[]                    System.Array 

陣列元素透過索引訪問。陣列索引從 0 開始;也就是說,它們從 0 開始到arrayRefVar.length-1

示例

以下語句宣告一個數組變數 myList,建立一個包含 10 個雙精度型別元素的陣列,並將它的引用賦值給 myList:

$myList = 5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123

下圖表示陣列 myList。這裡,myList 儲存十個雙精度值,索引從 0 到 9。

Array myList

處理陣列

在處理陣列元素時,我們通常使用for迴圈或foreach迴圈,因為陣列中的所有元素都具有相同的型別,並且陣列的大小是已知的。

示例

以下是一個完整的示例,展示瞭如何建立、初始化和處理陣列:

$myList = 5.6, 4.5, 3.3, 13.2, 4.0, 34.33, 34.0, 45.45, 99.993, 11123

write-host("Print all the array elements")
$myList

write-host("Get the length of array")
$myList.Length

write-host("Get Second element of array")
$myList[1]

write-host("Get partial array")
$subList = $myList[1..3]

write-host("print subList")
$subList

write-host("using for loop")
for ($i = 0; $i -le ($myList.length - 1); $i += 1) {
   $myList[$i]
}

write-host("using forEach Loop")
foreach ($element in $myList) {
   $element
}

write-host("using while Loop")
$i = 0
while($i -lt 4) {
   $myList[$i];
   $i++
}

write-host("Assign values")
$myList[1] = 10
$myList

這將產生以下結果:

輸出

Print all the array elements
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
Get the length of array
10
Get Second element of array
4.5
Get partial array
print subList
4.5
3.3
13.2
using for loop
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
using forEach Loop
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
using while Loop
5.6
4.5
3.3
13.2
Assign values
5.6
10
3.3
13.2
4
34.33
34
45.45
99.993
11123

陣列方法示例

以下是一個完整的示例,展示了使用其方法對陣列進行操作。

$myList = @(0..4)

write-host("Print array")
$myList

$myList = @(0..4)

write-host("Assign values")
$myList[1]  = 10
$myList

這將產生以下結果:

輸出

Clear array
Print array
0
1
2
3
4
Assign values
0
10
2
3
4

Powershell - 雜湊表

雜湊表在雜湊表中儲存鍵/值對。使用雜湊表時,指定用作鍵的物件以及要連結到該鍵的值。通常我們使用字串或數字作為鍵。

本教程介紹如何宣告雜湊表變數、建立雜湊表以及使用其方法處理雜湊表。

宣告雜湊表變數

要在程式中使用雜湊表,必須宣告一個變數來引用雜湊表。以下是宣告雜湊表變數的語法:

語法

$hash = @{ ID = 1; Shape = "Square"; Color = "Blue"}
or
$hash = @{} 

注意 - 可以使用類似的語法建立有序字典。有序字典維護條目新增的順序,而雜湊表則不維護。

示例

以下程式碼片段是此語法的示例:

$hash = [ordered]@{ ID = 1; Shape = "Square"; Color = "Blue"}

列印雜湊表。

$hash

輸出

Name                           Value    
----                           -----                                                    
ID                             1                                                        
Color                          Blue                                                     
Shape                          Square 

雜湊表值透過訪問。

> $hash["ID"]
 1

處理雜湊表

可以使用點表示法訪問雜湊表的鍵或值。

> $hash.keys
ID
Color
Shape

> $hash.values
1
Blue
Square

示例

以下是一個完整的示例,展示瞭如何建立、初始化和處理雜湊表:

$hash = @{ ID = 1; Shape = "Square"; Color = "Blue"}

write-host("Print all hashtable keys")
$hash.keys

write-host("Print all hashtable values")
$hash.values

write-host("Get ID")
$hash["ID"]

write-host("Get Shape")
$hash.Number

write-host("print Size")
$hash.Count

write-host("Add key-value")
$hash["Updated"] = "Now"

write-host("Add key-value")
$hash.Add("Created","Now")

write-host("print Size")
$hash.Count

write-host("Remove key-value")
$hash.Remove("Updated")

write-host("print Size")
$hash.Count

write-host("sort by key")
$hash.GetEnumerator() | Sort-Object -Property key

這將產生以下結果:

輸出

Print all hashtable keys
ID
Color
Shape
Print all hashtable values
1
Blue
Square
Get ID
1
Get Shape
print Size
3
Add key-value
Add key-value
print Size
5
Remove key-value
print Size
4
sort by key

Name                           Value                                                                                                   
----                           -----                                                                                                   
Color                          Blue                                                                                                    
Created                        Now                                                                                                     
ID                             1                                                                                                       
Shape                          
Square    

Powershell - 正則表示式

正則表示式是一系列特殊的字元,它使用專門的語法(包含在模式中)來幫助你匹配或查詢其他字串或字串集。它們可用於搜尋、編輯或操作文字和資料。

下表列出了 PowerShell 中所有可用的正則表示式元字元語法:

子表示式 匹配
^ 匹配行首。
$ 匹配行尾。
. 匹配除換行符之外的任何單個字元。使用m選項允許它也匹配換行符。
[...] 匹配括號中的任何單個字元。
[^...] 匹配括號中不存在的任何單個字元。
\A 整個字串的開頭。
\z 整個字串的結尾。
\Z 整個字串的結尾,除了允許的最終換行符。
re* 匹配前面表示式的 0 次或多次出現。
re+ 匹配前面內容的 1 次或多次出現。
re? 匹配前面表示式的 0 次或 1 次出現。
re{ n} 精確匹配前面表示式出現的 n 次。
re{ n,} 匹配前面表示式出現的 n 次或多次。
re{ n, m} 匹配前面表示式至少出現 n 次,最多出現 m 次。
a| b 匹配 a 或 b。
(re) 對正則表示式進行分組並記住匹配的文字。
(?: re) 對正則表示式進行分組,但不記住匹配的文字。
(?> re) 匹配獨立模式,不回溯。
\w 匹配單詞字元。
\W 匹配非單詞字元。
\s 匹配空白字元。等價於 [\t\n\r\f]。
\S 匹配非空白字元。
\d 匹配數字。等價於 [0-9]。
\D 匹配非數字。
\A 匹配字串的開頭。
\Z 匹配字串的結尾。如果存在換行符,則匹配換行符之前的字元。
\z 匹配字串的結尾。
\G 匹配上次匹配結束的位置。
\n 反向引用捕獲組編號“n”。
\b 在括號外匹配單詞邊界。在括號內匹配退格鍵 (0x08)。
\B 匹配非單詞邊界。
\n, \t, etc. 匹配換行符、回車符、製表符等。
\Q 轉義(引用)直到 \E 的所有字元。
\E 結束以 \Q 開始的引用。

以下是一個完整的示例,展示瞭如何在 PowerShell 中使用正則表示式:

序號 匹配及描述
1 匹配字元

支援的正則表示式字元示例。

2 匹配字元類

支援的字元類示例。

3 匹配量詞

支援的量詞示例。

Powershell - 反引號

反引號 (`) 運算子也稱為換行運算子。它允許將命令寫成多行。它也可以用於句子中的換行符 (`n) 或製表符 (`t)。請參閱以下示例:

示例 1

Get-Service * | Sort-Object ServiceType `
| Format-Table Name, ServiceType, Status -AutoSize

它將變成

Get-Service * | Sort-Object ServiceType | Format-Table Name, ServiceType, Status -AutoSize

驗證輸出為

Name                                                   ServiceType  Status
----                                                   -----------  ------
MSSQLServerADHelper100                             Win32OwnProcess Stopped
ntrtscan                                           Win32OwnProcess Running
...

示例 2

使用換行符和製表符。

> Write-host "Title Subtitle"
Title Subtitle

> Write-host "Title `nSubtitle"
Title 
Subtitle

> Write-host "Title `tSubtitle"
Title   Subtitle

Powershell - 括號

Powershell 支援三種類型的括號。

  • 圓括號。 - ()

  • 花括號。 - {}

  • 方括號。 - []

圓括號

這種型別的括號用於

  • 傳遞引數

  • 包含多組指令

  • 解決歧義

  • 建立陣列

示例

> $array = @("item1", "item2", "item3")
 
> foreach ($element in $array) { $element }
item1
item2
item3

花括號

這種型別的括號用於

  • 包含語句

  • 塊命令

示例

$x = 10

if($x -le 20){
   write-host("This is if statement")
}

這將產生以下結果:

輸出

This is if statement.

方括號

這種型別的括號用於

  • 訪問陣列

  • 訪問雜湊表

  • 使用正則表示式進行過濾

示例

> $array = @("item1", "item2", "item3")
 
> for($i = 0; $i -lt $array.length; $i++){ $array[$i] }
item1
item2
item3
 
>Get-Process [r-s]*
 Handles    NPM(K)     PM(K)    WS(K)   VM(M)   CPU(s)     Id    ProcessName
-------    ------     -----     -----   -----   ------     --    -----------  
    320        72     27300     33764    227     3.95    4028    SCNotification 
   2298        77     57792     48712    308             2884    SearchIndexer
   ...

Powershell - 別名

PowerShell 別名是 cmdlet 或任何命令元素的另一個名稱。

建立別名

使用New-Alias cmdlet 建立別名。在下面的示例中,我們為 Get-Help cmdlet 建立了一個名為 help 的別名。

 New-Alias -Name help -Value Get-Help  

現在呼叫別名。

 help Get-WmiObject -Detailed  

您將看到以下輸出。

NAME
   Get-WmiObject
    
SYNOPSIS
   Gets instances of Windows Management Instrumentation (WMI) classes or information about the available classes.    
    
SYNTAX
   Get-WmiObject [
...

獲取別名

使用get-alias cmdlet 獲取 PowerShell 當前會話中存在的全部別名。

 Get-Alias

您將看到以下輸出。

CommandType     Name                     Definition
-----------     ----                     ----------  
Alias           %                        ForEach-Object
Alias           ?                        Where-Object
Alias           ac                       Add-Content
Alias           asnp                     Add-PSSnapIn 
...
列印
廣告