0

1つのファイル (ホスト名を含む) を 10 個のファイルに分割し、各ファイルのホスト名に対して ping (つまり、powershell test-connection コマンド) を実行するプロセスを高速化するために、start-job コマンドを使用して各ファイルのホスト名を処理しました。start-job コマンドを削除すると、スクリプトは必要に応じて正常に動作します。しかし、start-job コマンドを使用すると、「scriptblock」内で使用される配列が目的の出力を返しません。代わりに、空のままです。以下はスクリプトの一部です (1 つのファイルのみを処理する場合)。ガイドしてください、ここで何が欠けていますか?

Start-Job -Name "Ping-Part-1" -ScriptBlock {
    foreach ($Comp1 in $file_part1_content) {
        If (test-Connection -ComputerName $Comp1 -Count 1 -Quiet) {
                $project1 = Create-New-Object
                $project1.AliveStatus = "Alive"
                $project1.Hostname = $Comp1
                $resultsarray_file1 += $project1
            }
            Else {
                $project1 = Create-New-Object
                $project1.AliveStatus = "Not Alive"
                $project1.Hostname = $Comp1
                $resultsarray_file1 += $project1
            }
        }
    }
4

1 に答える 1

0

これにはいくつか問題があります。デフォルトでは、ジョブ内で使用する変数は、powershell セッション内では使用できません (その逆も同様です)。したがって、複数の問題があります。ジョブに変数を入れておらず、ジョブから取得していません。

また、開始ジョブを間違った場所に置きました。foreach ループ全体を含む 1 つのジョブを開始しています。各コンピューターを個別に処理することを想定しています。そのため、foreach ループ内でジョブを開始する必要があります。

私はあなたのシナリオに合ったブログ投稿をしばらく前に書きました。ここで見つけることができます。

于 2016-12-16T13:17:26.277 に答える