• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PowershellでCLIとISEの結果が違う)

PowershellでCLIとISEの結果が違う

このQ&Aのポイント
  • PowershellでCLIとISEの実行結果に差異があります。原因と解決策を探しています。
  • ISEでスクリプトを作成すると正しい結果が得られますが、コンソールで実行すると異なる結果が表示されます。
  • Powershellのバージョンは4.0で、この差異の原因を特定したい。

質問者が選んだベストアンサー

  • ベストアンサー
  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.1

調べてみたところ、スコープの問題でした。 「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) も参考になります。

参考URL:
http://technet.microsoft.com/ja-jp/magazine/hh551144.aspx
omorinoya35234
質問者

お礼

$global:aに変更したところ動きました。なるほどスコープの問題でしたか。 つまりglobal:付けた変数には全てglobal:付けておけと言う事ですかね。 正直ISEもコンソールと同じ動きであって欲しいです。 有難うございました。

その他の回答 (1)

  • queuerev2
  • ベストアンサー率78% (96/122)
回答No.2

No.1です。 お礼をいただきありがとうございます。 よく見たら回答が途中で切れておかしな文になっていました。 もう不要かもしれませんが念のために書くと 1行目を「$global:a = 1」にすればPowerShellのコマンドラインとISEで動作が同じになります。 と書くつもりでした。 >つまりglobal:付けた変数には全てglobal:付けておけと言う事ですかね。 そういうことなのでしょうね。 >正直ISEもコンソールと同じ動きであって欲しいです。 同感です。

omorinoya35234
質問者

お礼

途中で切れていた件は大丈夫です。 やはりglobalを付けとくべきなのですね。 とりあえず解決策が見つかってよかったです。 二度も回答有難うございました。