我在Powershell中遇到Get-Process命令的问题,当我在Job中使用它时。
我想通过PID获得一个过程,所以我在做以下事情:
$MyProcess = Get-Process | Where-Object { $_.Id -eq $parentProcessID }
以上,当它从Powershell脚本调用为命令时,会返回预期的进程。
如果我在Start-Job {}块中使用完全相同的命令,那么即使对于正在运行的进程,它也会为null。例如:
Start-Job { $parentProcessID = $args $MyProcess = Get-Process | Where-Object { $_.Id -eq $parentProcessID } if($MyProcess -eq $null) { echo "Nothing returned" } } -ArgumentList "$parentProcessID"
这里有什么我想念的吗?有没有人遇到类似的情况?
任何见解都表示赞赏。
感谢。
答案 0 :(得分:1)
$args
是一个数组,如果您仍想使用make,请确保选择其第一个元素:
$parentProcessID = $args[0]
此外,Get-Process
有一个Id参数,不需要使用Where-Object
cmdlet:
Get-Process -Id $parentProcessID
Id参数的另一个优点是它需要一个Id的数组,所以如果你按原样传递$args
的值,它就可以工作。
您还可以使用$args
Start-Job {
param([int[]]$procid)
$MyProcess = Get-Process -Id $procid
(...)