如果我有这样的脚本:
$searchfor = @("wininit","TeamViewer")
Get-Process $searchfor | % {
Get-nettcpconnection -OwningProcess $_.ID |
select @{Name='Process';Expression={(Get-Process -Id $_.OwningProcess).ProcessName }}
}
如何访问Get-Process $searchfor
在我的select-object
中返回的属性?
您可以在select
表达式中看到,即使我感觉已经将信息传递给get-process
foreach-object
。
我知道我可以使用foreach($x in $y)
而不是foreach-object
,但是在使用管道时,有什么方法可以获取外部对象的属性?
答案 0 :(得分:2)
使用-PipelineVariable
(-pv
)公共参数(PSv4 +)使每个Get-Process
输出对象在随后的管道阶段的脚本块内可用:
$searchfor = 'wininit', 'TeamViewer'
# -PipelineVariable proc makes $proc available in script blocks later.
Get-Process $searchfor -PipelineVariable proc | % {
Get-NetTCPConnection -OwningProcess $_.ID |
Select-Object @{Name='Process'; Expression={ $proc.ProcessName }}
}
注意:
必须在没有$
的情况下指定变量名称(-PipelineVariable proc
,而不是
) -PipelineVariable $proc
(有意义的),该变量在管道本地(当命令终止时超出范围)。
也就是说,您可以定义一个辅助。脚本块中的变量:
$searchfor = 'wininit', 'TeamViewer'
Get-Process $searchfor | % {
# Save the input process object in an aux. variable.
$proc = $_
Get-NetTCPConnection -OwningProcess $_.ID |
Select-Object @{Name='Process'; Expression={ $proc.ProcessName }}
}