如何列出任何用户的 Windows 权限

A G*_*A G 10 windows-7 privileges powershell windows-domain vbscript

我正在尝试编写一个脚本来列出SeShutDownPrivilege所有用户帐户的权限(例如等)。如果我的脚本可以作为标准用户运行,我更喜欢它,但如果必须的话,我可以作为管理员帐户运行它。以下是我迄今为止尝试过的方法:

  • 使用 tokensz(来自https://blogs.technet.microsoft.com/askds/2007/11/02/whats-in-a-token/):适用tokensz /compute_tokensize /dump_groups于当前登录的用户()。但是,即使以域管理员身份登录时,尝试使用其他用户 ( tokensz /compute_tokensize /dump_groups /user:[another.user]) 时,我也会收到错误消息SEC_E_LOGON_DENIED

  • whoami /all 有效但仅适用于当前登录的用户

  • ntrights.exe 似乎无法列出权限,只能添加和删除。

  • secedit /export /areas USER_RIGHTS /cfg out.txt: 列出所有特权和拥有该特权的 SID,但该列表似乎不完整;从输出tokensz示出了用户John.SmithSeShutdownPrivilege,但从输出seceditSeShutdownPrivilege列出基团John.Smith不是的成员。

我可以使用可移植的可执行文件(例如tokensz.exe, ntrights.exe)和内置实用程序,但无法安装应用程序或扩展

Ram*_*und 6

您可以使用AccessChk来完成此任务。

Accesschk “domain\user” -a * 将列出给定域用户的所有权限。

您可以在 PowerShell 脚本中调用此程序,将结果连接到一个文本文件中,然后仅过滤掉您想了解的权限。


Ben*_*n N 5

对于任何寻找 PowerShell 脚本的人来说,应该这样做:

gwmi Win32_UserProfile | foreach-object {
 $sid = New-Object System.Security.Principal.SecurityIdentifier($_.SID)
 $user = $sid.Translate([System.Security.Principal.NTAccount])
 $username = $user.Value
 $username
 $chkCmd = "accesschk """ + $username + """ -a * -q"
 iex $chkCmd
 ""
}
Run Code Online (Sandbox Code Playgroud)

它获取在本地机器上拥有配置文件的用户列表,根据 SID 确定他们的姓名,并accesschk按照 Ramhound 的建议对他们进行调用。每个用户的记录以DOMAIN\user格式的用户名开始,包含一行中的每个权限,并以一个空行结束。(SID 翻译由本文提供。)您可以使用重定向运算符将其内容转储到文件中,>.

AccessChk 的一个警告是它似乎为没有本地管理员权限的域用户生成一个空列表。因此,为域中和机器上的每个已知用户生成上述信息的这个版本有点蹩脚,但可能会在该工具的未来版本中变得有用:

gwmi Win32_UserAccount | foreach-object {
 $username = $_.Caption
 $username
 $chkCmd = "accesschk """ + $username + """ -a * -q"
 iex $chkCmd
 ""
}
Run Code Online (Sandbox Code Playgroud)

如果您想知道secedit在谈论什么,它只是获取在用户权限分配(请参阅 参考资料secpol.msc)中分配了权限的主体列表(以 SID 形式)。因此,您通常会看到用户或管理员等组的 SID,而不是特定人员。