about_PSModulePath
簡単な説明
この記事では、 $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
) ファイルを.psm1
PSModulePath 内の各フォルダーを再帰的に検索します。 この検索パターンにより、同じモジュールの複数のバージョンを異なるフォルダーにインストールできます。 次に例を示します。
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