2016-05-01 5 views
0

私は以下のことを達成できない理由を理解することができません:エクスポートするpowershellモジュールの変数を初期化する

モジュール内に一連の変数を作成します。 モジュール内の関数に何かをさせ、親スコープ変数を変更した値で更新します。 モジュールを同じ関数を呼び出し、更新された値をモジュールをインポートしたスクリプトで使用可能にするスクリプトにインポートします。

例えば モジュールLibは、以下を有する:

$psVarx = -1 

function Init { 

    $psVarx = 2 
    $script:psVarx = $psVarx 
} 

Export-Member -variable $psVarx

モジュールを使用してスクリプトは、以下を有する:

Import-Module Lib -Force 

Init 

"psVarx is {0}" -f $psVarx 

受信出力が

ありますpsVarx is -1

質問は、モジュール内の変数のスクリプトスコープ付きコピーを更新した場合、モジュールを使用するスクリプトで変数の更新された値が表示されないのはなぜですか?問題がスコープと関係していると私は確信しています。私はここで何が欠けていますか?

モジュールを初期化し、モジュールを初期化し、モジュールをインポートするコードで使用できるように変数を設定する必要がある場合に、モジュール変数を初期化するために推奨される方法は何ですか?

この特定のケースでは、私はモジュール内で初期化し、新たに初期化された値をエクスポートすることを望む何十もの変数を持っています。

PowerShellのV3で
+0

あなたが投稿したコードが与えられていると、結果は私が期待していたように見えます。あなたのコードは 'Init'関数を呼び出すことはないので、' $ psVarx'を設定する唯一のコードは '$ psVarx = -1'の行です。 –

+0

私の間違いは、私が実際に持っているコードはInit関数を呼び出しています。投稿を更新できるかどうかがわかります。ありがとう。 –

答えて

0

次作品:

$psVarx = -1 

function Init { 

    $psVarx = 2 
    $script:psVarx = $psVarx 
} 
Export-ModuleMember -variable psVarx -Function init 

psVarx(ない$psVarx)が(エクスポート・メンバーではない)Export-modulememberに渡されることに注意してください。また、Initが指定されています。

関連する問題