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

获取域内GPO与OU时遇错,求正确连接及输出方法

问题分析与解决方案

错误原因

  1. GetDomain方法参数不匹配:GPMgmt.GPM的GetDomain方法不能仅传入域名,它要求至少3个参数(域名、GPMContext对象、GPMSearchCriteria对象,后两个可传入$null),原脚本参数数量不足导致报错。
  2. $ous变量未初始化:脚本中直接遍历$ous,但该变量从未被赋值,调用空对象的属性触发错误。

正确的GPO连接方法

有两种可靠的域内GPO连接方式:

方式1:使用GroupPolicy模块原生命令(推荐)

GroupPolicy模块提供了Get-GPO命令,无需手动处理COM对象,直接调用即可获取GPO:

# 获取当前域所有GPO
Get-GPO -All
# 获取指定域的GPO
Get-GPO -All -Domain "ngmgmt.internal"

方式2:使用GPMC COM对象(需注意参数格式)

若必须使用COM对象,GetDomain的正确调用格式需传入三个参数:

$gpmc = New-Object -ComObject "GPMgmt.GPM"
$gpmcDomain = $gpmc.GetDomain($domain, $null, $null)

实现域内OU及GPO输出的脚本

以下脚本可遍历当前林中所有域,输出对应的GPO和OU列表(需提前安装ActiveDirectory模块,可通过Install-WindowsFeature RSAT-AD-PowerShell命令安装):

# 导入所需模块
Import-Module GroupPolicy
Import-Module ActiveDirectory

# 获取当前林内的所有域
$forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$domains = $forest.Domains | Select-Object -ExpandProperty Name

foreach ($domain in $domains) {
    Write-Host "`n=== 域名: $domain ===" -ForegroundColor Cyan

    # 输出该域的所有GPO
    Write-Host "`n[GPO列表]" -ForegroundColor Yellow
    $gpos = Get-GPO -All -Domain $domain
    foreach ($gpo in $gpos) {
        Write-Host "  GPO名称: $($gpo.DisplayName) | GPO ID: $($gpo.Id)"
    }

    # 输出该域的所有OU
    Write-Host "`n[OU列表]" -ForegroundColor Yellow
    $ous = Get-ADOrganizationalUnit -Filter * -Properties Name -Server $domain
    foreach ($ou in $ous) {
        Write-Host "  OU名称: $($ou.Name) | OU路径: $($ou.DistinguishedName)"
    }
}

脚本说明

  • 用Get-GPO直接获取指定域的GPO,避免COM对象的参数复杂度,更稳定可靠。
  • 用Get-ADOrganizationalUnit获取域内所有OU,-Filter *表示获取全部OU,可根据需求修改筛选条件(如排除特定OU)。
  • 加入颜色区分输出层级,提升可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:47:07