我想运行一个脚本来检查驱动器,看看是否有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
结果。
答案 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的限制,您需要不同的工具来处理更长的路径。