Получение трассировки стека удаленных сессий - PullRequest
0 голосов
/ 29 ноября 2018

Как получить трассировку стека исключения, выданного на удаленном компьютере?

Этот вопрос почти идентичен, однако спрашивающий был удовлетворен получением SerializedRemoteInvocationInfo.PositionMessage.В моей ситуации несколько сценариев, вызывающих друг друга, поэтому мне нужен полный стек вызовов, чтобы понять мою проблему.

В следующем фрагменте показана трассировка пустого стека:

$session = New-PSSession -ComputerName AComputer -UseSSL
$script = {C:\AScriptThatFails.ps1}
try{
    Invoke-Command -Session $session -ScriptBlock $script
}
catch{
    Write-Output = $_.Exception.SerializedRemoteException.StackTrace #Empty!?
}

1 Ответ

0 голосов
/ 30 ноября 2018

Похоже, что свойство .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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...