Powershell 以递归方式列出域用户可以访问的所有目录
递归列出所有目录非常简单,如下所示:Powershell 以递归方式列出域用户可以访问的所有目录,powershell,Powershell,递归列出所有目录非常简单,如下所示: Get-ChildItem G:\ -recurse -directory 编写一个列出特定目录权限的函数非常简单: get-acl $folder.access 如何递归检查每个目录的ACL,然后仅输出域用户组可以访问的目录的列表?您可以执行以下操作: Get-ChildItem G:\ -Directory -Recurse -ErrorAction SilentlyContinue | Where { try { (Get-Acl -Lit
Get-ChildItem G:\ -recurse -directory
编写一个列出特定目录权限的函数非常简单:
get-acl $folder.access
如何递归检查每个目录的ACL,然后仅输出域用户组可以访问的目录的列表?您可以执行以下操作:
Get-ChildItem G:\ -Directory -Recurse -ErrorAction SilentlyContinue |
Where { try { (Get-Acl -LiteralPath $_.FullName | Select -ExpandProperty Access |
Where { $_.IdentityReference -eq "MYDOMAIN\Domain Users" `
-and ($_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::Read) -eq [System.Security.AccessControl.FileSystemRights]::Read `
-and $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow }) } catch { } }
Where对象
中的try
catch
块是为了避免错误,因为当您无法访问路径时,Get Acl
将始终引发错误,即使您将-ErrorAction SilentlyContinue设置为
Where对象的说明
:
搜索“MYDOMAIN\Domain用户”:
$\u.IdentityReference-eq“MYDOMAIN\Domain用户”
至少具有读访问权限的
($\.FileSystemRights-band[System.Security.AccessControl.FileSystemRights]::Read)-eq[System.Security.AccessControl.FileSystemRights]::Read
允许类型(可能被拒绝)
$\uU4.AccessControlType-eq[System.Security.AccessControl.AccessControlType]:允许执行以下操作:
Get-ChildItem G:\ -Directory -Recurse -ErrorAction SilentlyContinue |
Where { try { (Get-Acl -LiteralPath $_.FullName | Select -ExpandProperty Access |
Where { $_.IdentityReference -eq "MYDOMAIN\Domain Users" `
-and ($_.FileSystemRights -band [System.Security.AccessControl.FileSystemRights]::Read) -eq [System.Security.AccessControl.FileSystemRights]::Read `
-and $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow }) } catch { } }
Where对象
中的try
catch
块是为了避免错误,因为当您无法访问路径时,Get Acl
将始终引发错误,即使您将-ErrorAction SilentlyContinue设置为
Where对象的说明
:
搜索“MYDOMAIN\Domain用户”:
$\u.IdentityReference-eq“MYDOMAIN\Domain用户”
至少具有读访问权限的
($\.FileSystemRights-band[System.Security.AccessControl.FileSystemRights]::Read)-eq[System.Security.AccessControl.FileSystemRights]::Read
允许类型(可能被拒绝)
$\uu.AccessControlType-eq[System.Security.AccessControl.AccessControlType]:Allow
经过一些阅读和修改,我认为我找到了一个合适的解决方案:
Get-ChildItem -recurse -directory G:\ | Where {(get-acl $_.fullname).access.IdentityReference -Match "mydomain\\Domain Users"}
经过一些阅读和修改,我认为我已经找到了一个合适的解决方案:
Get-ChildItem -recurse -directory G:\ | Where {(get-acl $_.fullname).access.IdentityReference -Match "mydomain\\Domain Users"}
我会使用一个普通的域用户帐户,看看能读到什么。。。无需解析权限,只需查看允许该帐户查看的内容。是的,这是一个快速的破解,但如果需要,我想将其推广到其他组。更不用说递归地单击整个目录树需要花费很长时间。然后我必须记录我的发现,这也可能是人为的错误。我不是有意要手工做的。[咧嘴笑]像机器人复制
这样的东西可以快速读取完整的树。。。这会让你知道你想要的是什么。如果您想测试一个组,那么创建一个仅在该组中的测试帐户。。。我会使用一个普通的域用户帐户,看看能读到什么。。。无需解析权限,只需查看允许该帐户查看的内容。是的,这是一个快速的破解,但如果需要,我想将其推广到其他组。更不用说递归地单击整个目录树需要花费很长时间。然后我必须记录我的发现,这也可能是人为的错误。我不是有意要手工做的。[咧嘴笑]像机器人复制
这样的东西可以快速读取完整的树。。。这会让你知道你想要的是什么。如果您想测试一个组,那么创建一个仅在该组中的测试帐户。。。虽然我很感激能够处理错误并使解决方案变得健壮,但请记住我是域管理员,所以我应该能够阅读整个目录树。然而,这无疑是最彻底的解决办法。再次感谢。不客气,您可以将其标记为已回答;)选中C:\,您将看到即使域管理员也无法读取整个目录树(默认情况下);)尽管我很感激能够处理错误并使解决方案变得健壮,但请记住,我是域管理员,所以我应该能够阅读整个目录树。然而,这无疑是最彻底的解决办法。再次感谢。不客气,您可以将其标记为已回答;)选中C:\,您将看到即使域管理员也无法读取整个目录树(默认情况下);)否,您需要将AccessControlType
也检查为Allow
,否则这也可能列出Deny
。所以我认为你应该接受。是的,同意。cfu的错误检查也会处理由于文件系统上不再存在而无法读取的对象。不,您需要将AccessControlType
也检查为Allow
,否则也可能列出Deny
。所以我认为你应该接受。是的,同意。CFU的错误检查还负责处理无法读取的对象,因为它们不再存在于文件系统中。