使用ACL中的特定用户或组查找NTFS中的所有文件

执行摘要:我想查找特定用户或组可以访问的所有目录和文件。

更详细地说:我正在寻找一个命令行工具来recursionsearchNTFS目录中的DACL中的ACE包含给定的用户或组的所有文件和目录。 如果我想修改权限,我会使用subinaclSetACL 。 我想我也可以使用这些工具之一来search和显示,但是我很难find一个直接的解决scheme。

我可以像这样使用SetACL:

setacl -on C:\SOME_DIR -ot file -actn list -lst "f:tab;w:d;i:y;" -rec cont 

然后grep为感兴趣的用户,但我想要一个更优雅的解决scheme。 我可能在这里错过了一些东西。 有任何想法吗?

谢谢,“未知”。 你的PowerShell脚本不适合我,但是我一起黑了。 我也是新手,但经过一些试验和错误:

 Get-ChildItem "C:\SOME\DIR" -recurse | ForEach-Object { $fname = $_.FullName $acl = Get-Acl $fname foreach ($e in $acl.Access) { If ( -not $e.IsInherited -and $e.AccessControlType -eq "Allow" -and $e.IdentityReference -eq "SOMEDOMAIN\Somegroup") { Write-Host $fname break } } } 

有人用PowerShell功夫可能可以清理这一点。 请注意,我忽略了inheritance的条目,因为我只想知道访问的开始位置。

未经testing,并有点新的PowerShell,但像这样的东西会写到屏幕上。 从那里你可以将其转储到一个文件或其他任何东西。

 Get-ChildItem "RootFolderPath" -recurse | ForEach-Object { $acl = Get-Acl $_.FullName If $acl.ContainsKey "User/Group" {Write-Host $_.FullName} } 

accessenum为你的用例工作,我想知道?

这是我从上面修改的powershell脚本,为我工作:

 $files = @() Get-ChildItem "d:\some\path" -recurse | ForEach-Object { $fname = $_.FullName if ($fname -notlike "*_vti*") { $acl = Get-Acl $($fname) foreach ($e in $acl.Access) { If ( $e.FileSystemRights -like "*Modify*" -and $e.IdentityReference -eq "domain\user") { $files += $fname break } } } } $files > d:\out.txt