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

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

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...