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ランキング
-
メッセージボックスを前面に表...
-
Chrome フォーカス時に枠が表示...
-
レーザのスポット径の計算式
-
Excelのマクロで実行時エラー”1...
-
C#でButtonのフォーカス枠を消...
-
コンボボックスの三角を一時的...
-
iPhoneのクイックアクションを...
-
SPREAD(GrapeCity)のセルにフォ...
-
MMDでAVI出力後の映像、音声に...
-
ASP.NETにてロストフォーカス処理
-
DataGridViewで入力チェック後...
-
雷のようなアニメーションをウ...
-
tabキーによるフォーカスをさせ...
-
TDSマジックランプシアター 箱...
-
入力項目にカーソルの位置づけ...
-
フォトショのアクションを別のM...
-
eclipseでフォーカスされた変数...
-
VB.NETとInputMan について
-
エフェクト?
-
VBEって行番号を表示するこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスを前面に表...
-
SPREAD(GrapeCity)のセルにフォ...
-
C#でButtonのフォーカス枠を消...
-
Excelのマクロで実行時エラー”1...
-
Chrome フォーカス時に枠が表示...
-
iPhoneのクイックアクションを...
-
コンボボックスの開いたリスト...
-
TDSマジックランプシアター 箱...
-
コンボボックスの三角を一時的...
-
レーザのスポット径の計算式
-
雷のようなアニメーションをウ...
-
DAMのデンモクの使い方
-
初期フォーカスについて
-
ASP.NETにてロストフォーカス処理
-
至急です。 トイレに行きたいな...
-
パソコンの液晶画面にマジック...
-
PowershellでCLIとISEの結果が違う
-
Eclipse Javaエディタでの選択...
-
手からビームって出せるんです...
-
除光液の正しい捨て方がわかり...
おすすめ情報