获取共享文件夹中所有文件夹的访问控制列表(ACL)

3

我有一个脚本可以获取我的服务器上所有网络共享文件夹的访问控制列表(除了管理员共享)。看起来它能工作,但输出结果给我的是一些数字而不是权限,我不明白这个数字意味着什么,更重要的是,我应该如何将它们翻译成常规权限(FC、RO等)。

$shares = Get-SmbShare | Where-Object Name -notlike "*$" | Select-Object Name

$Report = @()
foreach ($share in $shares){
   $path = "\\$env:COMPUTERNAME\" + $share.Name.ToString()
   $FolderPath = dir -Directory -Path $path -Recurse -Force
   Foreach ($Folder in $FolderPath) {
      $Acl = Get-Acl -Path $Folder.FullName
      foreach ($Access in $acl.Access)
      {
         $Properties = [ordered]@{
            'FolderName'=$Folder.FullName;
            'ADGroup or User'=$Access.IdentityReference;
            'Permissions'=$Access.FileSystemRights;
            'Inherited'=$Access.IsInherited}
         $Report += New-Object -TypeName PSObject -Property $Properties
      }
   }
}
$Report | Export-Csv -path "C:\temp\FolderPermissions.csv"

这是我得到的一些输出(略微修剪以保持简洁)

"FolderName","ADGroup or User","Permissions","Inherited"
"\\WIN-RPK9O6GR3JM\foobar\STE","NT AUTHORITY\SYSTEM","FullControl","True"
...
"\\WIN-RPK9O6GR3JM\foobar\STE","CREATOR OWNER","268435456","True"
"\\WIN-RPK9O6GR3JM\foobar\STE\LOG","BUILTIN\Users","CreateFiles","True"
"\\WIN-RPK9O6GR3JM\foobar\STE\LOG","CREATOR OWNER","268435456","True"
...
"\\WIN-RPK9O6GR3JM\foobar\STE\TMP","BUILTIN\Users","CreateFiles","True"
"\\WIN-RPK9O6GR3JM\foobar\STE\TMP","CREATOR OWNER","268435456","True"
...
"\\WIN-RPK9O6GR3JM\SYSVOL\foobar.net","NT AUTHORITY\Authenticated Users","-1610612736","True"
...
"\\WIN-RPK9O6GR3JM\SYSVOL\foobar.net","BUILTIN\Administrators","-536084480","True"

如果有人能够解释或指引我正确的方向,让我了解这些数值是什么以及如何翻译它们,我将不胜感激。

谢谢!


这些都是特定授权的超级用户内置账户。例如:NT AUTHORITY 是 Windows 本地实例上最强大的账户(比任何管理员账户都更强大)。 - Ranadip Dutta
我知道这个。问题是权限中的数字实际上代表什么意思(我想我已经弄清楚了268435456是“完全控制”,但是-1610612736和-536084480仍然是谜。而且我确定这些不是唯一的,因此如果有一种将这些数字掩码转换为单词的方法,我很愿意这样做以使我的脚本更好。 - Jose Cintron
修改、删除和完全控制,我想是这样的...只需检查此链接。看看这是否有帮助。 - Ranadip Dutta
268435456 - FullControl-536805376 - 修改,同步-1610612736 - 读取和执行,同步 - Ranadip Dutta
1
感谢@RanadipDutta,这确实回答了问题。根据访问控制掩码-536805376超过了Mod、Sync。它是Generic_ALL + Access_SACL + ALL_STD_AccessRights。无论如何,非常感谢您的帮助。 - Jose Cintron
1个回答

1
这是我目前为止能为您提供的帮助:

268435456 - FullControl

-536805376 - Modify, Synchronize

-1610612736 - ReadAndExecute, Synchronize

但是请通过这些链接将它们联系起来:

链接1

链接2

链接3

希望对你有所帮助。


事实上是错误的,即使访问掩码(数字值)的含义与枚举成员相对应。告诉我,如果0x10000000 == 268435456,但FullControl被定义为0x1F01FF,怎么回事?答案是:FileSystemRights枚举只关心标准访问掩码,并忽略通用访问掩码。但是0x10000000(== GENERIC_ALL)也是一个完全有效的值。使用MapGenericMask将通用访问掩码转换为标准访问掩码。但不要假装它们是相同的。它们不是! - 0xC0000022L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接