在大多数情况下,我熟悉使用NET命令获取本地用户和组的信息.但是,我遇到了一个问题,使用它来获取具有长名称的域组的信息. NET USER的输出似乎将组名称限制为大约20个字符,我还没有找到使用NET GROUP获取有关名称长于此的任何组的信息的方法.
当然,从我自己的工作站,我可以使用远程服务器管理工具实用程序(例如:“ds …”命令,或PowerShell中的Active Directory模块)来获取我需要的信息.但是,我还希望能够从其他可能没有RSAT且我可能无法安装其他工具的系统中查找域组详细信息.
虽然使用NET GROUP命令解决问题会很有趣,但我不一定限于该工具.但是,我确实只需将自己限制在Windows 7(或类似)操作系统的核心安装中可用的工具,以便我可以轻松地将解决方案移植到不同的计算机上,而在这些计算机中可能无法添加其他工具.如果有一种方法可以在没有附加RSAT模块的情况下使用WMIC或PowerShell之类的东西,我肯定有兴趣听到它.
示例:“MyReallyLongDomainGroupName”是本地Admins组的成员.那么,谁有管理员访问系统?或者“AnotherVerboseDomainGroupName”在某些文件共享权限中 – 谁有权访问该共享?
旧的.NET命令仍然受到创建它的Windows NT时代的限制.要处理更长的名称,最好使用各种ds …命令dsquery,dsmod等,或者像adfind这样的第三方工具.你不会有名字长度限制.
原文链接:https://www.f2er.com/windows/366822.html编辑:
ds工具是独立的EXE,虽然存在于RSAT中,但可以自由复制.即便如此,因为我想尊重你的请求的精神,这里是一个依赖于ADSI接口的Powershell脚本(在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”,($UNKNOWN,$args[0])) $dn = [System.__ComObject].InvokeMember(“Get”,$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计算机上使用有限的用户帐户对此进行了测试.我测试了一个名为“123456789012345678901234567890123456789012345678901234567890”的组.
这个脚本绝对没有错误检查.