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

如何用PowerShell批量禁用指定GPO的所有链接?

批量禁用指定GPO的所有链接

方法一:直接用Get-GPLink获取所有链接(推荐)

不用解析XML报告绕弯子,Get-GPLink可以直接返回目标GPO的所有链接信息,其中Target属性刚好是Set-GPLink需要的LDAP识别名格式。直接遍历执行禁用操作即可:

$gpoName = 'Test-Do-Not-Use'
# 获取该GPO的所有链接记录
$gpoLinks = Get-GPLink -Name $gpoName

foreach ($link in $gpoLinks) {
    # 禁用对应路径的GPO链接
    Set-GPLink -Name $gpoName -Target $link.Target -LinkEnabled No -Confirm:$false
    Write-Host "已禁用GPO '$gpoName' 在路径: $($link.Target) 的链接"
}

方法二:转换SOMPath为LDAP识别名

如果坚持用GPOReport的XML输出,需要把contoso.com/MyOU格式转换成ou=MyOU,dc=contoso,dc=com,可以通过字符串拆分重组实现:

$gpoName = 'Test-Do-Not-Use'
[xml]$gpoReport = Get-GPOReport -Name $gpoName -ReportType Xml
$links = $gpoReport.GPO.LinksTo

foreach ($link in $links) {
    $somPath = $link.SOMPath
    # 拆分域名和OU路径两部分
    $domainPart, $ouPart = $somPath -split '/', 2

    # 把域名转换成dc=xxx格式
    $dcSegments = $domainPart -split '\.' | ForEach-Object { "dc=$_" }
    $domainDn = $dcSegments -join ','

    # 处理OU路径:从右到左拆分,转成ou=xxx格式后拼接
    if (-not [string]::IsNullOrEmpty($ouPart)) {
        $ouSegments = $ouPart -split '/' | Reverse | ForEach-Object { "ou=$_" }
        $ouDn = $ouSegments -join ','
        $targetPath = "$ouDn,$domainDn"
    }
    else {
        # 若SOMPath只有域名,说明链接在域根节点
        $targetPath = $domainDn
    }

    # 执行禁用操作
    Set-GPLink -Name $gpoName -Target $targetPath -LinkEnabled No -Confirm:$false
    Write-Host "已禁用GPO '$gpoName' 在路径: $targetPath 的链接"
}

补充说明

  • 方法一更简洁可靠,Get-GPLink直接返回合规的Target值,避免了字符串转换可能遇到的特殊字符异常问题。
  • 方法二的转换逻辑支持多层OU(比如contoso.com/部门/技术部会转为ou=技术部,ou=部门,dc=contoso,dc=com)和域根链接场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 23:54:52