windows – 是否可以列出我无权访问的所有权限

我正在寻找一种方法来递归遍历我的整个文件共享(相当大的3TB文件)并列出我无法访问的所有文件/文件夹.由于迁移和大路径上的一些错误(超过255个字符),我们发现一些文件夹/文件已丢失所有权限,并且需要一种方法来查找所有权限.目前,作为域管理员用户,我无法列出权限或所有者.我可以控制它,并重置权限,但我有很多文件/文件夹我想将其输出到CSV文件或其他东西.

我尝试过以下方法:

get-childitem "\,\fileshare\f$\folder\etc" -recurse | get-acl

这似乎工作得很好,它给了我存在的所有文件/文件夹的ACL,并对它们有适当的权限.
但是一旦它命中了我无法访问的文件夹,我会收到以下错误:

Get-Acl : Attempted to perform an unauthorized operation.
At line:1 char:133
+ get-childitem "\,\fileshare\f$\folder\etc" -re
curse | get-acl <<<<
    + CategoryInfo          : NotSpecified: (:) [Get-Acl], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetAclCommand

这些是我想要记录到CSV / TXT文件的错误,并忽略所有其他权限,如果每个错误方式也可以输出更多的一行,那将是理想的.

只是想知道是否有人有想法或暗示我应该如何进行?

(请注意上面的路径中有逗号用于不解析真实路径

\,\fileshare\f$\folder\etc)

谢谢!

将cmdlet特定错误捕获到文件的更简单且更少混淆的方法是使用-Errorvariable参数.它内置于大多数cmdlet中.查看$Error变量是不可靠的,因为它是一个全局变量,并且很有可能被powershell过程中的其他未减轻的错误所污染.

下面的代码将在2个日志文件中记录错误.

> gci_errors.csv – 包含枚举文件夹的错误
> gacl_errors.csv – 包含枚举特定文件/文件夹上的ACL的错误.

Get-ChildItem C:\Temp -Recurse -ErrorAction SilentlyContinue -ErrorVariable gci_errors | ForEach-Object {

    $_ | Get-Acl -ErrorAction SilentlyContinue -ErrorVariable gacl_errors
}

$gci_errors | Select-Object -ExpandProperty CategoryInfo | Export-Csv -NoTypeInformation -Path C:\Temp\gci_errors.csv 
$gacl_errors | Select-Object -ExpandProperty CategoryInfo | Export-Csv -NoTypeInformation -Path C:\Temp\gacl_errors.csv

我已根据您的要求将输出更改为CSV文件.它更有意义,因为它更容易分析和导入以在数据上运行命令. CSV有一个名为Target的colum标头,它反映了导致问题的文件夹路径.您可以编写一个cmdlet,即Fix-DirPerms和管道.就像是:

Import-CSV -Path c:\Temp\gci_errors.csv | Fix-DirPerms
相关文章
相关标签/搜索