PowerShell创建AD OU成功但报‘对象名称语法错误’问题求助
问题原因与解决办法:Active Directory OU创建脚本抛出语法错误
问题原因
报错的核心问题出在$DEPOUDN的赋值逻辑:
你使用了Format-Table -HideTableHeaders | Out-String来提取OU的区分名(DN),但这两个命令是为控制台格式化输出设计的,会给结果添加多余的空格、换行符。最终$DEPOUDN字符串包含无效的空白字符,不符合AD路径的语法要求——虽然AD可能忽略了部分首尾空格完成了OU创建,但无效字符串仍会触发"The object name has bad syntax"错误。
解决办法
不需要用格式化输出命令提取数据,直接用Select-Object -ExpandProperty获取纯字符串格式的区分名,得到干净、符合要求的DN值。
修正后的完整脚本
$DEPsOUs = @("A","B","C","D") $createOUs = @('Users', 'Tester') ForEach ($DEPOU In $DEPsOUs) { # 直接提取纯DN字符串,跳过格式化输出步骤 $DEPOUDN = Get-ADOrganizationalUnit -Filter "Name -like '$DEPOU'" | Select-Object -ExpandProperty DistinguishedName # 可选:添加空值检查,避免找不到OU时执行后续命令报错 if (-not $DEPOUDN) { Write-Warning "未找到名为 $DEPOU 的OU,跳过当前循环" continue } ForEach ($createOU IN $createOUs) { New-ADOrganizationalUnit -Name $createOU -Path $DEPOUDN } }
额外优化建议
- 若需精确匹配OU名称,将过滤器改为
"Name -eq '$DEPOU'",减少误匹配概率; - 保留空值检查逻辑,能在找不到目标OU时及时给出提示,避免执行无效操作。
内容的提问来源于stack exchange,提问作者Niels van Dijk
相关产品推荐
相关产品推荐

