about_PSModulePath
簡単な説明
この記事では、環境変数の $env:PSModulePath
目的と使用方法について説明します。
詳細な説明
環境変数には $env:PSModulePath
、モジュールとリソースを検索するために検索されるフォルダーの場所の一覧が含まれています。 PowerShell は、各フォルダーでモジュール (.psd1
または .psm1
) ファイルを再帰的に検索します。
Install-Module
には、現在の ユーザーまたはすべてのユーザーにモジュールをインストールするかどうかを指定できる Scope パラメーターがあります。 詳細については、「Install-Module」を参照してください。
既定では、割り当てられる $env:PSModulePath
有効な場所は次のとおりです。
システム全体の場所: これらのフォルダーには、PowerShell に付属するモジュールが含まれています。 これらのモジュールはフォルダーに
$PSHOME\Modules
格納されます。 これは、Windows 管理モジュールがインストールされている場所でもあります。AllUsers スコープにインストールされているモジュールは、
$env:ProgramFiles\WindowsPowerShell\Modules
ユーザーがインストールしたモジュール: CurrentUser スコープにインストールされているモジュールです。 CurrentUser スコープの場所は通常、
$HOME\Documents\WindowsPowerShell\Modules
フォルダーです。 フォルダーの特定のDocuments
場所は、Windows のバージョンとフォルダー リダイレクトを使用する場合によって異なります。 また、Microsoft OneDrive はフォルダーの場所をDocuments
変更できます。 次のコマンド[Environment]::GetFolderPath('MyDocuments')
を使用して、フォルダーのDocuments
場所を確認できます。アプリケーション固有のモジュール: セットアップ プログラムは、ディレクトリなどの他のディレクトリにモジュールを
Program Files
インストールできます。 インストーラーは、アプリケーションの場所を次の$env:PSModulePath
値に追加できます。
PowerShell PSModulePath の構築
値 $env:PSModulePath
は、PowerShell が開始されるたびに構築されます。
この値は、PowerShell のバージョンと起動方法によって異なります。
Windows PowerShell の起動
Windows PowerShell では、起動時に次のロジックを使用して構築します PSModulePath
。
- 存在しない場合
PSModulePath
は、CurrentUser、AllUsers、およびモジュール パスを$PSHOME
結合します - 存在する場合
PSModulePath
:- モジュール パスが
$PSHOME
含まれている場合PSModulePath
:- AllUsers モジュール パスは、モジュール パスの前に
$PSHOME
挿入されます
- AllUsers モジュール パスは、モジュール パスの前に
- 他:
- ユーザーが意図的に場所を削除
$PSHOME
したので、定義どおりに使用PSModulePath
してください
- ユーザーが意図的に場所を削除
- モジュール パスが
CurrentUser モジュールのパスには、ユーザー スコープ$env:PSModulePath
が存在しない場合にのみプレフィックスが付けられます。 それ以外の場合、ユーザー スコープ $env:PSModulePath
は定義どおりに使用されます。
モジュールの検索動作
PowerShell は、PSModulePath 内の各フォルダーでモジュール (.psd1
または.psm1
) ファイルを再帰的に検索します。 この検索パターンにより、同じモジュールの複数のバージョンを異なるフォルダーにインストールできます。 次に例を示します。
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 は、複数のバージョンが見つかった場合に、モジュールの最も高いバージョン番号を読み込みます。 特定のバージョンを読み込むには、FullyQualifiedName パラメーターと共に使用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
、展開されていない文字列として レジストリに 格納されます。 値をPSModulePath
展開された文字列として永続的に保存しないようにするには、サブキーで GetValue メソッドを使用し、値を直接編集します。
次の例では、 C:\Program Files\Fabrikam\Modules
展開されていない文字列を PSModulePath
展開せずに、環境変数の値にパスを追加します。
$key = (Get-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
ユーザー設定へのパスを追加するには、レジストリ プロバイダーを次の値に HKLM:\
変更します HKCU:\
。
$key = (Get-Item 'HKCU:\').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
関連項目
PowerShell