Как я могу получить описания исключений powershell в строку? - PullRequest
10 голосов
/ 04 августа 2010

Я хочу иметь доступ к тому же сообщению, которое печатает Powershell при отправке записи об ошибке в выходной поток

Пример:

Это сообщение об исключении в C: \ Документы и Настройки \ BillBillington \ Desktop \ psTest \ exThrower.ps1: 1 голец: 6 + throw <<<< (New-Object ArgumentException ("Это исключение ")); + CategoryInfo: OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId: это исключение </p>

Когда я получаю последнюю ErrorRecord, выполнив $ Error [0], я не могу понять, как получить эту информацию простым способом

Я нашел эту функцию 'Resolve-Error' из расширений сообщества здесь , которая делает примерно то, что я хочу, но печатает огромный полуформатированный список вещей, которые мне не нужны, тогда мне нужно полоса

Есть ли способ доступа к сообщению, которое использует Powershell, или сбой, если это более простой способ получения хэша значений, которые меня интересуют, чтобы я мог поместить их в строку в формате по своему выбору?

Ответы [ 4 ]

17 голосов
/ 04 августа 2010

Как насчет:

$x = ($error[0] | out-string)

Это то, что вы хотели?

15 голосов
/ 04 августа 2010

Если вам нужно более короткое сообщение (иногда более удобное для пользователя?), Чем @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
4 голосов
/ 18 июня 2013

Я пошел немного дальше, потому что мне не нравились мультилинии из $ 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
0 голосов
/ 17 марта 2017
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
}

Вы также можете сделать это, и вы получите всю информацию об ошибке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...