具体用例是:
Get-NetTCPConnection -State Listen -LocalPort 6005 |
Get-Process -PID ???
???
是第一个cmdlet输出的OwningProcess
属性。
答案 0 :(得分:3)
-Id
参数接受按属性名称输入的管道,因此您必须添加另一个具有包含PID的正确名称的属性。尽管可能,我通常只使用直接路线:
Get-NetTCPConnection | ForEach-Object { Get-Process -Id $_.OwningProcess }
答案 1 :(得分:3)
我可以在这里看到几个选项。首先,也是最简单的,您可以将其传递给ForEach-Object
循环,并在其中运行Get-Process
:
Get-NetTCPConnection -State Listen -LocalPort 6005 |
ForEach-Object {
Get-Process -PID $_.OwningProcess
}
或者,如果您运行Get-Help Get-Process -PArameter Id
,您可以看到Id参数通过属性名称接受管道中的值,因此您可以创建该属性,并直接管道到Get-Process
:
Get-NetTCPConnection -State Listen -LocalPort 6005 |
Select @{l='Id';e={$_.OwningProcess}} |
Get-Process
答案 2 :(得分:2)
有很多方法可以做到这一点。当变量无法与属性匹配时,您可以使用Joey's answer中的ForEach-Object
循环,或者如果您想做一些疯狂的事情,您可以定制管道对象以满足需要。
Get-NetTCPConnection -State Listen -LocalPort 6005 |
Select-Object @{Name="PID";E={$_.OwningProcess}} |
Get-Process
由于Get-Process
希望匹配管道变量属性PID,我们只需使用计算属性来为其提供所需的内容。
在这种情况下使用ForEach-Object
要简单得多。只是想让你知道还有另一种方式。