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 管道進行傳遞。

更新於: 2020 年 10 月 16 日

115 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告