出现‘RPC Server is unavailable’错误但脚本仍正常工作的原因排查
你遇到的这种“操作生效但报错”的情况其实挺常见的,核心原因并不在DNS设置本身,而是出在WMI与RPC的后续交互环节,具体可以拆解成这几点:
WMI对象的RPC连接后续波动:你的脚本里
Get-WMIObject已经成功获取到网卡对象,SetDNSServerSearchOrder和SetDynamicDNSRegistration也完成了核心的DNS配置操作。但WMI在处理完这些调用后,会尝试维持RPC连接或者做对象清理操作,这时候如果目标服务器的RPC服务临时响应缓慢、或者网络出现短暂丢包,就会触发这个错误——但核心的DNS设置早已经执行完成了。WMI的异步状态反馈问题:WMI部分操作是异步执行的,虽然DNS配置已经生效,但在返回操作状态的环节,RPC通道出现了异常,导致错误被抛出而非成功信号。简单说就是“活儿干完了,但报信的时候出问题了”。
目标服务器RPC服务的短暂不稳定:目标服务器的**Remote Procedure Call (RPC)**服务可能在脚本执行过程中出现了瞬间的资源占用过高、或者短暂的重启波动,但DNS设置操作本身很快,在RPC服务出问题前就已经完成了,所以只有后续的WMI交互触发了错误。
给你两个实用的小建议:
- 手动去目标服务器的
services.msc里检查**Remote Procedure Call (RPC)**服务状态,确认它是正常运行的,没有频繁重启的记录。 - 换成更稳定的CIM cmdlets替代WMI试试,CIM对RPC的处理更可靠,脚本可以改成这样:
$computer = Get-Content C:\test\DNS_Server_Name.csv $NICs = Get-CimInstance Win32_NetworkAdapterConfiguration -ComputerName $computer | Where-Object {$_.IPEnabled -eq $true} Foreach($NIC in $NICs) { $DNSServers = "198.102.234.125","198.102.234.126" Invoke-CimMethod -InputObject $NIC -MethodName SetDNSServerSearchOrder -Arguments @{DNSServerSearchOrder=$DNSServers} Invoke-CimMethod -InputObject $NIC -MethodName SetDynamicDNSRegistration -Arguments @{FullRegistrationEnabled=$true} }
内容的提问来源于stack exchange,提问作者WeeWoo
相关产品推荐
相关产品推荐

