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 管道进行传递。
广告