質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

3395閲覧

PowerShell スクリプトブロック内の変数を取得する方法

eri0315

総合スコア23

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/12/09 10:44

前提・実現したいこと

PowerShellのスクリプトブロック内で更新した変数を取得したいです。

該当のソースコード

PowerShell

1Start-Job{ 2 try{ 3 Invoke-WebRequest -Method Get -Headers @{Accept='application/json';} -Uri $using:URL -WebSession $using:Get_Session -OutFile $File_Path 4 } 5 catch{ 6 $error_message = $_.Exception.Message 7 } 8 } 9 10echo $error_message 11

試したこと

スクリプトブロック内での変数の引き渡しについて調べると、
ArgumentList パラメータや$usingなど、外からスクリプトブロックへの引き渡し方法は出ますが、
スクリプトブロック内で更新された変数を取得する方法が見当たりませんでした。
スクリプトブロックで更新された変数を外でも使える方法があれば、ご教示ください。

補足情報(FW/ツールのバージョンなど)

PSVersion 5.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Start-Jobコマンドレットは別プロセスでpowershellを起動して処理を実行しているイメージとなります。

プロセス間での情報の受け渡しとなるため、オブジェクトがシリアル化されるなど、やりとりには各種制約がかかります(そういった意味で普通のスクリプトブロックとは動作が異なります = 質問のタイトルがやや不適切)。

質問のように文字列のようなごく単純な情報であれば、Job自体の返り値として情報を出力し、Receive-Jobコマンドレットで受け取るのが簡単だと思われます。

PowerShell

1# 実行した Job オブジェクトを保管。 2$job = Start-Job -ScriptBlock { 3 try { 4 throw 'Job内でのエラー' 5 } catch { 6 # エラーメッセージを返す。 7 return $_.Exception.Message 8 } 9} 10 11# Job の実行が終わるまで待機し(Max 10秒)、結果を受け取る。 12[string]$error_message = 13 Wait-Job -Job $job -Timeout 10 | Receive-Job 14# 必要なくなった Job を削除。 15Remove-Job -Job $job 16 17# 結果の出力 18$error_message # => Job内でのエラー

もっとも、質問のようにエラーを確認したい場合は、Receive-Jobコマンドレットでホスト側にエラー情報も持ってこれます。

PowerShell

1# 実行した Job オブジェクトを保管。 2$job = Start-Job -ScriptBlock { 3 throw 'Job内でのエラー' 4} 5 6# Job の実行が終わるまで待機し(Max 10秒)、結果を受け取る。 7Wait-Job -Job $job -Timeout 10 | Receive-Job # ここでエラー(返り値無し) 8<# $Error[0] に以下のエラーが格納される 9Job内でのエラー 10 + CategoryInfo : OperationStopped: (Job内でのエラー:String) [], RuntimeException 11 + FullyQualifiedErrorId : Job内でのエラー 12 + PSComputerName : localhost 13#>

投稿2019/12/11 12:00

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問