Похоже, что свойство .ScriptStackTrace
записи об ошибке содержит трассировку стека удаленного выполнения сценария:
try {
Invoke-Command -ErrorAction Stop -Session $session -ScriptBlock $script
}
catch {
$_ # output the error record
$_.ScriptStackTrace # output the script stack trace
}
Обратите внимание на использование -ErrorAction Stop
для преобразования удаленных ошибок в завершающие сценарий, так чтоОбработчик try
/ catch
запускается из-за любой ошибки, а не только из-за прекращения скрипта (то есть из-за неразрывных и операторов -конечных ошибок).
Если эта эскалация нежелательна, используйте следующую технику:
$hadScriptTerminatingError = $false
try {
# User -ErrorVariable to collect the errors that occur.
Invoke-Command -Session $session -ScriptBlock $script -ErrorVariable errs
} catch { $hadScriptTerminatingError = $true }
$succeeded = $? -and -not $hadScriptTerminatingError
# Analyze the collected errors, if any.
foreach ($err in $errs) {
$err # output the error record
$err.ScriptStackTrace # output the script stack trace
}