微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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 <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”的组.

这个脚本绝对没有错误检查.

原文地址:https://www.jb51.cc/windows/366822.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐