当 PowerShell 抛出错误时,会向 $error
写入一条错误记录,它是一个存储最后发生的错误的数组。
您可以尝试从 ErrorRecord
对象手工解出相关的错误信息,或者使用以下函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| function ConvertFrom-ErrorRecord { [CmdletBinding(DefaultParameterSetName="ErrorRecord")] param ( [Management.Automation.ErrorRecord] [Parameter(Mandatory,ValueFromPipeline,ParameterSetName="ErrorRecord", Position=0)] $Record,
[Object] [Parameter(Mandatory,ValueFromPipeline,ParameterSetName="Unknown", Position=0)] $Alien )
process { if ($PSCmdlet.ParameterSetName -eq 'ErrorRecord') { [PSCustomObject]@{ Exception = $Record.Exception.Message Reason = $Record.CategoryInfo.Reason Target = $Record.CategoryInfo.TargetName Script = $Record.InvocationInfo.ScriptName Line = $Record.InvocationInfo.ScriptLineNumber Column = $Record.InvocationInfo.OffsetInLine } } else { Write-Warning "$Alien" } } }
|
这个函数有两个参数集,一个合法的 ErrorRecord
对象自动绑定到 $Record
参数。如果遇到一个不同类型的,无法被这个函数处理的对象,那么它将绑定到 $Alien
。
要查看详细的错误信息,请试试这行代码:
1
| PS> $error | ConvertFrom-ErrorRecord | Out-GridView
|