我目前正在编写一个脚本,该脚本应该用于获取CIFS共享上目录树的平均访问/列表时间。为此,我使用以下代码(作为代码段):
$time = Measure-Command {
try{
$subitems = Get-ChildItem $directory
}catch{
$msg = "Error accessing "+$dir+": "+$_.Exception.Message
}
}
这段代码工作正常并且确实为我提供了我想要的信息。但是我面临的一个问题是Get-ChildItem
存在非停止错误,这些错误没有被捕获(因为它们没有停止)。为了防止这种情况,我可以将-ErrorAction Stop
添加到Get-ChildItem
,但如果我这样做,我就无法获得甚至有一个项目会引发错误的目录的列表。
此示例包括缺少权限和超过260个字符的路径(无论出于何种原因仍然存在)。我真的希望以某种方式获取这些信息,以便进一步处理/报告。有谁知道如何抓住那些/对那些做出反应?
到目前为止,我的研究总是建议使用-ErrorAcction Stop
来放弃"丢弃"我可以使用$subitems
的任何信息。
答案 0 :(得分:1)
因此,您希望捕获错误并继续执行脚本,我已修改您的代码以重定向错误输出,然后检查上一个命令的退出状态以检查是否发生任何错误。
这是你在找什么?
$time = Measure-Command {
try{
$subitems = Get-ChildItem $directory 2> $outnull
if(-not $?){
#whatever action you want to perform
$msg = $msg + "Error accessing "+$dir+": "+$error[0].Exception.Message
}
}catch{
$msg = "Error accessing "+$dir+": "+$_.Exception.Message
}
}
我在块中连接$ msg与自身连接,因此覆盖不会丢失msg