2017-02-21 29 views
1

別のスクリプトファイルからスクリプト変数を参照する方法は2通りあります。ここでは、2つの基本的な例は、以下のとおりです。ドットソース変数とグローバル変数

1ドットソース
Variables.ps1

. .\Variables.ps1 
Copy-Item -Path $Source -Destination $Destination -Force 

2.グローバル変数
Variables.ps1

$Source = "source" 
$Destination = "dest" 

Execute.ps1

$Global:Source = "source" 
$Global:Destination = "dest" 

Execute.ps1

.\Variables.ps1 
Copy-Item -Path $Source -Destination $Destination -Force 

私が研究を行ったが、他の上のいずれかを使用するように決定的な理由を見つけるためにまだ持っています。これらの方法を使用する際に練習すべき制限や注意がありますか?どんな入力も大歓迎です。あなたの時間をありがとう。

EDIT:mklement0 @

は、グローバル変数の上にドットソーシングを使用する理由として素晴らしい答えを与えました。私はまだこの議論を開いたままにしたいと思う。別の視点がある場合、またはグローバル変数を使用する方がより有益であるとの説明があれば、それを聞いてそれに応じて議決権を行使することができます。ありがとうございました。

答えて

1

私はあなたが明示的にグローバル変数なしドット・ソーシング、を使用勧め(方法1):それは現在のスコープに変数を追加する意図的な努力を必要

その方法、。現在のセッションのグローバルスコープ(子スコープはスクリプトを呼び出す(ドットソーシングなし)で作成され、スクリプトブロックは&などで作成される)の現在のスコープに変数を追加することに注意してください。 )。一方

は、グローバル変数(方法2)を使用してセッション・グローバル変数を作成かかわらず呼び出し方法の、スクリプトのも偶発的、非ドットソース呼び出しがグローバル状態を変化させる終わるようになっています。

+0

興味深い。今では、変数スクリプトファイルが複数のスクリプトファイルによって参照されているときにドットソーシングを提案しますか?グローバル変数を使用する方がより有益でしょうか? – Ethilium

+1

@Ethilium:はい、これらのスクリプトファイルには、変数に依存するスクリプトのコンテキストで明示的にインテントを伝える変数ファイルが明示的にドットソースされ、望ましくない副作用が回避されます。正直なところ、私は、グローバル変数が正しい選択であるユースケースを認識していません(しかし、そのようなケースがある場合は、それらについて聞きたいです)。次の抽象レベルは、スクリプトが_import_する_module_を作成することです。 – mklement0

+1

よく説明して簡潔な答えをいただきありがとうございます。私はモジュールの作成についても詳しく見ていきます。正解とマークする。 – Ethilium