2012-04-25 11 views
2

[.psm1ファイル]のネストされたモジュールをインポートするモジュールマニフェストファイル[.psd1ファイル]があります。モジュールの一つは、[.psm1]ファイルは次のようにグローバルスコープで定数変数を定義する -Powershell:Removeモジュールはネストされたモジュールで定義されたグローバル[定数]変数をアンロードしません。

set-variable -name DataDirectory -option Constant -value "DataSources" -scope global -description "Data Directory" 

私はPSD1ファイル&の削除モジュールを行うと、再度import-をしようPowerShellのISEの同一セッション内のモジュール、私は次のエラーを取得する -

+ set-variable <<<< -name DataDirectory -option Constant -value "DataSources" -scope global -description "Data Directory" 
    + CategoryInfo   : WriteError: (DataDirectory:String) [Set-Variable], SessionStateUnauthorizedAccessException 
    + FullyQualifiedErrorId : VariableNotWritable,Microsoft.PowerShell.Commands.SetVariableCommand 

ネストされたモジュールの1つに定義された変数がアンロードされていないことを意味しています。

明示的にremove-variableを実行する必要はありますか?私はremove-moduleがすべてをアンロードすると思った。

答えて

3

Remove-Moduleは、モジュールスコープで定義されたすべてをアンロードする。変数を定義したモジュールだけがそれを削除できます。モジュールがアンロードされると、グローバル変数は削除されません。また、モジュールスコープ外では、Remove-Variableで定数変数を削除することはできません。あなたがそれを作成しようとする前に変数が既に存在するかどうかをテストすることができます。

+0

あなたが言った - 変数を定義したモジュールだけがそれを削除できます。どうすればこれを達成できますか? –

+0

グローバルスコープとしてスコープしないでください。モジュールスコープで定義する必要があります。グローバル修飾子を削除するだけです。他のモジュールがアクセスできるようにするならば、別の解決策を見つける必要があります –

関連する問題