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

从Active Directory扫描本地管理员账户脚本故障求助

解决Active Directory扫描与本地管理员组检查脚本的故障

我来帮你搞定这个脚本的问题——你遇到的报错大概率是几个基础的语法和逻辑问题导致的,咱们一步步梳理修正:

问题根源分析

你脚本里的几个关键错误点:

  • 错误的脚本块定义:$root用了{}包裹查询,这会让它变成一个未执行的脚本块对象,而不是实际的计算机列表,后续循环时$server根本不是你要的计算机名称。
  • 中文引号:代码里用了中文的”和““,PowerShell只识别英文双引号",这会直接导致语法解析失败,尤其是$computer.psbase.children.find(”Administrators”)`这行。
  • 未正确提取计算机名称:用Select -Property Name后得到的是带Name属性的对象,直接"$server"会输出类似@{Name=Win10-PC01}的字符串,导致ADSI路径错误。
  • 重复AD查询:两次调用Get-ADComputer完全可以合并,提升执行效率。

修正后的完整脚本

################################################
# 扫描Active Directory中的Win10和Win7计算机,检查本地管理员组
################################################

# 合并AD查询,一次性获取符合条件的计算机(提取Name属性值)
$computers = Get-ADComputer -Filter {Name -like "win10*" -or Name -like "*win7"} | Select-Object -ExpandProperty Name

foreach ($computerName in $computers) {
    try {
        # 创建ADSI计算机对象(注意用英文引号)
        $computer = [ADSI]"WinNT://$computerName,computer"
        
        # 获取本地Administrators组(英文引号)
        $adminGroup = $computer.psbase.Children.Find("Administrators")
        
        # 获取组成员并格式化输出
        $members = $adminGroup.psbase.Invoke("Members") | ForEach-Object {
            $adspath = $_.GetType().InvokeMember("Adspath", 'GetProperty', $null, $_, $null)
            # 处理不同格式的Adspath,统一输出格式
            switch -Wildcard ($adspath) {
                "WinNT://*/*/$computerName" { $adspath -replace "WinNT://.*?/$computerName/", "" }
                "WinNT://*/*" { $adspath -replace "WinNT://", "" -replace "/", "\" }
                default { $adspath -replace "WinNT://", "" }
            }
        }

        # 输出结果,标注所属计算机
        Write-Host "=== 计算机 $computerName 的本地管理员成员 ==="
        $members
        Write-Host "`n"
    }
    catch {
        # 捕获错误并提示,避免脚本中断
        Write-Warning "无法访问计算机 $computerName 或获取管理员组:$_"
    }
}

关键修改说明

  1. 合并AD查询并提取名称:用-ExpandProperty Name直接获取计算机名称字符串,避免后续处理对象属性的麻烦,同时合并Filter减少AD查询次数。
  2. 替换所有中文引号:把所有中文引号换成英文双引号,确保PowerShell能正确解析。
  3. 添加错误处理:用try/catch包裹核心逻辑,遇到无法访问的计算机(比如离线、权限不足)时会输出警告,脚本继续运行。
  4. 优化成员格式化:用switch处理不同格式的Adspath,输出更清晰的成员名称(比如域用户显示DOMAIN\Username,本地用户显示Username)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:22:53