- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PowershellでCLIとISEの結果が違う)
PowershellでCLIとISEの結果が違う
このQ&Aのポイント
- PowershellでCLIとISEの実行結果に差異があります。原因と解決策を探しています。
- ISEでスクリプトを作成すると正しい結果が得られますが、コンソールで実行すると異なる結果が表示されます。
- Powershellのバージョンは4.0で、この差異の原因を特定したい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
調べてみたところ、スコープの問題でした。 「Windows PowerShell: スクリプト作成の短期集中講座 - TechNet」(http://technet.microsoft.com/ja-jp/magazine/hh551144.aspx)によると、 >ISE では、スクリプトは、グローバル スコープで実行されますが、通常のシェルのコンソールでは、スクリプトごとにスコープが設定されます。 とのことです。 つまり、1行目の「$a = 1」が、ISEではグローバルスコープで、ISE以外からの実行ではスクリプトスコープ(?)になります。 1行目を「$global:a = 1」にすればPowerShellのコマンドライン。 「PowerShell: スコープ」(http://mtgpowershell.blogspot.jp/2010/06/blog-post_21.html) も参考になります。
その他の回答 (1)
- queuerev2
- ベストアンサー率78% (96/122)
回答No.2
No.1です。 お礼をいただきありがとうございます。 よく見たら回答が途中で切れておかしな文になっていました。 もう不要かもしれませんが念のために書くと 1行目を「$global:a = 1」にすればPowerShellのコマンドラインとISEで動作が同じになります。 と書くつもりでした。 >つまりglobal:付けた変数には全てglobal:付けておけと言う事ですかね。 そういうことなのでしょうね。 >正直ISEもコンソールと同じ動きであって欲しいです。 同感です。
質問者
お礼
途中で切れていた件は大丈夫です。 やはりglobalを付けとくべきなのですね。 とりあえず解決策が見つかってよかったです。 二度も回答有難うございました。
お礼
$global:aに変更したところ動きました。なるほどスコープの問題でしたか。 つまりglobal:付けた変数には全てglobal:付けておけと言う事ですかね。 正直ISEもコンソールと同じ動きであって欲しいです。 有難うございました。