前提・実現したいこと
PowerShellの質問です。教えてください。
メイン側のa.ps1から、b.ps1を呼びます。
呼ばれたb.ps1のループ処理で、3つのexeを実行するつもりが
例えば、2個目でエラーになったら、そこでループ処理を抜けて、
リターンコードに、エラーコードを入れて呼出し側a.ps1に値を返す
ということがしたいのですが、やはりループからうまく抜けられず、
breakと書くと、a.ps1にも戻らず終わってしまいます。
2個目でこけても、3個ともうまくいってもちゃんとリターンコードに値を入れて
呼出し側a.ps1に値を返すには、どのようにしたらいいのでしょうか。
該当のソースコード
【メイン側で以下のように呼び出す】 C:\temp\TestControl.ps1 echo "次のエラーコードで終了しましたーーーーーー>:$env:tmp_error_code" 【呼び出され側 TestControl.ps1】 $env:exe_error_code = 0 #初期化 # 指定したIF_IDに一致したデータを対象にする #---------------------------------------------------------- # csvの読込条件の設定 $csv_filter = { return ($_."IF_ID" -eq "$if_id") } #---------------------------------------------------------- #ファイル 読込 ループ Get-Content $InputFile | ConvertFrom-CSV | Where-Object $csv_filter | ForEach-Object { if ($_."IF_ID" -eq $global:if_id){ echo `n echo "ループして、処理を実行します。" echo `n $ifid = $_."IF_ID" $job = $_."DMXジョブ" $in_csv = $_."入力ファイル" $out_wk_table = $_."WK_出力テーブル" echo " IF_ID :$ifid" echo " DMXジョブ : $job" echo " 入力ファイル : $in_csv" echo " 出力ファイル : $out_wk_table" 実行コマンド.exe 2>> .\tmp_log.log echo "LASTEXITCODE : $LASTEXITCODE" } else{ echo "+++該当するIF_ID、存在しません。" } #終了コードからの処理振り分け switch($LASTEXITCODE){ 0{$level = "I" ;$msg = "正常終了" ;} 100{$level = "W" ;$msg = "警告終了" ;} 111{$level = "E" ;$msg = "異常終了" ;} #タスク自体が実行できなかった場合にデフォルト値を出力 default{$level = "F" ;$msg = "致命的な異常で終了";} } #終了コードの最大値保持 if(($env:exe_error_code -lt $LASTEXITCODE) -or(env:$exe_error_code -eq $null)){ $env:exe_error_code = $LASTEXITCODE } #後続処理の実行の有無判定 if($env:exe_error_code -ne 0){ echo "ジョブ実行は正常終了じゃなかった...." ←リターンコードを break ←【ループ処理を抜けたいだけなのに、呼び出し側のメイン側に戻らず勝手に終了してしまう!!!】 【どうすれば、ループの処理でエラーが発生したら、ループだけを抜けられる??】 } } echo "-------------------LOOP 終了です!-----------------" # else{ if($env:exe_error_code -eq 0){ echo "全てのDMのジョブは正常終了でした!" echo "次の処理をを実行" } # } echo `n return($env:exe_error_code) ←【ここで、エラーでも正常でも、呼び出し側のメイン側に戻り値を返して、戻りたい!!!】``` ### サンプルデータ カテゴリ,IF_ID,実行ジョブ,入力ファイル,WK_出力テーブル,出力テーブル データ取込,IF_000010,Torikomim_Data_001.exe,001.csv,TB_001_wk,TB_001 データ取込,IF_000010,Torikomim_Data_002.exe,002.csv,TB_001_wk,TB_002 データ取込,IF_000010,Torikomim_Data_002.exe,002.csv,TB_001_wk,TB_003
いまのままではあまりに見にくいので、編集して<code>ボタン、’’’の枠の中にコードを貼り付けてください

回答3件
あなたの回答
tips
プレビュー