你可以用
try{ } catch { }
块捕获异常,然后访问错误属性。下面是我编写的一个自定义错误写入函数:
Function Write-CustomError()
{
<
.Synopsis
Displays error information to the console
.DESCRIPTION
Writes property information from the current [ErrorRecord] object
in the pipeline to the console
.EXAMPLE
Write-CustomError -UserMessage "Exception occurred at memory location $x" -ErrorObject $_
.EXAMPLE
Write-CustomError -UserMessage "Exception occurred at memory location $x" -ErrorObject $_ -FullDetail
.INPUTS
$Error[0]
.OUTPUTS
[String]
.COMPONENT
adminkitMiscTools
.FUNCTIONALITY
General Utility
[cmdletBinding()]
param(
[Parameter(Mandatory=$False)]
[String]$UserMessage,
[Parameter(Mandatory=$True)]
[Object]$ErrorObject,
[Parameter(Mandatory=$false)]
[Switch]$FullDetail
)
BEGIN
{}
PROCESS
{
if($UserMessage) {
Write-Host "`nERROR: $UserMessage" -ForegroundColor Red
}
if($FullDetail)
{
$ErrorData = $ErrorData + [PSCustomObject]@{AccountUsed=$ENV:USERNAME;
ExceptionMessage=$ErrorObject.ToString();
CategoryInfo=$ErrorObject.CategoryInfo;
ExceptionType=$ErrorObject.Exception.GetType();
ErrorDetails=$ErrorObject.ErrorDetails;
FullyQualifiedErrorId=$ErrorObject.FullyQualifiedErrorId;
InvocationInfo=$ErrorObject.InvocationInfo;
PipelineIterationInfo=$ErrorObject.PipelineIterationInfo;
ScriptStackTrace=$ErrorObject.ScriptStackTrace
TargetObject=$ErrorObject.TargetObject;
}
}
return $ErrorData
}
END
{}
}
在你的剧本里:
try {
}
catch {
Write-CustomError -UserMessage 'There was an error' -ErrorObject $_ -FullDetail
}
这将为您提供更多有关错误的详细信息,而不应剪辑消息