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
}
これにより、一連のジョブが作成されます....しかし、決して完了せず、それらのいずれかでReceive-Jobを実行すると、元に戻ります
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"
サーバー 2008r2 ボックスの Powershell v2.0 で開始スクリプトが実行される ドメイン管理者のユーザー ID でログインしているときに、domain2 のボックスで試してみました (同じ結果)。