
ISEでスクリプト作成しています。
ISEは正常に動作していて正しい結果が得られるのですが、
同じスクリプトを実際にコンソールの方で実行すると違う結果になります。
例えば以下の様な簡単なスクリプトだと、
ISEでは100、コンソールでは1が表示されます。
-------------------------------------
$a = 1
function test{
$global:a = 100
}
test
Write-Host $a
Start-Sleep -s 10
-------------------------------------
原因と解決策はありますでしょうか?
$PSVersionTableで調べたところバージョンは4.0です。
No.1ベストアンサー
- 回答日時:
調べてみたところ、スコープの問題でした。
「Windows PowerShell: スクリプト作成の短期集中講座 - TechNet」(http://technet.microsoft.com/ja-jp/magazine/hh55 …)によると、
>ISE では、スクリプトは、グローバル スコープで実行されますが、通常のシェルのコンソールでは、スクリプトごとにスコープが設定されます。
とのことです。
つまり、1行目の「$a = 1」が、ISEではグローバルスコープで、ISE以外からの実行ではスクリプトスコープ(?)になります。
1行目を「$global:a = 1」にすればPowerShellのコマンドライン。
「PowerShell: スコープ」(http://mtgpowershell.blogspot.jp/2010/06/blog-po …) も参考になります。
参考URL:http://technet.microsoft.com/ja-jp/magazine/hh55 …
$global:aに変更したところ動きました。なるほどスコープの問題でしたか。
つまりglobal:付けた変数には全てglobal:付けておけと言う事ですかね。
正直ISEもコンソールと同じ動きであって欲しいです。
有難うございました。
No.2
- 回答日時:
No.1です。
お礼をいただきありがとうございます。
よく見たら回答が途中で切れておかしな文になっていました。
もう不要かもしれませんが念のために書くと
1行目を「$global:a = 1」にすればPowerShellのコマンドラインとISEで動作が同じになります。
と書くつもりでした。
>つまりglobal:付けた変数には全てglobal:付けておけと言う事ですかね。
そういうことなのでしょうね。
>正直ISEもコンソールと同じ動きであって欲しいです。
同感です。
途中で切れていた件は大丈夫です。
やはりglobalを付けとくべきなのですね。
とりあえず解決策が見つかってよかったです。
二度も回答有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- Chrome(クローム) Chromeの描画領域を2分割して異なるスクロール位置を同時に表示させることはできますか 1 2023/03/01 16:53
- Windows Vista・XP windows xp proが起動しなくなりました 10 2022/05/20 00:49
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) powershell で書いたプログラムでcd が動かない 5 2023/04/08 14:47
- Excel(エクセル) ユーザー関数の自動計算(excel2003) 1 2023/02/06 06:46
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- PostgreSQL postgreSQLをbashで実行する際に「MORE」表示をなくす方法 1 2023/05/08 21:42
- 医学 二次医療圏の人口分布 1 2023/05/10 11:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SPREAD(GrapeCity)のセルにフォ...
-
メッセージボックスを前面に表...
-
Excelのマクロで実行時エラー”1...
-
初期フォーカスについて
-
コンボボックスの開いたリスト...
-
Chrome フォーカス時に枠が表示...
-
ウインドウの最前面表示
-
C#でButtonのフォーカス枠を消...
-
TreeViewを反転表示したままTex...
-
雷のようなアニメーションをウ...
-
FLASHムービーを1度だけ再生す...
-
ブログでswfファイルが文字化け...
-
PowershellでCLIとISEの結果が違う
-
ゲーム中の画面に白いフラッシ...
-
レーザのスポット径の計算式
-
スラッシュを固定表示したまま...
-
[化学基礎] μmのμはどうして...
-
TDSマジックランプシアター 箱...
-
無線LANルーターについて… 無線...
-
初期状態でのフォーカスの解除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスを前面に表...
-
SPREAD(GrapeCity)のセルにフォ...
-
C#でButtonのフォーカス枠を消...
-
Excelのマクロで実行時エラー”1...
-
コンボボックスの開いたリスト...
-
TDSマジックランプシアター 箱...
-
DataGridViewで入力チェック後...
-
Chrome フォーカス時に枠が表示...
-
初期フォーカスについて
-
レーザのスポット径の計算式
-
コンボボックスの三角を一時的...
-
DAMのデンモクの使い方
-
iMovieでのken burnsエフェクト...
-
[化学基礎] μmのμはどうして...
-
初期状態でのフォーカスの解除
-
雷のようなアニメーションをウ...
-
PowershellでCLIとISEの結果が違う
-
ComboBoxのフォーカスをはずす
-
フォトショのアクションを別のM...
-
除光液の正しい捨て方がわかり...
おすすめ情報