从命令行获取用户的未截断的 Active Directory 组

问题描述 投票:0回答:8

我经常使用

net user
命令来查看用户的 AD 组:

net user /DOMAIN <username>

这效果很好,但是组名称被截断为大约 20 个字符。 在我的组织中,大多数群组名称都比这个长得多。

有谁知道通过命令行获取未截断的 AD 组的方法吗?

windows cmd active-directory
8个回答
129
投票

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
---------------------------------------------------

68
投票

有点陈旧的帖子,但我知道到底是什么。 “whoami”满足您的需求吗?

我今天才发现它(事实上,来自将我带到这里的同一个谷歌搜索)。 Windows 从 XP 开始就有 whoami 工具(附加工具包的一部分),并且从 Vista 开始就内置了。

whoami /groups

列出当前登录用户的所有 AD 组。 不过,我相信它确实要求您以该用户身份登录,因此如果您的用例需要能够运行命令来查看另一个用户,那么这将无济于事。

仅组名称:

whoami /groups /fo list |findstr /c:"Group Name:"

5
投票

或者您可以使用 dsquerydsget:

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 远程服务器管理工具


4
投票

PowerShell 中更简单的方法:

Get-ADPrincipalGroupMembership <username>

要求:您自己运行的帐户必须是与目标用户相同域的成员,除非您指定

-Credential
-Server
(未经测试)。

此外,您必须安装 Active Directory Powershell 模块,正如@dave-lucre 在另一个答案的评论中所说,这并不总是一个选项。

仅对于组名称,请尝试以下之一:

(Get-ADPrincipalGroupMembership <username>).Name
Get-ADPrincipalGroupMembership <username> |Select Name


0
投票

基于 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.

0
投票

我还没有找到任何从与我不同的域用户读取非截断名称的方法,其中涉及使用 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


-13
投票

您可以解析 GPRESULT 命令的输出。

© www.soinside.com 2019 - 2024. All rights reserved.