PowerShell 是一個命令列 shell 和一種腳本語言合二為一。 PowerShell 最初是在 Windows 上開始的,以幫助自動化管理任務。 現在,它跨平台運行,可用於各種任務。
PowerShell 的獨特之處在於它接受並傳回 .NET 物件,而不是文字。 此功能可讓您更輕鬆地連接 管線中的不同命令。
PowerShell 的用途是什麼?
最初,PowerShell 僅適用於 Windows。 現在,它是跨平台的,可用於各種任務,例如:
- 雲端管理。 PowerShell 可用來管理雲端資源。 例如,您可以擷取資訊、更新或部署新資源。
- CI/CD。 它也可以用作持續整合/持續部署管道的一部分。
- 自動化 Active Directory 和 Exchange 的任務。 您可以使用它來自動執行 Windows 上的幾乎任何任務,例如在 Active Directory 中創建用戶和在 Exchange 中創建郵箱。
誰使用 PowerShell?
PowerShell 是一個強大的工具,可以幫助擔任多種角色的人員。 傳統上,PowerShell 由系統管理員使用。 現在,它被自稱為 DevOps、Cloud Ops 甚至開發人員的人使用。
PowerShell Cmdlet
PowerShell 附帶數百個預先安裝的命令。 PowerShell 命令稱為 cmdlet(發音為 command-lets)。
每個 Cmdlet 的名稱都由動 詞-名詞 組組成。 例如: Get-Process 。 此命名慣例可讓您更輕鬆地瞭解 Cmdlet 的用途。 它還可以讓您更輕鬆地找到您要查找的命令。 尋找要使用的 Cmdlet 時,您可以篩選動詞或名詞。
使用 Cmdlet 探索 PowerShell
當您第一次拿起 PowerShell 時,可能會感到害怕,因為似乎有很多東西需要學習。 PowerShell 的設計目的是要協助您視需要一次學習一點。
PowerShell 包含可協助您探索 PowerShell 的 Cmdlet。 使用這三個 cmdlet,您可以探索可用的命令、它們的作用以及它們的操作類型。
-
Get-Verb。 執行此命令會傳回大多數命令遵循的動詞清單。 回應包括對這些動詞作用的描述。 由於大部分命令都遵循此命名慣例,因此它會設定命令執行的預期。 此指令可協助您在建立自己的指令時選取適當的動詞,以及指令的名稱。 -
Get-Command。 此命令會擷取電腦上安裝的所有命令的清單。 -
Get-Member。 它對基於對象的輸出進行操作,並且能夠發現哪些對象、屬性和方法可用於命令。 -
Get-Help。 使用命令名稱作為引數呼叫此命令會顯示說明頁面,說明命令的各個部分。
使用這些命令,您幾乎可以發現有關 PowerShell 的所有資訊。
動詞命令
動詞 是 PowerShell 中的一個重要概念。 這是大部分 Cmdlet 遵循的命名標準。 這也是您在編寫自己的命令時應該遵循的命名標準。 這個想法是動 詞 說出你想做什麼,比如讀取或更改數據。 PowerShell 有一個標準化的動詞清單。 若要取得所有可能動詞的完整清單,請使用 Get-Verb Cmdlet:
Get-Verb
Cmdlet 會傳回一長串動詞清單。 描述提供了動詞要做什麼的上下文。 以下是輸出的前幾列:
Verb AliasPrefix Group Description
---- ----------- ----- -----------
Add a Common Adds a resource to a container, or attaches an item to another item
Clear cl Common Removes all the resources from a container but does not delete the container
Close cs Common Changes the state of a resource to make it inaccessible, unavailable, or unusab…
Copy cp Common Copies a resource to another name or to another container
Enter et Common Specifies an action that allows the user to move into a resource
Exit ex Common Sets the current environment or context to the most recently used context
...
使用 Get-Command 尋找命令
Cmdlet Get-Command 會傳回系統上安裝的所有可用命令的清單。 清單可能很大。 您可以使用參數或協助程式 Cmdlet 篩選回應,以限制傳回的資訊量。
篩選名稱
您可以使用不同的參數過濾輸出 Get-Command 。 篩選可讓您尋找具有特定屬性的命令。
名稱參數可讓您依名稱尋找特定命令。
Get-Command -Name Get-Process
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-Process 7.0.0.0 Microsoft.PowerShell.Management
如果您想要找到所有與進程配合使用的命令怎麼辦? 您可以使用萬用字元 * 來比對字串的其他形式。 例如:
Get-Command -Name *-Process
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Debug-Process 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Get-Process 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Start-Process 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Stop-Process 7.0.0.0 Microsoft.PowerShell.Management
Cmdlet Wait-Process 7.0.0.0 Microsoft.PowerShell.Management
過濾名詞和動詞
還有其他參數可以過濾動詞和名詞值。 命令名稱的動詞部分是最左邊的部分。 動詞應該是 Cmdlet 傳回的 Get-Verb 其中一個值。 命令的最右邊部分是名詞部分。 名詞可以是任何東西。
過濾動詞。 在指令
Get-Process中,動詞部分是Get。 若要篩選動詞部分,請使用 動詞 參數。Get-Command -Verb 'Get'此範例列出使用動詞
Get的所有指令。過濾名詞。 在命令
Get-Process中,名詞部分是Process。 若要篩選名詞,請使用 Noun 參數。 下列範例會傳回所有名詞以字母U開頭的 Cmdlet。Get-Command -Noun U*
此外,您還可以組合參數來縮小搜尋範圍,例如:
Get-Command -Verb Get -Noun U*
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-UICulture 7.0.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-Unique 7.0.0.0 Microsoft.PowerShell.Utility
Cmdlet Get-Uptime 7.0.0.0 Microsoft.PowerShell.Utility
使用協助程式 Cmdlet 來篩選結果
您也可以使用其他 Cmdlet 來篩選結果。
Select-Object。 這個多功能命令可協助您從一或多個物件中挑選特定屬性。 您也可以限制取回的物品數量。 下列範例會傳回目前工作階段中前 5 個可用命令的 Name 和 Source 屬性值。Get-Command | Select-Object -First 5 -Property Name, SourceName Source ---- ------ Add-AppPackage Appx Add-AppPackageVolume Appx Add-AppProvisionedPackage Dism Add-AssertionOperator Pester Add-ProvisionedAppPackage Dism如需詳細資訊,請參閱 Select-Object。
Where-Object。 此 Cmdlet 可讓您根據屬性值篩選傳回的物件。 此命令會採用可測試屬性值的運算式。 下列範例會傳回 以ProcessName開p頭的所有處理程序。Get-Process | Where-Object {$_.ProcessName -like "p*"}Get-ProcessCmdlet 會傳回進程物件的集合。 若要篩選 回應,請 將輸出傳送至Where-Object。 管道表示兩個或多個指令透過管道|字元連接。 一個命令的輸出將作為下一個命令的輸入傳送。 的Where-Object篩選運算式會使用-like運算子來比對以字母p開頭的處理程序。
使用 Get-Member 探索物件
找到所需的 Cmdlet 之後,您會想要進一步瞭解它所產生的輸出。
Get-Member Cmdlet 會顯示物件的類型、屬性和方法。 將您要檢查的輸出管道傳送至 Get-Member。
Get-Process | Get-Member
結果會顯示傳回的類型 TypeName ,以及物件的所有屬性和方法。 以下是此類結果的摘錄:
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Handles AliasProperty Handles = Handlecount
Name AliasProperty Name = ProcessName
...
使用 MemberType 參數,您可以限制傳回的資訊。
Get-Process | Get-Member -MemberType Method
根據預設,PowerShell 只會顯示一些屬性。 上一個範例顯示 Name、 MemberType和 成員 Definition 。 您可以使用來 Select-Object 指定您要查看的內容。 例如,您只想顯示 和 Definition 屬性Name:
Get-Process | Get-Member | Select-Object Name, Definition
依參數類型搜尋
Get-Member向我們展示了傳回 Process 類型物件。Get-Process 的 Get-CommandParameterType 參數可用來尋找其他將 Process 物件作為輸入的命令。
Get-Command -ParameterType Process
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Debug-Process 7.0.0.0 Microsoft.PowerShell.Managem…
Cmdlet Enter-PSHostProcess 7.1.0.0 Microsoft.PowerShell.Core
Cmdlet Get-Process 7.0.0.0 Microsoft.PowerShell.Managem…
Cmdlet Get-PSHostProcessInfo 7.1.0.0 Microsoft.PowerShell.Core
Cmdlet Stop-Process 7.0.0.0 Microsoft.PowerShell.Managem…
Cmdlet Wait-Process 7.0.0.0 Microsoft.PowerShell.Managem…
了解命令的輸出類型有助於縮小相關命令的搜尋範圍。