探索PowerShell

PowerShell 是一個命令行殼層和一個腳本語言。 PowerShell 在 Windows 上啟動,以協助自動化系統管理工作。 現在,它會跨平台執行,並可用於各種工作。

讓 PowerShell 是唯一的,就是它接受並傳回 .NET 物件,而不是文字。 這項功能可讓您更輕鬆地在管線連接不同的命令。

PowerShell 可以用於哪些專案?

自 PowerShell 僅限 Windows 的天數以來,PowerShell 的使用已成長。 它仍然用於 Windows 工作自動化,但今天,您可以將它用於如下的工作:

  • 雲端管理。 PowerShell 可用來管理雲端資源。 例如,您可以擷取雲端資源的相關信息,以及更新或部署新的資源。
  • CI/CD。 它也可以用來作為持續整合/持續部署管線的一部分。
  • 將 Active Directory 和 Exchange 的工作自動化。 您可以使用它,將 Windows 上幾乎所有的工作自動化,例如在 Active Directory 中建立使用者,以及在 Exchange 的信箱中建立使用者。

使用領域更多,但上述清單會提供您 PowerShell 很長一段路要走的提示。

神秘 使用 PowerShell 嗎?

PowerShell 是一個功能強大的工具,可協助人員處理許多角色。 傳統上,PowerShell 已由 System 管理員 istrator 角色使用,但現在正由呼叫自己 DevOps、Cloud Ops,甚至是開發人員的人員使用。

PowerShell Cmdlet

PowerShell 隨附數百個預安裝命令。 PowerShell 命令稱為 Cmdlet(發音為 command-lets)。

每個 Cmdlet 的名稱都包含 Verb-Noun 配對。 例如: Get-Process 。 此命名慣例可讓您更輕鬆地瞭解 Cmdlet 的功能。 它也可讓您更輕鬆地尋找您要尋找的命令。 尋找要使用的 Cmdlet 時,您可以篩選動詞或名詞。

使用 Cmdlet 探索 PowerShell

當您第一次拿起PowerShell時,可能會覺得令人生畏,因為似乎有這麼多東西要學習。 PowerShell 的設計目的是要協助您一次學習一下,因為您需要它。

PowerShell 包含可協助您探索 PowerShell 的 Cmdlet。 使用這三個 Cmdlet,您可以探索可用的命令、其用途,以及其運作類型。

  • Get-Verb. 執行此命令會傳回大部分命令所遵循的動詞清單。 回應包含這些動詞執行動作的描述。 由於大部分的命令都遵循此命名慣例,因此它會設定命令的功能預期。 這可協助您選取適當的命令,以及應建立命令的名稱。
  • Get-Command. 此命令會擷取電腦上安裝的所有命令清單。
  • Get-Member. 它會以對象為基礎的輸出運作,而且能夠探索命令可用的物件、屬性和方法。
  • Get-Help. 以命令名稱做為自變數叫用此命令時,會顯示描述命令各部分的說明頁面。

使用這些命令,您幾乎可以探索PowerShell所需的任何專案。

動詞命令

Verb 是 PowerShell 中的重要概念。 這是大部分 Cmdlet 所遵循的命名標準。 這也是您在撰寫自己的命令時所要遵循的命名標準。 其概念是 Verb 指出您嘗試執行的動作,例如讀取或變更數據。 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 輸出。 篩選可讓您尋找具有特定屬性的命令。 Name 參數可讓您依名稱尋找特定命令。

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。 若要篩選動詞部分,請使用 Verb 參數。

    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 可讓您根據屬性值來篩選傳回的物件。 此命令會採用可測試屬性值的表達式。 下列範例會傳回以 開頭p的所有進程ProcessName

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

    Cmdlet 會 Get-Process 傳回進程物件的集合。 若要篩選回應, 請將輸出管線 傳送至 Where-Object。 管線表示兩個或多個命令是透過管道 | 字元連接。 一個命令的輸出會作為下一個命令的輸入傳送。 的篩選表達式 Where-Object-like 使用 運算符來比對以字母 p開頭的進程。

使用 Get-Member 探索物件

一旦您找到想要的 Cmdlet 之後,您想要深入瞭解它所產生的輸出。 Cmdlet Get-Member 會顯示 物件的類型、屬性和方法。 使用管線會檢查輸出傳送至 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 只會顯示一些屬性。 上一個範例顯示 NameMemberTypeDefinition 成員。 您可以使用 Select-Object 指定您要檢視的屬性。 例如,您想要只 Name 顯示和 Definition 屬性:

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

依參數類型搜尋

Get-Member 顯示我們傳 Get-ProcessProcess 類型物件。 的 ParameterType 參數 Get-Command 可用來尋找其他接受 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…

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

其他資源