簡単な説明
この記事では、 $Env:PSModulePath 環境変数の目的と使用方法について説明します。
長い説明
$Env:PSModulePath環境変数には、フォルダーの場所の一覧が含まれています。 PowerShell は、モジュール (.psd1 または .psm1) ファイルを各フォルダーで再帰的に検索します。
既定では、 $Env:PSModulePath に割り当てられる有効な場所は次のとおりです。
-
CurrentUser スコープにインストールされているモジュールは、
$HOME\Documents\WindowsPowerShell\Modulesに格納されます。 -
AllUsers スコープにインストールされたモジュールは、
$Env:ProgramFiles\WindowsPowerShell\Modulesに格納されます。 -
$PSHOME\Modules$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modulesに格納されている Windows PowerShell に付属するモジュール。
PowerShell PSModulePath の構築
$Env:PSModulePathの値は、PowerShell が開始されるたびに構築されます。
値は、PowerShell のバージョンと起動方法によって異なります。
Windows PowerShell の起動
Windows PowerShell では、起動時に次のロジックを使用して PSModulePath を構築します。
-
PSModulePathが存在しない場合は、CurrentUser、AllUsers、および$PSHOMEモジュール パスを結合します -
PSModulePathが存在する場合:-
PSModulePathに$PSHOMEモジュールパスが含まれている場合:-
allUsers モジュール パスは、モジュール パス
$PSHOME前に挿入されます
-
allUsers モジュール パスは、モジュール パス
- 然も無くば:
- ユーザーが意図的に
PSModulePathの場所を削除したので、定義されている$PSHOMEを使用するだけです
- ユーザーが意図的に
-
CurrentUser モジュール パスには、ユーザー スコープ$Env:PSModulePathが存在しない場合にのみプレフィックスが付けられます。 それ以外の場合は、ユーザー スコープ $Env:PSModulePath が定義どおりに使用されます。
モジュールの検索動作
PowerShell は、モジュール (または.psd1) ファイルを.psm1PSModulePath 内の各フォルダーを再帰的に検索します。 この検索パターンにより、同じモジュールの複数のバージョンを異なるフォルダーにインストールできます。 次に例を示します。
Directory: C:\Program Files\WindowsPowerShell\Modules\PowerShellGet
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 8/14/2020 5:56 PM 1.0.0.1
d---- 9/13/2019 3:53 PM 2.1.2
既定では、PowerShell は、複数のバージョンが見つかった場合に、モジュールの最も高いバージョン番号を読み込みます。 特定のバージョンを読み込むには、Import-Module パラメーターでを使用します。 詳細については、「Import-Module」を参照してください。
PSModulePath の変更
ほとんどの場合、モジュールは既定のモジュールの場所にインストールする必要があります。 ただし、 PSModulePath 環境変数の値の変更が必要になる場合があります。
たとえば、現在のセッションのC:\Program Files\Fabrikam\Modulesに$Env:PSModulePath ディレクトリを一時的に追加するには、次のように入力します。
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
すべてのセッションで PSModulePath の値を変更するには、 PSModulePath 値を格納するレジストリ キーを編集します。
PSModulePath値は、unexpanded 文字列としてレジストリに格納されます。
PSModulePath値を expanded 文字列として永続的に保存しないようにするには、サブキーで GetValue() メソッドを使用し、値を直接編集します。
次の例では、展開されていない文字列を展開せずに、C:\Program Files\Fabrikam\Modules環境変数の値にPSModulePath パスを追加します。
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
ユーザー設定へのパスを追加するには、次のコードを使用します。
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
こちらも参照ください
PowerShell