PowerShell 管道如何工作 - 第 2 部分?
在第 1 部分中,我們已經瞭解了使用 **ValueFromPipeline** 屬性的 PowerShell 管道功能。還有一個名為 **ValueFromPipelineByPropertyName** 的 cmdlet 屬性,瞭解它對於 PowerShell 管道功能也很有用。
與第 1 部分的命令類似,我們可以使用相同的 **Get-Command** 獲取此屬性名稱,但我們將用於該屬性的篩選器引數為 **ValueFromPipelineByPropertyName**。
以下示例適用於 **Stop-Service** cmdlet。
(Get-Command Stop-Service).ParameterSets.parameters | where{$_.ValueFromPipelineByPropertyName -eq 'True'} | Select Name,ParameterType
輸出
Name ParameterType ---- ------------- Name System.String[]
這意味著您可以使用 **Name** 屬性來停止服務。因此,在這裡我們將使用 **Get-Service** 及其 Name 屬性來檢索服務,然後我們可以將輸出傳遞給 **Stop-Service** 命令以停止服務。
Get-Service "Spooler","W32Time" | Stop-Service -PassThru
輸出
Status Name DisplayName ------ ---- ----------- Stopped Spooler Print Spooler Stopped W32Time Windows Time
- **PassThru** 開關用於在控制檯中獲取輸出。
讓我們再舉一個例子以便更好地理解。第二個例子是 **Stop-Process** 命令。
(Get-Command Stop-Process).ParameterSets.parameters | where{$_.ValueFromPipelineByPropertyName -eq 'True'} | Select Name,ParameterType
輸出
Name ParameterType ---- ------------- Id System.Int32[] Name System.String[]
因此,在 **Stop-Process** 中,我們可以按屬性名稱傳遞兩個值。**ID** 和 **Name**。我們將使用 **Get-Process** 命令檢索具有上述兩個屬性的輸出,並將其透過管道傳遞給 Stop-Process。
Get-Process -Name pythonw, notepad | Stop-Process -Verbose Get-Process -Id 21320,25740 | Stop-Process -Verbose
這就是 PowerShell 管道如何使用這兩個屬性工作的。我們可以編寫程式碼來組合這兩個屬性,並更好地瞭解透過管道傳遞什麼。
(Get-Command Stop-Process).ParameterSets.parameters ` | where{($_.ValueFromPipelineByPropertyName -eq 'True') -or ($_.ValueFromPipeline -eq "True")} ` | Select Name,ParameterType,ValueFromPipeline, ValueFromPipelineByPropertyName
輸出
只需檢查值為 **True** 的屬性,然後就可以根據 PowerShell 管道進行傳遞。
廣告