等待过程生成ErrorRecord.TargetObject与预期不同

时间:2018-09-19 09:12:17

标签: powershell

TargetObject cmdlet捕获TimeoutException时,我得到的Wait-Process与预期的不同。

运行以下代码时:

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 :(得分:0)

不仅仅是传递过程对象的 name -整个传递对象

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(可能甚至< em>多个与-Name),并且新实例缺少原始的.StartInfo.Arguments值。