Wait-Process генерирует ErrorRecord.TargetObject, отличный от ожидаемого - PullRequest
0 голосов
/ 19 сентября 2018

При получении командлета TimeoutException из Wait-Process я получаю значение, отличное от ожидаемого TargetObject.

При выполнении следующего кода:

try {
    $a = Start-Process -FilePath notepad -ArgumentList ".\test.txt" -Passthru
    Wait-Process -Name $a.name -Timeout 1 -ErrorAction Stop
} catch {
    #
    # Would expect $error[0].TargetObject to be equal to $a
    #
    Write-Output $($error[0].TargetObject.StartInfo.Arguments)
}

Я ожидал бы получить ".\test.txt" в качестве вывода, но вместо этого я получил бы пустую строку.
Фактически, $error[0].TargetObject является объектомтипа System.Diagnostics.Process, но отсутствуют некоторые атрибуты из исходного $a, как, например, атрибут StartInfo.Arguments.

Кто-нибудь знает, почему $error[0].TargetObject пропускает эти атрибуты из оригинала $a?
Или мое предположение неверно?

1 Ответ

0 голосов
/ 20 сентября 2018

Не просто передайте имя вашего объекта процесса - пропустите объект в целом :

try {
    $a = Start-Process -FilePath notepad -ArgumentList ".\test.txt" -Passthru
    # Note the use of -InputObject $a
    Wait-Process -InputObject $a -Timeout 1 -ErrorAction Stop
} catch {
    $error[0].TargetObject.StartInfo.Arguments
}

Если вы передаете только -Name или -ID аргумент Wait-Process, new System.Diagnostics.Process создается за кулисами (потенциально даже несколько с -Name), и этому новому экземпляру не хватаеторигинальное .StartInfo.Arguments значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...