【问题标题】:How can I get powershell exception descriptions into a string?如何将 powershell 异常描述转换为字符串?
【发布时间】:2011-03-25 04:41:22
【问题描述】:

当您将错误记录发送到输出流时,我希望能够访问 Powershell 打印的相同消息

例子:

这是异常消息 C:\文档和 Settings\BillBillington\Desktop\psTest\exThrower.ps1:1 字符:6 + throw

当我通过 $Error[0] 获取最后一个 ErrorRecord 时,我似乎无法弄清楚如何以简单的方式获取此信息

我从社区扩展 here 中找到了这个“解决错误”功能,它大致完成了我想要的操作,但它打印了一个巨大的半格式列表,其中包含我不需要的内容,然后我必须删除

有没有办法访问 Powershell 使用的消息,或者是否有一种更简单的方法来获取我关心的值的哈希值,以便我可以将它们以我选择的格式放入字符串中?

【问题讨论】:

    标签: exception powershell


    【解决方案1】:

    类似于@tomasr,但更短:

    $($error[0])
    

    对于脚本中的所有错误:

    $($error)
    

    【讨论】:

      【解决方案2】:
      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
      }
      

      您也可以这样做,您将获得有关错误的所有信息

      【讨论】:

        【解决方案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】:

          如果您想要比@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
          

          【讨论】:

            【解决方案5】:

            怎么样:

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

            这是你想要的吗?

            【讨论】:

              猜你喜欢
              • 2012-08-20
              • 1970-01-01
              • 2023-03-22
              • 2011-12-23
              • 1970-01-01
              • 2016-12-26
              • 2011-12-16
              • 2016-10-07
              • 1970-01-01
              相关资源
              最近更新 更多