6

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 のボックスで試してみました (同じ結果)。

4

4 に答える 4

4

psexec コマンドでこれを試してください。応答を待たないように「-d」を含め、psexec の直後にコンピューター変数を配置してください。

d:\eps\pstools\psexec "\\$($computer)" /accepteula -u $userid -p $password -d cmd /c $command
于 2012-08-27T22:22:37.957 に答える
0
$computerList = Get-Content "D:\Data\serverlist.txt"      
$sb = 
{ 
    param($name)
        }
            $computer = $name
            $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 $computerLinst) {
    Start-Job $sb -ArgumentList $computer
}
于 2013-12-18T05:24:45.410 に答える
0

-accepteula パラメーターを psexec のように試してください

d:\eps\pstools\PsExec.exe -accepteula -u $userid  -p $password

から

于 2010-07-01T13:49:29.713 に答える