我想在48台计算机的列表上执行一个cmd文件。我不想执行并等待顺序完成,因为每个cmd需要大约10分钟才能完成。 WinRM不是一种选择。 WMI也不是。 PSExec 是一个选项....但我似乎无法使其在开始工作内工作。PSExec永远不会完成,当开始工作内运行
我做这样的事情:
$sb = {
param
(
$computer = "serverw01",
$userid = "domain2\serviceid",
$password = 'servicepw',
$command = "cd /d d:\ && updateAll.cmd"
)
d:\eps\pstools\PsExec.exe -u $userid -p $password "\\$($computer)" cmd /c $command
}
foreach ($computer in Get-Content "D:\Data\serverlist.txt") {
Start-Job $sb -ArgumentList $computer
}
这就产生了一堆的工作....但从来没有完整的,如果我收到-工作对其中任何我回来
PS> get-job | receive-job -Keep
+ CategoryInfo : NotSpecified: (:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
PsExec v1.98 - Execute processes remotely
Copyright (C) 2001-2010 Mark Russinovich
Sysinternals - www.sysinternals.com
& $sb -computer "serverw01"
启动脚本使用PowerShell 2.0版在Ser运行:
如果我运行的功能等它执行就好了ver 2008r2 box 我用域管理员用户标识(同样的结果)登录时在域2中的一个盒子上试过它。
谢谢你Lizz。答案似乎是计算机价值的位置。我尝试了使用和不使用-d和/ acceptedteula(我早已接受eula :)),并且启用因素是确保计算机名值是PSEXEC之后的第一个值。 – 2012-08-27 23:09:15