如何使用核心Windows实用程序从命令行查看域组的信息?

我很熟悉在大多数情况下使用NET命令获取本地用户和组的信息。 但是,我遇到了一个问题,使用它来获取长名称域组的信息。 NET USER的输出似乎限制了大约20个字符的组名,并且我还没有find使用NET GROUP获取有关名称长于该名称的任何组的信息的方法。

当然,从我自己的工作站,我可以使用远程服务器pipe理工​​具实用程序(例如:“ds …”命令或PowerShell中的Active Directory模块)来获取我需要的信息。 但是,我也希望能够从其他可能没有RSAT的系统查询域组详细信息,并且可能无法安装其他工具。

虽然解决NET GROUP命令的问题会很有趣,但我不一定只限于该工具。 但是,我确实需要仅限于Windows 7(或类似的)操作系统的核心安装中提供的工具,以便我可以轻松地将解决scheme移植到不同的计算机上,在这些计算机上添加其他工具可能不是一种select。 如果有办法像WMIC或者没有额外的RSAT模块的PowerShell这样做,我肯定有兴趣听到它。

示例:“MyReallyLongDomainGroupName”是本地Admins组的成员。 那么,谁有pipe理员访问系统? 或“AnotherVerboseDomainGroupName”是在一些文件共享权限 – 谁有权访问该共享?

旧的NET命令仍然受到Windows NT时代创build时的限制。要处理更长的名称,最好使用各种ds... dsquerydsmod等命令或第三方工具(如adfind 。 你将不会有名字长度的限制。

编辑:

ds工具是独立的EXE,在RSAT中可以自由复制。 即使如此,因为我想尊重您的请求的精神,这里是一个Powershell脚本依赖于ADSI接口(Windows中不需要安装RSAT – 这是一个基本的操作系统组件),将枚举成员一个小组。

 # iADSNameTranslate constants $ADS_NAME_INITTYPE_GC = 3 $DISTINGUISHEDNAME = 1 $DOMAINSIMPLE = 5 $UNKNOWN = 8 if ($args.count -ne 1) { "`nUsage: ./GroupEnum.ps1 <DOMAIN\groupName>`n"; Exit; } $ns = New-Object -ComObject NameTranslate [System.__ComObject].InvokeMember(“init”, ”InvokeMethod”, $null, $ns, ($ADS_NAME_INITTYPE_GC, $null)) [System.__ComObject].InvokeMember(“Set”, ”InvokeMethod”, $null, $ns, ($UNKNOWN, $args[0])) $dn = [System.__ComObject].InvokeMember(“Get”, ”InvokeMethod”, $null, $ns, $DISTINGUISHEDNAME) $Group = [ADSI]"LDAP://$dn" if ($Group.SchemaClassName -eq "group") { $Group.Member | ForEach-Object { $x = [ADSI]"LDAP://$_" if ($x.SchemaClassName -eq "user") { $x.sAMAccountName } } } 

我在没有安装RSAT的Windows 7 x64 SP1计算机上使用有限的用户帐户testing了这一点。 我testing了一个名为“123456789012345678901234567890123456789012345678901234567890”的组。

在这个脚本中绝对没有错误检查。

添加另一个答案,因为我目前的答案是基于当前login的用户组…和OP在评论中说:

示例:“MyReallyLongDomainGroupName”是本地Admins组的成员。 那么,谁有pipe理员访问系统? 或“AnotherVerboseDomainGroupName”是在一些文件共享权限 – 谁有权访问该共享?

所以在这里你去…我从Win7工作站上的普通用户的帐户testing:

从RUN线(赢+ R)

Rundll32 dsquery.dll OpenQueryWindow

这应该会popup一个AD查询窗口,您可以在其中find所涉及的组…双击该组…并查看组中的用户。

好吧,知道你需要一个不是你的工作站的域计算机的非RSAT工具,那么我将假设你想弄清楚这个工作站上的用户是否属于这个组。

如果是这样的话,我可以想到几个选项:

  1. 你可以运行WHOAMI /GROUPS
  2. 您可以运行mstsc和rdp到您的工作站或DC,并使用常规工具
  3. 你可以运行gpresult /R /SCOPE USER

所有这些当然要求您在计算机上能够查询DC的域上。

希望有帮助…我现在能想到的最好。

你可以使用Powershell。

 Get-ADGroup -Filter '*' Get-ADGroup -Filter '*' | Select-Object Name 

第一个只是在组上打印一些细节。 第二个只打印他们的名字。

编辑:如果ActiveDirectory模块只有通过RSAT可用,那么这里是一个.NET解决scheme 。

 $dn = New-Object System.DirectoryServices.DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","Username","PWD") $dsLookFor = new-object System.DirectoryServices.DirectorySearcher($dn) $dsLookFor.Filter = "(&(objectCategory=group))"; $dsLookFor.SearchScope = "subtree"; $n = $dsLookFor.PropertiesToLoad.Add("cn"); $n = $dsLookFor.PropertiesToLoad.Add("distinguishedName"); $n = $dsLookFor.PropertiesToLoad.Add("sAMAccountName"); $lstUsr = $dsLookFor.findall() foreach ($usrTmp in $lstUsr) { Write-Host $usrTmp.Properties["samaccountname"] }