作业中的Powershell Get-Process cmdlet

时间:2013-12-03 10:03:42

标签: powershell scripting cmdlets

我在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"

这里有什么我想念的吗?有没有人遇到类似的情况?

任何见解都表示赞赏。

感谢。

1 个答案:

答案 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

(...)