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

如何将PowerShell中GPO Enabled布尔值转为Yes/No适配New-GPLink

GPO链接脚本中布尔值转Yes/No的解决方法

我编写了一个PowerShell脚本,用于将源OU中的GPO链接同步到目标OU,同时保持链接顺序不变。手动指定-LinkEnabled参数为Yes或No时脚本正常运行,但使用-LinkEnabled $targetGpoName.enabled时出现如下错误:

New-GPLink : Cannot bind parameter 'LinkEnabled'. Cannot convert value "True" to type "Microsoft.GroupPolicy.EnableLink".

问题原因是$targetGpoName.enabled返回的是True/False布尔值,而New-GPLink的-LinkEnabled参数要求传入Yes/No枚举值。以下是两种可行的解决方法:

方法1:条件映射布尔值到字符串

通过简单的条件判断,将布尔值转换为参数需要的Yes或No字符串:

$targetGpoNames = ((Get-GPInheritance -Target 'ou=systems,OU=OU1,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC').GpoLinks | Select-Object -property DisplayName, order, enabled)

foreach ($targetGpoName in $targetGpoNames)
{ 
    $linkStatus = if ($targetGpoName.enabled) { 'Yes' } else { 'No' }
    New-GPLink -Name $targetGpoName.Displayname -Order $targetGpoName.order -Target 'ou=systems,OU=OU2,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC' -LinkEnabled $linkStatus
}

方法2:直接转换为枚举类型

PowerShell支持将布尔值直接强制转换为Microsoft.GroupPolicy.EnableLink枚举类型(True对应Yes,False对应No),无需额外判断:

$targetGpoNames = ((Get-GPInheritance -Target 'ou=systems,OU=OU1,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC').GpoLinks | Select-Object -property DisplayName, order, enabled)

foreach ($targetGpoName in $targetGpoNames)
{ 
    New-GPLink -Name $targetGpoName.Displayname -Order $targetGpoName.order -Target 'ou=systems,OU=OU2,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC' -LinkEnabled [Microsoft.GroupPolicy.EnableLink]$targetGpoName.enabled
}

原脚本对比

正常运行的脚本:

$targetGpoNames = ((Get-GPInheritance -Target 'ou=systems,OU=OU1,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC').GpoLinks | Select-Object -property DisplayName, order, enabled)

foreach ($targetGpoName in $targetGpoNames)
{ 
New-GPLink -Name $targetGpoName.Displayname -order $targetGpoName.order -Target 'ou=systems,OU=OU2,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC' -LinkEnabled Yes
}

报错的脚本:

$targetGpoNames = ((Get-GPInheritance -Target 'ou=systems,OU=OU1,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC').GpoLinks | Select-Object -property DisplayName, order, enabled)

foreach ($targetGpoName in $targetGpoNames)
{ 
New-GPLink -Name $targetGpoName.Displayname -order $targetGpoName.order -Target 'ou=systems,OU=OU2,dc=DC1,dc=DC,dc=DC,dc=DC,dc=DC' -LinkEnabled $targetGpoName.enabled
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:27:45