2017-11-09 20 views
0

私は2つのpowershellスクリプト(A.ps1とB.ps1)を持っています。他のpowershellのスクリプトを同期して実行中

スクリプトA.ps1からスクリプトB.ps1を呼び出したいが、B.ps1を呼び出した後にA.ps1を実行させ、B.ps1がB.ps1の実行を終了するのを待たないようにする非同期の方法で)。

どのように達成できますか? は、私が試した:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& 'C:\scripts\B.ps1'" 

それは、スクリプトBが完了するまで待つようにスクリプトAが発生します。

私も試してみました:

Start-Process 'C:\scripts\B.ps1' 

しかし、このコマンドレットのすべての私のマシンでは動作しません何らかの理由で(それが実際に「どのようにして、このファイルを開きますか?」ウィンドウを開き、無問題私はそれだけでこのウィンドウを示す保つ何を選ぶか)

私はPowerShellのバージョン5.1

おかげで、

ノーム

を使用しています
+1

'Start-Job'を使用している可能性があります:' Start-Job -FilePath "c:\ scripts \ B.ps1" ' – Manu

答えて

1

これらは、スクリプトの例です:

私はB.ps1はメモ帳を起動した後、5秒待っていても、A.ps1はまだ第二のタイマによって、第2表示し続けていることを示すために、スリープタイマーを設定しており、 B.ps1が完了するのを待つことはありません。

A.ps1:(第10までによりタイマ秒表示)

1..10 | ForEach-Object { 
    Start-Sleep -Seconds 1 
    Write-Host $_ 
    if($_ -eq 3){ 
     Start-Job -FilePath .\B.ps1 
    } 
} 

B.ps1:(メモ帳を起動する)

Start-Process notepad 
Start-Sleep -Seconds 5 

実施例4を参照してくださいthis link。あなたのスクリプトの先頭に

+0

応答してくれてありがとうございます、動作するはずですが、 'start-job'を呼び出すと、A.ps1はそれを実行し続けます(それは必要です)が、start-jobコマンドレットの後のタスクマネージャーでpowershellを見ることができます。exeプロセスのオープンとクローズは3秒後に実行がはるかに長くなるように(約2分)、どうすればこの問題が発生するのかを確認することができます。 – Noam

+0

B.ps1のみを開始し、ジョブ内では開始せず、何が起こるかを確認します。 A.ps1とB.ps1で何をしたのか分かりません。しかし、私はあなたの2つのスクリプトを非同期に開始することができますようにupvoteと私の答えを受け入れるようにマークすることができます。別の問題がある場合は、別の質問を開始する必要があります。 – Manu

0

:次に

$Job = Start-Job -FilePath 'C:\Path\To\Script.ps1'; 
#Script continues here 

、スクリプトは、スクリプトの終了時に出力、持っている場合:

:スクリプトが出力を持っていなかった場合は

$Output = Wait-Job $Job | Receive-Job; 
Remove-Job $Job; 
# Do whatever with $Output 

Wait-Job $Job | Remove-Job; 

明らかに、エラーのチェックや修正は一切ありません。ジョブは、失敗した状態にあるか、エラーを返す可能性があります。理想的には、それを処理したいと思うでしょう。個々のコマンドの詳細は、Get-Help about_JobsGet-Help about_Job_Details、およびGet-Helpの項目で確認できます。

関連する問題