我正在尝试(我认为是)一个简单的脚本,让网络上的所有机器进行时间重新同步(我知道他们会自己做这个)。我创建了以下脚本:
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计算机的组合。知道为什么它从脚本而不是命令行失败了吗?
答案 0 :(得分:3)
通常会出现这种情况,因为$computer.name
被解析为$computer+".name"
,即使它可以从echo
命令正确地发出。
我的建议是创建[string]
并将$computer.name
的值分配给它:
[string]$compname = $computer.name
cmd /c w32tm /resync /nowait /computer:$compname