如何将 -id 参数从管道传递给 get-process?

问题描述 投票:0回答:1

我有一个

[pscustomobject]
和一个属性
id
。根据 PowerShell 文档,参数“-id”可以使用
ByPropertyName
通过管道传递。我发现使用
ForEach-Object
的方法有效(虽然我不明白为什么),而没有
ForEach-Object
的方法则不行。

$obj = [pscustomobject]@{id=4444}
# doesn't work
$obj | get-process -id $_.id
# it works
$obj | foreach{get-process -id $_.id}

显然“foreach”可以解决问题,但为什么呢?

powershell parameters parameter-passing
1个回答
2
投票

ValueFromPipelineByPropertyName
参数指示该参数接受来自管道对象的属性的输入。对象属性必须与参数具有相同的名称或别名。

绑定已经通过管道发生,您不需要手动传递参数,而且,

$_
(PSItem)仅在脚本块的上下文中自动填充,并且您的第二条语句没有脚本块。

$obj = [pscustomobject]@{ id = 4444 }
# works, the value of `id` is taken from pipeline
$obj | Get-Process

至于为什么

ForEach-Object
示例有效,仅仅是因为您将
id
属性的值作为参数传递给
-Id
参数,它几乎与:

Get-Process -Id $obj.Id
© www.soinside.com 2019 - 2024. All rights reserved.