2016-03-09 18 views
11

6つのスクリプトがあり、フォルダー上で実行する方法が増えています。複数のPowershellスクリプトを順番に実行する - フォルダーを作成する - スクリプトをマスタースクリプトに結合する

私はこのスレッドを見て、試しました - それは残念なことに動作しませんでした。マスター.PSファイルで

How to run multiple Scripts one by one in a powershell script

- 私は順序

'C:\Users\WP\Desktop\Scripts\1.ps1' 
'C:\Users\WP\Desktop\Scripts\2.ps1' 
'C:\Users\WP\Desktop\Scripts\3.ps1' 

などで順番に

実行スクリプトを実行する必要がパワーシェルスクリプトへのリンクを入れている

これも機能しませんでした。あなたの助けに感謝します - 私はすべてを捜索し、この問題を解決するように見えることはできません。

改訂:は、私は、各電力シェルスクリプトは、次のいずれかを実行する前に終了するのを待たなければならないと信じて - 私は次々に3つのスクリプトを実行しようとしたとき、私はエラーがあったとして - 何も時にスクリプト起こりませんでした

決勝実行されました -

を私はあなたの助けのすべてに感謝 - これは私が

マイフォルダをやっていることである物事をシンプルに保つために、以下のスクリプトを持っている - 私は、マスターを作成しました。 ps1とコードb

&"$PSScriptroot\1.ps1" 
&"$PSScriptroot\2.ps1" 
&"$PSScriptroot\3.ps1" 
&"$PSScriptroot\4.ps1" 
&"$PSScriptroot\5.ps1" 
&"$PSScriptroot\6.ps1" 

これで、すべてのファイルを含むフォルダにMaster.ps1を実行しました。これまでのところ、ジョブは実行されています。

+0

「あなたは次々に」と言うとき、次のスクリプトを実行する前に各スクリプトが完了するのを待つか、それともすべて同時に実行したいですか? – Bluecakes

+0

こんにちは、私はそれぞれが完了するのを待つべきです - それは理にかなっています。スクリプト1を実行してから2を、次に3を順番に実行してください:) – wp44

答えて

9

パスをハードコードしたくない場合は、マスターを作成できます。ps1は次のようになります:

&"$PSScriptroot\1.ps1" 
&"$PSScriptroot\2.ps1" 
&"$PSScriptroot\3.ps1" 

そして、同じディレクトリにあるスクリプトを探します。順次、あなたがそうのようStart-Process-Waitパラメータを使用することができ、複数のスクリプトを実行するには

+0

'$ PSScriptroot'はいつもそこにありましたか?私は 'Split-Path $ MyInvocation.MyCommand.Definition'でスクリプトのルートを解析してきました。 – TheMadTechnician

+0

こんにちはMj - 私は "C:\ Users \ WP \ Desktop \ Mjolinor \ 1.ps1" & "C:\ Users \ WP \ Desktop \ Mjolinor \ 2.ps1"でした。私は長いスクリプトを持っているかもしれませんが、テキストファイルのスパゲッティの結果を防ぐためにありがとうございます。 – wp44

+1

これらはデフォルトで順次実行されます。ジョブやランスペースを使用してマルチスレッドにする必要があります。 – mjolinor

0

マスターファイル内のファイルへのパスをハードコーディングしていますか?この場合

このようなものは、あなたのスクリプトはあなたの中にあることは、これを行うことができますパスを取得するには

Invoke-Expression "C:\Users\WP\Desktop\Scripts\1.ps1" 
Invoke-Expression "C:\Users\WP\Desktop\Scripts\2.ps1" 
Invoke-Expression "C:\Users\WP\Desktop\Scripts\3.ps1" 
+0

ハードコードはしたくないですが、パワーシェルのnoobとして、私はヒントを得ません。私がmaster.psを他のすべてのスクリプトと一緒にフォルダに入れたら、どうすればマスターから呼び出すことができますか?ありがとう、大尉ありがとう – wp44

1

を動作するはずです:

$MyInvocation.MyCommand.Definition 

C」のようなものが表示されます:Users \ユーザー\ WP \ Desktop \ Scripts \ Master.ps1 'と入力します。それで、Split-Pathを実行してフォルダだけを取得し、フォルダにGet-ChildItemを実行してファイルのリストを取得します。私たちは、おそらくそれは次のようになりますので、我々は、再帰ループで終わるしないように、マスタースクリプトを除外することをお勧めします:

$ScriptPath = Split-Path $MyInvocation.MyCommand.Definition 
Get-ChildItem "$ScriptPath\*.ps1" | Where{$_.FullName -ne $MyInvocation.MyCommand.Definition} 

その後、我々はちょうどForEach-Objectループをそれらを実行し、起動します以下のような呼び出し演算子&でスクリプト:

$ScriptPath = Split-Path $MyInvocation.MyCommand.Definition 
Get-ChildItem "$ScriptPath\*.ps1" | Where{$_.FullName -ne $MyInvocation.MyCommand.Definition} | ForEach-Object { & $_.FullName } 

編集:フム、右フィルタリングされませんでした。ここでは、マスタースクリプトを正しくフィルタリングする書き換えがあります。

$Master = Split-Path $MyInvocation.MyCommand.Definition -Leaf 
$ScriptPath = Split-Path $MyInvocation.MyCommand.Definition 
Get-ChildItem "$ScriptPath\*.ps1" | Where{$_.Name -ne $Master} | ForEach-Object { & $_.FullName } 
+0

TMD、ありがとう - 私は2つのスクリプトとそれらを呼び出すマスタースクリプトを置くフォルダで...何か起こった..しかし、それは後ループに入った。マスターで私はこれを入れました:$ MyInvocation.MyCommand.Definition $ ScriptPath =分割パス$ MyInvocation.MyCommand.Definition Get-ChildItem "$ ScriptPath \ *。ps1" |どこに{$ _。FullName -ne $ MyInvocation.MyCommand.Definition} | ForEach-Object {&$ _。FullName} - 正しく行ったかどうかわかりません。 – wp44

+0

申し訳ありませんが、最初のバージョンではマスタースクリプトが除外されていないため、スクリプトの一部として実行されていましたが、無限ループが作成されました。私は自分の答えを更新しました。 – TheMadTechnician

+0

ありがとう、これを私のパワーシェルツールボックスに追加します:) – wp44

0

$scriptsList = 
@(
    'C:\Users\WP\Desktop\Scripts\1.ps1' 
    'C:\Users\WP\Desktop\Scripts\2.ps1' 
    'C:\Users\WP\Desktop\Scripts\3.ps1' 
) 

foreach($script in $scriptsList) 
{ 
    Start-Process -FilePath "$PSHOME\powershell.exe" -ArgumentList "-command '& $script'" -Wait 
} 

PowerShellは、次のスクリプト

+0

こんにちはBC - パワーシェルの画面が表示されましたが、テキストファイルに変更はありませんでした。なぜか分かりません。 – wp44

1

理由PowerShellを実行する前に終了し、現在のスクリプトを待ちます画面がポップアップアップされている場合、引数-NoExitが設定されていません。後半の応答のため申し訳ありません

Start-Process "$pshome\powershell.exe" -ArgumentList "-NoExit", "-Command '& script'" -wait 

私はまた、問題に走ったと私はそれが仕事だったことを確認するために、それを解決することができたかthatsの:あなたのコードが正しく動作しているかどうかを確認するために、例として、以下を使用してください。次のように

また、私は、ファイル名を変更します。

$Scripts = 
@(
".\C:\Scripts\First.ps1" 
".\C:\Scripts\Second.ps1" 
".\C:\Scripts\Third.ps1" 
); 
2

だけで任意のコードエディタまたはテキストエディタを使用して、テキストファイルを作成し、次の例のバッチスクリプトを使用します。

start /min powershell.exe C:\your folder\script1.ps1 
start /min powershell.exe C:\your folder\script2.ps1 

保存それはscript.batとしてそれを開きます。これにより、2つのPowerShellスクリプトが同時に実行されます。

関連する問題