共用方式為


探索 PowerShell

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 個可用命令的 NameSource 屬性值。

    Get-Command | Select-Object -First 5 -Property Name, Source
    
    Name                      Source
    ----                      ------
    Add-AppPackage            Appx
    Add-AppPackageVolume      Appx
    Add-AppProvisionedPackage Dism
    Add-AssertionOperator     Pester
    Add-ProvisionedAppPackage Dism
    

    如需詳細資訊,請參閱 Select-Object

  • Where-Object。 此 Cmdlet 可讓您根據屬性值篩選傳回的物件。 此命令會採用可測試屬性值的運算式。 下列範例會傳回 以 ProcessNamep頭的所有處理程序。

    Get-Process | Where-Object {$_.ProcessName -like "p*"}
    

    Get-Process Cmdlet 會傳回進程物件的集合。 若要篩選 回應,請 將輸出傳送至 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 只會顯示一些屬性。 上一個範例顯示 NameMemberType和 成員 Definition 。 您可以使用來 Select-Object 指定您要查看的內容。 例如,您只想顯示 和 Definition 屬性Name

Get-Process | Get-Member | Select-Object Name, Definition

依參數類型搜尋

Get-Member向我們展示了傳回 Process 類型物件。Get-ProcessGet-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…

了解命令的輸出類型有助於縮小相關命令的搜尋範圍。

其他資源