IT プロフェッショナルのための技術情報サイト >
フォーラム ホーム
>
Windows Powershell フォーラム
>
Windows PowerShell
>
スクリプトで$errorの値を変数へと格納したい。
スクリプトで$errorの値を変数へと格納したい。
- お世話になります。
コンソール上で変数を格納する場合、
$test = $error
で$errorの値を$testへと格納できるのですが、.ps1ファイルに同様の記述をして
実行しても$testに書き込まれません。
書き込まれるためには何か条件があるのでしょうか。
ご存知の方いらっしゃいましたらご教授お願いします。
回答
- どのようなスクリプトかわからないので、
まとはずれかもですが・・・
例外など terminating error が発生してスクリプトが途中で中断していませんか?
trap を定義しているでしょうか。
あるいはスクリプト終了後にスクリプト外で $test にアクセスしているとして
変数スコープの問題でその $test は書きこまれた $test とは違う $test かもしれません。
スクリプトはどうやって起動しているでしょう。
すなおに起動するとスクリプト内の変数はコンソールからは見えません。
ドットソーシングで
. ./hoge.ps1
などと起動するとスクリプト終了後も残存します。
という2点が気になります。- 回答としてマーク服部清次MSFT, モデレータ2009年4月9日 1:37
自分の環境で、下記のようにして実験してみました。
1)コンソール上でわざとエラーを発生させる。
たとえばPS> a[Enter]<br/> 用語 'a' は、コマンドレット、関数、操作可能なプログラム、またはスクリプト ファイルとして認識されません。 用語を確認し、再試行してください。 発生場所 行:1 文字:1 + a <<<<
この時点で 自動変数 $error には上記のエラーメッセージが格納されている。
2) 下記スクリプトを test.ps1 として保存する
$test = $error
3)コンソールでスクリプトを実行する(kw-shingoさんが仰っているようにドットソーシングで実行)
PS> . ./test.ps1
4)$test 変数の内容を確認する
PS> $test[Enter]
上記手順で試したところ、$test変数にはきちんと $error の内容が代入されていました。
kw-shingoさんが仰っているように、途中で中断しているために代入されていない可能性もありますので、可能であれば、ソースを公開してみてはいかがでしょうか?- 編集済みHIROsDotNetMVP2009年4月2日 13:39見づらかったので修正
- 回答としてマーク服部清次MSFT, モデレータ2009年4月9日 1:37
すべての返信
- どのようなスクリプトかわからないので、
まとはずれかもですが・・・
例外など terminating error が発生してスクリプトが途中で中断していませんか?
trap を定義しているでしょうか。
あるいはスクリプト終了後にスクリプト外で $test にアクセスしているとして
変数スコープの問題でその $test は書きこまれた $test とは違う $test かもしれません。
スクリプトはどうやって起動しているでしょう。
すなおに起動するとスクリプト内の変数はコンソールからは見えません。
ドットソーシングで
. ./hoge.ps1
などと起動するとスクリプト終了後も残存します。
という2点が気になります。- 回答としてマーク服部清次MSFT, モデレータ2009年4月9日 1:37
自分の環境で、下記のようにして実験してみました。
1)コンソール上でわざとエラーを発生させる。
たとえばPS> a[Enter]<br/> 用語 'a' は、コマンドレット、関数、操作可能なプログラム、またはスクリプト ファイルとして認識されません。 用語を確認し、再試行してください。 発生場所 行:1 文字:1 + a <<<<
この時点で 自動変数 $error には上記のエラーメッセージが格納されている。
2) 下記スクリプトを test.ps1 として保存する
$test = $error
3)コンソールでスクリプトを実行する(kw-shingoさんが仰っているようにドットソーシングで実行)
PS> . ./test.ps1
4)$test 変数の内容を確認する
PS> $test[Enter]
上記手順で試したところ、$test変数にはきちんと $error の内容が代入されていました。
kw-shingoさんが仰っているように、途中で中断しているために代入されていない可能性もありますので、可能であれば、ソースを公開してみてはいかがでしょうか?- 編集済みHIROsDotNetMVP2009年4月2日 13:39見づらかったので修正
- 回答としてマーク服部清次MSFT, モデレータ2009年4月9日 1:37
- kw-shingoさん、HIROsDotNetさん返信有難うございます。
連絡が遅くなってしまい、大変申し訳ありませんでした。
お二人の意見を参考に検証してみたところ、無事問題は解決しました。
原因ですが、スクリプトを実行する際に「. ./test.ps1」では無く、「C:\test.ps1」で実行していたのが原因でした。
まさにお二人の指摘どうりでした。
曖昧な質問にもかかわらず、的確な指摘本当に有難うございました。 kakiage さん、
こんにちは!
フォーラム オペレーターの服部 清次です。
無事、問題が解決したとのことで何よりです!
今回、kw-shingo さんと HIROsDotNet さんが提供してくださった情報が問題解決につながったとのことですので、私の方で、お二方の回答に [回答としてマーク] のチェックを付けさせていただきました。
kakiage さんと同じ疑問を持たれた方がいらっしゃいましたら、ぜひこちらの情報を参照していただきたいと思いますので! (^^)
また何か疑問や質問がありましたら、ぜひ TechNet フォーラムに投稿してください。
これからも、よろしくお願いします。
それでは、また! (^_^)/
_____________________________________________
マイクロソフト株式会社 フォーラム オペレーター 服部 清次

