如何将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
相关产品推荐
相关产品推荐

