active-directory – 如何使用核心Windows实用程序从命令行查看
在大多数情况下,我熟悉使用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这样的第三方工具.你不会有名字长度限制.
编辑: 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 <DOMAINgroupName>`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”的组. 这个脚本绝对没有错误检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |