我经常使用
net user
命令来查看用户的 AD 组:
net user /DOMAIN <username>
这效果很好,但是组名称被截断为大约 20 个字符。 在我的组织中,大多数群组名称都比这个长得多。
有谁知道通过命令行获取未截断的 AD 组的方法吗?
GPRESULT
是正确的命令,但如果没有参数则无法运行。 如果不输出到文本文件,/v
或详细选项很难管理。 例如。我推荐使用
gpresult /user myAccount /v > C:\dev\me.txt
--确保C:\Dev\me.txt存在
另一个选项是仅显示可能在命令窗口中完全可见的摘要信息:
gpresult /user myAccount /r
帐户列在标题下:
The user is a part of the following security groups
---------------------------------------------------
有点陈旧的帖子,但我知道到底是什么。 “whoami”满足您的需求吗?
我今天才发现它(事实上,来自将我带到这里的同一个谷歌搜索)。 Windows 从 XP 开始就有 whoami 工具(附加工具包的一部分),并且从 Vista 开始就内置了。
whoami /groups
列出当前登录用户的所有 AD 组。 不过,我相信它确实要求您以该用户身份登录,因此如果您的用例需要能够运行命令来查看另一个用户,那么这将无济于事。
仅组名称:
whoami /groups /fo list |findstr /c:"Group Name:"
或者您可以使用 dsquery 和 dsget:
dsquery user domainroot -name <userName> | dsget user -memberof
要检索组成员身份,如下所示:
Tue 09/10/2013 13:17:41.65
C:\
>dsquery user domainroot -name jqpublic | dsget user -memberof
"CN=Technical Support Staff,OU=Acme,OU=Applications,DC=YourCompany,DC=com"
"CN=Technical Support Staff,OU=Contosa,OU=Applications,DC=YourCompany,DC=com"
"CN=Regional Administrators,OU=Workstation,DC=YourCompany,DC=com"
虽然我找不到任何证据表明我曾在计算机上安装过此软件包,但您可能需要安装 Windows 7 远程服务器管理工具。
PowerShell 中更简单的方法:
Get-ADPrincipalGroupMembership <username>
要求:您自己运行的帐户必须是与目标用户相同域的成员,除非您指定
-Credential
和 -Server
(未经测试)。
此外,您必须安装 Active Directory Powershell 模块,正如@dave-lucre 在另一个答案的评论中所说,这并不总是一个选项。
仅对于组名称,请尝试以下之一:
(Get-ADPrincipalGroupMembership <username>).Name
Get-ADPrincipalGroupMembership <username> |Select Name
基于 P.Brian.Mackey 的回答——我尝试使用
gpresult /user <UserName> /r
命令,但它似乎只适用于我的用户帐户;对于其他用户帐户,我得到了这个结果:The user "userNameHere" does not have RSOP data
。
所以我阅读了这个博客 - https://blog.thesysadmins.co.uk/group-policy-gpresult-examples.html-- 并找到了解决方案。 您必须知道用户的计算机名称:
gpresult /s <UserComputer> /r /user:<UserName>
运行命令后,您必须
ENTER
几次才能完成程序,因为它会在输出中间暂停。 此外,结果还提供了一堆数据,包括“COMPUTER SETTINGS> Applied Group Policy Objects
”部分,然后是“COMPUTER SETTINGS> Security groups
”,最后是“USER SETTINGS> security groups
”(这就是我们正在寻找的带有非描述被截断!)。
有趣的是,GPRESULT 有一些在 NET USER 命令中没有看到的额外成员。 此外,排序顺序不匹配并且不是按字母顺序排列的。 任何机构如果能够在评论中添加更多见解,那就太好了。
结果:
gpresult (with ComputerName, UserName)
出于安全原因,我仅包含了成员资格结果的子集。 (总共 36 个,12 个样本)
The user is a part of the following security groups
---------------------------------------------------
..
Internet Email
GEVStandardPSMViewers
GcoFieldServicesEditors
AnimalWelfare_Readers
Business Objects
Zscaler_Standard_Access
..
GCM
..
GcmSharesEditors
GHVStandardPSMViewers
IntranetReportsViewers
JetDWUsers -- (NOTE: this one was deleted today, the other "Jet" one was added)
..
Time and Attendance Users
..
结果:
net user /DOMAIN (with UserName)
出于安全原因,我仅包含了一部分成员资格结果。 (总共 23 个,12 个样本)
Local Group Memberships
Global Group memberships ...
*Internet Email *GEVStandardPSMViewers
*GcoFieldServicesEdito*AnimalWelfare_Readers
*Business Objects *Zscaler_Standard_Acce
...
*Time and Attendance U*GCM
...
*GcmSharesEditors *GHVStandardPSMViewers
*IntranetReportsViewer*JetPowerUsers
The command completed successfully.
我还没有找到任何从与我不同的域用户读取非截断名称的方法,其中涉及使用 cmd.exe 或 powershell.exe。
这就是我发布一个小型 Python 脚本的原因。不完全符合 OP 的约束,但完成了工作。
from pyad import *
from pyad.adquery import ADQuery
import re
username = "<username you'd like to inspect>"
pyad.set_defaults(ldap_server="<IP of your domain controller server>")
query = ADQuery()
query.execute_query(attributes=["memberOf"], where_clause="sAMAccountName = '{}'".format(username))
results = query.get_results()
for r in results:
memberOf = r['memberOf']
for g in memberOf:
print(g)
需要:
pip3 install pyad
您可以解析 GPRESULT 命令的输出。