Как я могу получить описания исключений powershell в строку?
Я хочу получить доступ к тому же сообщению, которое печатает Powershell при отправке записи об ошибке в выходной поток
Пример:
Это сообщение об исключении At C:\Документы и Настройки \BillBillington\Desktop\psTest\exThrower.ps1:1 char: 6 + throw < < (New-Object ArgumentException ( "Это исключение" )); + CategoryInfo: OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId: Это исключение.
Я, когда получаю последний ErrorRecord, делая $Error [0], я не могу понять, как получить эту информацию простым способом.
Я нашел эту функцию "Resolve-Error" из расширений сообщества здесь, которая делает примерно то, что я хочу, но она печатает огромный полуформатированный список вещей, которые мне не нужны, что я должен тогда стричь
Есть ли способ получить доступ к сообщению, которое Powershell использует или терпит неудачу, что более простой способ получить хеш значений, которые меня волнуют, поэтому я могу поместить их в строку в выбранном мной формате?
Ответы
Ответ 1
Если вы хотите получить более короткое сообщение (иногда более удобное для пользователя), чем @tomasr, это будет делать:
$error[0].ToString() + $error[0].InvocationInfo.PositionMessage
Вы получите что-то вроде:
Cannot find path 'C:\TEMP\_100804_135716\missing' because it does not exist.
At C:\TEMP\_100804_135716\test.ps1:5 char:15
+ Get-ChildItem <<<< missing
Эта техническая информация будет исключена:
+ CategoryInfo : ObjectNotFound: (C:\TEMP\_100804_135716\missing:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Ответ 2
Как насчет:
$x = ($error[0] | out-string)
Это то, что вы хотели?
Ответ 3
Я взял это немного дальше, потому что мне не нравились многостроки из $error [0].InvocationInfo.PositionMessage.
Function FriendlyErrorString ($thisError) {
[string] $Return = $thisError.Exception
$Return += "`r`n"
$Return += "At line:" + $thisError.InvocationInfo.ScriptLineNumber
$Return += " char:" + $thisError.InvocationInfo.OffsetInLine
$Return += " For: " + $thisError.InvocationInfo.Line
Return $Return
}
[string] $ErrorString = FriendlyErrorString $Error[0]
$ErrorString
Вы можете посмотреть, что еще можно использовать для создания собственной строки с помощью:
$Error | Get-Member
$Error[0].InvocationInfo | Get-Member
Ответ 4
Foreach ($Errors in $Error){
#Log Eintrag wird zusammengesetzt und in errorlog.txt geschrieben
"[$Date] $($Errors.CategoryInfo.Category) $($Errors.CategoryInfo.Activity) $($Errors.CategoryInfo.Reason) $($Errors.CategoryInfo.TargetName) $($Errors.CategoryInfo.TargetType) $($Errors.Exception.Message)" |Add-Content $Path\errorlog.txt -Encoding UTF8
}
Вы также можете сделать это, и вы получите всю информацию об ошибке