我想运行一个脚本来检查驱动器,看看是否有每个人都设置为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个字符”。
是否可以递归检查所有D驱动器,但在最高继承级别停止脚本?
例如
如果我有d:\ test \ test2和test2从test继承每个人,我应该只会看到
d:\ test
不是
d:\ test d:\ test \ test2
因此。
只需检查未继承的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的局限性,您需要使用其他工具来处理更长的路径。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句