You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需安装ActiveDirectory模块,如何获取计算机的直接与嵌套组令牌?

不依赖ActiveDirectory模块获取计算机的直接和嵌套组成员身份

可以直接使用Windows系统默认自带的.NET System.DirectoryServices类实现需求,无需安装ActiveDirectory模块,核心逻辑和你用AD模块的代码一致,只是换成了原生AD访问方式:

# 目标计算机名称
$computerName = "machinename"
# 替换为你的域名(也可以指定域控制器地址)
$domain = "yourdomain.com"

# 搜索定位目标计算机的LDAP路径
$searcher = New-Object System.DirectoryServices.DirectorySearcher(
    [ADSI]"LDAP://$domain",
    "(&(objectCategory=computer)(name=$computerName))",
    @("distinguishedName")
)
$computerResult = $searcher.FindOne()
if (-not $computerResult) {
    Write-Error "未找到目标计算机: $computerName"
    exit
}

# 绑定到AD计算机对象并读取tokenGroups属性
$computerDN = $computerResult.Properties["distinguishedname"][0]
$computerADSI = [ADSI]"LDAP://$domain/$computerDN"
$computerADSI.RefreshCache(@("tokenGroups"))
$tokenGroups = $computerADSI.Properties["tokenGroups"]

# 将SID转换为可读的组名称
$groupNames = $tokenGroups | ForEach-Object {
    $sid = New-Object System.Security.Principal.SecurityIdentifier($_)
    try {
        $sid.Translate([System.Security.Principal.NTAccount]).Value
    }
    catch {
        Write-Warning "无法解析SID: $_"
        $sid.Value
    }
}

# 输出结果
$groupNames

关键说明:

  • 无额外依赖:System.DirectoryServices是Windows系统默认包含的.NET类库,不需要安装任何模块或组件。
  • 和AD模块逻辑对齐:同样通过读取tokenGroups属性获取计算机账户的所有组令牌(包含直接和嵌套成员关系),和Get-ADObject获取的属性完全一致。
  • 避免硬编码路径:用DirectorySearcher自动定位计算机的LDAP路径,不用手动指定OU信息。
  • 健壮性处理:添加了计算机不存在的判断和SID解析失败的捕获,避免脚本直接报错中断。

需要注意的是,计算机账户的令牌无法通过WindowsIdentity直接获取(WindowsIdentity针对的是当前登录用户/进程身份),必须通过AD查询读取计算机对象的tokenGroups属性才能拿到完整的直接+嵌套组信息。

内容的提问来源于stack exchange,提问作者L3dz3pp3l1n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:52:32