无法遍历文件夹并管道它们以尝试/捕获

时间:2018-03-20 23:56:25

标签: powershell

我有一个非常烦人的问题,我基本上在做以下事情:

Get-ChildItem $rootPath -Recurse | 
    Where {$_.psiscontainer} | 
        Get-Acl | % { 
            Write-Host "Doing some stuff here" 
        }

但是我在调​​用Get-Acl时说我无法访问时偶尔会收到错误。

没关系,我可以抓住错误继续吧?

所以我试过

Get-ChildItem $rootPath -Recurse | 
    Where {$_.psiscontainer} | 
        try {
            Get-Acl | % { 
                Write-Host "Doing some stuff here" 
            }
        } catch {Write-Host "error"}

但现在我得到了

  

无法识别“尝试”一词

这是令人难以置信的无益,因为try肯定是PowerShell中的一个命令......

接下来,我尝试将命令拆分为

$folders = Get-ChildItem $rootPath -Recurse | Where {$_.psiscontainer}

foreach ($folder in $folders) {
    try {
        Get-Acl | % { 
            Write-Host "Doing some stuff here" 
        }
    } catch {write-host "error"}
}

现在我正在

  

Get-childitem:指定的路径,文件名或两者都太长。完全限定的文件名必须少于260个字符,以及目录名称   必须少于248个字符。

为什么?我该怎么检查哪个文件夹失败?

1 个答案:

答案 0 :(得分:0)

也许尝试类似:

$folders = Get-ChildItem $rootPath -Recurse -Directory -ErrorAction SilentlyContinue

foreach ($folder in $folders) {
    try {
        Get-Acl -Path $folder | % { 
            Write-Host "Doing some stuff here" 
        }
    } catch {write-host "error"}
}

您可以使用-Directory并继续处理错误(ErrorAction)。

此外,您现在需要将参数传递给Get-Acl,因为您已经展开了管道(这是一个很好的调试步骤)。