Командлет Powershell Get-Process внутри задания

У меня проблема с командой Get-Process в Powershell, когда я использую ее внутри задания.

Я хотел бы получить процесс по PID, поэтому я делаю следующее:

$MyProcess = Get-Process | Where-Object { $_.Id -eq $parentProcessID }

Вышеприведенное, когда оно вызывается как команда из сценария Powershell, возвращает мне ожидаемый процесс.

Если я использую точно такую ​​же команду внутри блока Start-Job{}, она дает мне ноль, даже для запущенного процесса. Например:

Start-Job {
$parentProcessID = $args
$MyProcess = Get-Process | Where-Object { $_.Id -eq $parentProcessID }
if($MyProcess -eq $null)
{
    echo "Nothing returned"
}
} -ArgumentList "$parentProcessID"

Есть ли что-то, что мне здесь не хватает? Кто-нибудь сталкивался с подобной ситуацией раньше?

Любые идеи приветствуются.

Спасибо.


person nikkatsa    schedule 03.12.2013    source источник


Ответы (1)


$args - это массив, если вы все еще хотите его использовать, обязательно выберите его первый элемент:

$parentProcessID = $args[0]

Кроме того, Get-Process имеет параметр Id, нет необходимости использовать командлет Where-Object:

Get-Process -Id $parentProcessID 

Еще одним преимуществом параметра Id является то, что он принимает массив идентификаторов, поэтому он будет работать, если вы передадите ему значение $args как есть.

Вы также можете использовать параметры имен для блока сценария вместо использования $args:

Start-Job {
    param([int[]]$procid)

    $MyProcess = Get-Process -Id $procid

(...)
person Shay Levy    schedule 03.12.2013
comment
Спасибо Шей Леви. Ты абсолютно прав. Я не осознавал, что передал массив в переменной, так как печатал его и мог видеть только одно значение (потому что я передавал только одно значение. Глупый я). И я изменю Get-Process, чтобы использовать -Id, так как это намного чище. Большое спасибо. - person nikkatsa; 03.12.2013