从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
中的那些属性吗?
还是我的假设不对?
答案 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
值。