仅使用NTFS Everyone

时间:2017-01-06 12:45:30

标签: powershell

我想运行一个脚本来检查驱动器,看看是否有Everyone设置为NTFS权限。目前我正在运行:

Get-ChildItem D:\ -Recurse | Where-Object {
    (Get-Acl $_.FullName).Access | Where-Object {
        $_.IdentityReference -eq 'Everyone'
    }
} | Where-Object {
    $_.Mode -match "d"
} | Format-Table FullName

哪个工作得很好,但我得到了很多"指定的路径,文件名或两者都太长了。完全限定的文件名必须少于260个字符"。

是否可以使用recurse来检查所有D驱动器但是在最高继承级别停止脚本?

例如

如果我有d:\ test \ test2和test2继承测试中的Everyone我应该只看到

d:\test

d:\test
d:\test\test2

结果。

1 个答案:

答案 0 :(得分:2)

只需检查未继承的ACE。我还建议检查$_.PSIsContainer而不是$_.Mode,并在检查ACL之前执行此操作。在PowerShell v3或更高版本上,使用-Directory Get-ChildItem开关将结果限制为仅限目录。

Get-ChildItem D:\ -Recurse | Where-Object {
    $_.PSIsContainer -and
    (Get-Acl $_.FullName).Access | Where-Object {
        $_.IdentityReference -eq 'Everyone' -and
        -not $_.IsInherited
    }
} | Select-Object -Expand FullName

请注意,这不会处理超过260个字符的路径。这是Win32 API的限制,您需要不同的工具来处理更长的路径。