2016-07-01 6 views
1

私は入力としていくつかのホスト名を取るpowershellスクリプトを持っており、IE11とOffice 2010をそれらにインストールします。現在は、これらを1つのホストにインストールしてから次のホストにインストールします。これは、1つのインストールが他のホストに影響を与えないため、時間を無駄にしてしまいます。だから私はそれを並行して走らせることができますか? TIY は、ここに私のコードです:powershellの動的配列の内容にparalellyコマンドを実行するには?

Write-Host "*************************************************" 
Write-Host "Welcome to the IE11/Office 2010 Remote Installer" 
Write-Host "*************************************************" 

$pclist = (Read-Host "Enter the pc names seperated by comma").Split(",") 

foreach ($pc in $pclist) { 
    Write-Host "-------------------------------------------------------------------------------------------------------" 
    Write-Host "Installing IE in $($pc). Please look for the exit code in the end. Exit code 0 means successful" 
    psexec -s \\$pc \\myserver\directory\PREREQ.BAT 
    psexec -s \\$pc \\myserver\directory\INSTALL.BAT 
    Write-Host "-------------------------------------------------------------------------------------------------------" 
    Write-Host "Installing office in $($pc). Please look for the exit code in the end. Exit code 0 means successful" 
    psexec -s \\$pc \\myserver\directory\INSTALL.BAT 
    Write-Host "-------------------------------------------------------------------------------------------------------" 
    Write-Host "RESTART THE PC TO APPLY CHANGES" 
} 

答えて

1

Start-JobWait-JobReceive-Jobを見てください。
Write-Hostステートメントを削除して、読みやすくしました。

​​

ジョブがまだRegister-EngineEvent経由で実行されている間、出力を受信するための更新:

$null = Register-EngineEvent -SourceIdentifier PcInstallMsg -Action { 
    Write-Host $Event.MessageData 
} 

$jobs = $pclist | % { 
    Start-Job -ScriptBlock { 
     $null = Register-EngineEvent -Forward -SourceIdentifier PcInstallMsg 

     $target = $args[0] 

     $null = New-Event -SourceIdentifier PcInstallMsg -MessageData "Install pre-req stuff to $target" 
     Start-Sleep -Seconds 2 

     $null = New-Event -SourceIdentifier PcInstallMsg -MessageData "Install main stuff to $target" 
     Start-Sleep -Seconds 2 

     $null = New-Event -SourceIdentifier PcInstallMsg -MessageData "Do cleanup bc I was messy on $target" 
     Start-Sleep -Seconds 2 

    } -ArgumentList $_ 
} 
while (-not (Wait-Job $jobs -Timeout 1)) { 
} 
$jobs | Receive-Job 

Unregister-Event -SourceIdentifier PcInstallMsg 
+0

期待通り、この作品、ありがとうございました。しかし、外出中に何が起こっているのかについて画面にコメントを表示する方法はありますか? pc1にIEをインストールする、pc2にIEをインストールするなど私は書き込みホストを置いていますが、プロセスが完了した後にのみ表示されます。 [恩赦、これは私が書いた最初のすべてのpowershellコードです] – tuxebin

+0

残念ながら、ジョブは多かれ少なかれ個別のPowerShellインスタンスです - 私の更新を見てください。 – DAXaholic

+0

ありがとうございますが、残念ながら、これは私が探しているものではありません。 install.batファイルが実行されているときに、何が起きているかをリアルタイムで出力します。この場合も同じことを印刷することを期待していました。それのための方法はありますか?現在、最後にすべてを印刷します – tuxebin

関連する問題