Я пытаюсь выполнить cmd-файл в списке из 48 компьютеров.Я не хочу выполнять и ждать завершения последовательно, потому что каждый cmd занимает около 10 минут.WinRM не вариант.Ни один не является WMI.PSExec - это вариант .... но я не могу заставить его работать внутри Start-Job.
Я делаю что-то вроде:
$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 v2.0 на сервере Server 2008r2. Я пробовал его на компьютере в домене 2, когда вошел в систему с ИД администратора домена (тот же результат).