有没有办法自定义终止错误的错误消息?
在下面的例子中我只想得到一个Try
部分并将所有错误收集在一个中Catch
通过组合两个脚本块来部分。我的问题是$error
产生于Import-csv
描述性不够,我想要文字Failed CSV-File import c:\test.csv
内$error
信息。
感谢您的建议。
脚本块1
Try {
$File = (Import-Csv -Path c:\test.csv)
}
Catch {
throw $error[0].Exception.Message | Send-Mail $ScriptAdmin "FAILED CSV-File import"
}
脚本块2
try {
if(!(Test-Path $LogFolder -PathType Container)) {throw "Can't find the log folder: '$LogFolder'"}
$Credentials = Import-Credentials $UserName $PasswordFile
}
catch {
throw $Error[0].Exception.Message | Send-Mail $ScriptAdmin "FAILURE"
}
解决方法
一个可能的解决方案是首先检查test-path
如果导入文件存在,然后创建一个throw
带有定制的消息。但我想知道是否可以在一行代码中处理它而不使用test-path
first.
最佳解决方案(感谢 mjolinor):
try {
$File = (Import-Csv -Path $ImportFile -Header "A", "B", "C", "D" | Where { $_.A -NotLike "#*" })
if(!(Test-Path $LogFolder -PathType Container)) {throw "Can't find the log folder: '$LogFolder'"}
$Credentials = Import-Credentials $UserName $PasswordFile
}
catch {
Switch -Wildcard ($Error[0].Exception)
{
"*$ImportFile*"
{ $FailType = "FAILED CSV-File import" }
"*$LogFolder*"
{ $FailType = "FAILED Log folder not found" }
"*Import-Credentials*"
{ $FailType = "FAILED Credential import" }
Default
{ $FailType = "FAILED Unrecognized error" }
}
Write-Warning $Error[0].Exception.Message
throw $Error[0].Exception.Message | Send-Mail $ScriptAdmin $FailType
}
- 确保您的
advanced-function
您创建的(如上面的 Import-Credentials )包含函数名称throw
部分。所以我们可以将其过滤掉catch
block.
也许是这样的?
Try {
$File = (Import-Csv -Path c:\test.csv)
if(!(Test-Path $LogFolder -PathType Container))
{ throw "Can't find the log folder: '$LogFolder'" }
$Credentials = Import-Credentials $UserName $PasswordFile
}
catch {
Switch -Wildcard ($Error[0].CategoryInfo)
{
'*[Import-CSV]*'
{ $FailType = 'Import CSV failed' }
'*[Test-Path]*'
{ $FailType = 'LogFolder not found' }
'*[Import-Credentials]*'
{ $FailType = 'Credential import failed' }
Default
{ $FailType = 'Unrecognized error' }
}
$Error[0].Exception.Message | Send-Mail $ScriptAdmin $FailType
}
编辑(由于某种原因我无法发表评论):
我应该指出它没有经过测试,并且更多地是作为一种模式而不是最终的解决方案,而且它似乎已经完成了它想要做的事情。
@BartekB - 我习惯使用 $Error[0] 而不是 $_ ,因为它看起来更明确和直观,并且不太可能被经验不足的人误解,他们可能会在以后继承代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)