处理PowerShell中Get ChildItem的不停止错误

处理PowerShell中Get ChildItem的不停止错误,powershell,exception-handling,Powershell,Exception Handling,我目前正在编写一个脚本,用于获取CIFS共享上目录树的平均访问/列表时间。为此,我使用以下代码(作为一个片段): 这段代码运行良好,确实为我提供了所需的信息。但是我面临的一个问题是,Get ChildItem存在不停的错误,这些错误没有被捕获(因为它们是不停的)。为了防止出现这种情况,我可以将-ErrorAction Stop添加到获取ChildItem中,但如果这样做,我将无法获取目录的列表,该目录甚至有一个项目抛出错误 这方面的例子包括缺少超过260个字符的权限和路径(无论出于何种原因,这仍

我目前正在编写一个脚本,用于获取CIFS共享上目录树的平均访问/列表时间。为此,我使用以下代码(作为一个片段):

这段代码运行良好,确实为我提供了所需的信息。但是我面临的一个问题是,
Get ChildItem
存在不停的错误,这些错误没有被捕获(因为它们是不停的)。为了防止出现这种情况,我可以将
-ErrorAction Stop
添加到
获取ChildItem
中,但如果这样做,我将无法获取目录的列表,该目录甚至有一个项目抛出错误

这方面的例子包括缺少超过260个字符的权限和路径(无论出于何种原因,这仍然是一个问题)。我真的很想以某种方式获得这些信息,以便对其进行进一步的处理/报告。有人知道如何抓住这些/对这些做出反应吗


到目前为止,我的研究一直建议使用
-ErrorAcction Stop
,它将“丢弃”我可以使用的
$subitems
的任何信息。

因此您希望捕获错误并继续脚本,我已经修改了您的代码以重定向错误输出,然后检查上一个命令的退出状态以检查是否发生了任何错误

这就是你要找的吗

$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。在这种情况下,
$outnull
似乎包含错误。这远不是一个好的解决方案,但我想总比没有好。假设存在多个错误,您只能得到所有错误的摘要,而没有关于单个项目的信息。但我想现在就可以了。遗憾的是,似乎没有更好的方法来处理它。@Seth对于访问错误,应该使用$error[0]而不是$outnull,因为您将获得异常对象,这就是为什么我添加了带有$error[0].exception.Message的$msg updation语句,只要cmdlet退出状态为false
$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
    }
}