从PowerShell脚本调用W32TM会产生RPC错误

时间:2013-11-20 20:32:01

标签: powershell windows-7 rpc

我正在尝试(我认为是)一个简单的脚本,让网络上的所有机器进行时间重新同步(我知道他们会自己做这个)。我创建了以下脚本:

Import-Module ActiveDirectory
$list = Get-ADComputer -filter * -SearchBase "OU=Computers,OU=CaymanPort,DC=CaymanPort,DC=com"
foreach ($computer in $list) {
  echo $computer.name

  if (Test-Connection -Cn $computer.name -BufferSize 16 -Count 1 -ea 0 -quiet ) {
    w32tm /resync /nowait /computer:$computer.name
  } else {
    echo DOWN!
  }
}

但是当我运行它时,我得到相同的“发生以下错误:RPC服务器不可用。(0x800706BA)”每台机器都出错。如果我从Powershell CLI运行相同的命令,它可以正常工作???

我尝试使用invoke-command cmdlet在远程计算机上运行w32tm命令,但这要求我为每台计算机启用了WinRM(我没有)。

我在Windows 7 64位计算机上运行该脚本,并针对Server 2003,2008和Windows 7 x32 / x64计算机的组合。知道为什么它从脚本而不是命令行失败了吗?

1 个答案:

答案 0 :(得分:3)

通常会出现这种情况,因为$computer.name被解析为$computer+".name",即使它可以从echo命令正确地发出。

我的建议是创建[string]并将$computer.name的值分配给它:

[string]$compname = $computer.name

cmd /c w32tm /resync /nowait /computer:$compname