VMware客户机虚拟机通过Netdom加入自定义域失败,报错‘DNS name contains an invalid character’
VMware客户机虚拟机通过Netdom加入自定义域失败,报错‘DNS name contains an invalid character’
嗨,我仔细看了你的问题和脚本代码,马上发现了一个很容易踩坑的细节——函数参数传递顺序不匹配,这正是触发“DNS name contains an invalid character”错误的核心原因!
问题根源
先看你的Join-Domain函数定义:
Function Join-Domain ($VM, $HC, $GC, $OUPath, $Domain, $DomainUser, $DomainPassword) { $joind = "c:\windows\system32\netdom.exe join /d:$Domain $VM /OU:$OUPath /userd:$DomainUser /passwordd:$DomainPassword" Invoke-VMScript -VM $VM -HostCredential $HC -GuestCredential $GC -ScriptType bat -ScriptText $joind }
函数里的参数顺序是:$VM → $HC → $GC → $OUPath → $Domain → $DomainUser → $DomainPassword
但你实际调用函数时的传参顺序却是:
Join-Domain $VM $HostCred $GuestCred $Domain $OUPath $DomainUser $DomainPassword
这里你把$Domain和$OUPath的位置搞反了!这就导致netdom命令里的/d:$Domain实际上被赋值成了OU路径字符串OU=Computers,DC=matlockhome,DC=com——这个字符串里的逗号属于DNS名称不允许的无效字符,自然就抛出了错误。
解决方法
只需要修正调用函数时的参数顺序,把$OUPath和$Domain的位置调换即可:
Join-Domain $VM $HostCred $GuestCred $OUPath $Domain $DomainUser $DomainPassword
额外检查建议(可选)
为了确保万无一失,你还可以做这些验证:
- 手动在目标虚拟机里执行netdom命令,确认命令本身有效:打开命令提示符,运行
netdom join /d:MATLOCKHOME.com <你的VM名称> /OU:OU=Computers,DC=matlockhome,DC=com /userd:MATLOCKHOME\Administrator /passwordd:<你的密码>,看是否能正常加入域。 - 确认
$Domain变量的值格式正确:不管用NetBIOS名(MATLOCKHOME)还是完整FQDN(MATLOCKHOME.com)都可以,但要确保没有多余的空格或特殊字符。 - 验证
GuestCredential拥有足够的权限在虚拟机内执行系统级命令,HostCredential能正常访问ESXi主机并调用Invoke-VMScript。
备注:内容来源于stack exchange,提问作者Mark Matlock
相关产品推荐
相关产品推荐

