我想检查给定的Active Directory用户(由用户名和域指定)是否对给定文件夹具有读/(写)权限。这与直接通过用户名或某些组成员身份间接授予它们无关。但是到目前为止,我已经像5个小时一样在Google上搜寻,但无济于事。
我了解到,Get-Acl
Cmdlet用于读取文件夹权限。该用户很可能是某个组的成员,该组间接为其授予了权限。
所以我的想法是只匹配
的输出(Get-Acl <Folder>).Access | ft
针对用户的组成员身份。
我使用命令收集组信息
Get-ADPrincipalGroupMembership "<Username>" | select name
,但发现这具有一组完全不同的组名。我假设Get-Acl
输出的组是本地组,而其他组是AD方面的组。
我找到了命令whoami /groups
,该命令可以打印所有组,但仅用于当前登录的用户。
经过一些额外的时间后,我找出了该命令(基于.NET):
(New-Object Security.Principal.WindowsIdentity -ArgumentList @(,"<User@fullDomain.com>")).Claims | select Value
这只是打印SID,而
(Get-Acl <Folder>).Access | ft
显示一些人性化的输出,例如“ NT SERVICE \ TrustedInstaller”等。
我相信我已经很接近了,但是我无法使其正常工作。 另一个要注意的是:这真的必须那么复杂吗?
我发现其他解决方案仅基于直接用户权限起作用,而不检查组权限。
哦,有一件事:一切都必须在Windows Server 2012 R2的PowerShell 4.0上运行,并且PowerShell脚本将在本地运行。不允许使用NuGet软件包或任何需要Internet连接的软件包。