ja-JP/about_PSModulePath.help.txt
|
TOPIC about_PSModulePath 簡単な説明 $Env:PSModulePath 環境変数の目的と使い方を説明します。 詳細な説明 $Env:PSModulePath 環境変数には、フォルダーの場所の一覧が含まれます。 PowerShell は、モジュールとリソースを見つけるために、各フォルダーを 再帰的に検索します。PowerShell は各フォルダーを再帰的に検索し、 モジュールファイル (.psd1 または .psm1) を探します。 既定の有効な場所 既定では、$Env:PSModulePath の有効な場所は次のとおりです。 CurrentUser スコープ Windows: $HOME\Documents\PowerShell\Modules (実際のパスは [Environment]::GetFolderPath('MyDocuments') で確認 できます) Windows 以外: $HOME/.local/share/powershell/Modules AllUsers スコープ Windows: $Env:ProgramFiles\PowerShell\Modules Windows 以外: /usr/local/share/powershell/Modules 組み込みモジュール $PSHOME\Modules 注: アプリケーションは、$Env:PSModulePath を自動的に更新せずに、 他のディレクトリ (Windows の Program Files など) にモジュールを インストールする場合があります。 Windows PowerShell 5.1 の既定の場所 Windows PowerShell 5.1 の既定の場所は次のとおりです。 CurrentUser スコープ $HOME\Documents\WindowsPowerShell\Modules AllUsers スコープ $Env:ProgramFiles\WindowsPowerShell\Modules 組み込みモジュール $PSHOME\Modules (これは $Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules です) PowerShell による PSModulePath の構築 $Env:PSModulePath の値は、PowerShell の起動のたびに構築されます。 値は、PowerShell のバージョンや起動方法によって異なります。 Windows PowerShell の起動ロジック - PSModulePath が存在しない場合: CurrentUser、AllUsers、$PSHOME の 各モジュールパスを結合します。 - PSModulePath が存在する場合: - $PSHOME のパスが含まれる場合: $PSHOME のパスの前に AllUsers の パスを挿入します。 - $PSHOME のパスが含まれない場合: 利用者が意図的に削除したと みなし、そのまま使用します。 CurrentUser のモジュールパスは、User スコープの $Env:PSModulePath が 存在しない場合にのみ先頭に追加されます。 PowerShell 7 の起動 (Windows) PSModulePath は PATH 環境変数と同様に扱われます。 1. User スコープの PSModulePath を取得します。 2. プロセスが継承した PSModulePath と比較します。 - 同じ場合: PATH のセマンティクスに従い、AllUsers の PSModulePath を末尾に追加します。 - 異なる場合: 明示的に変更されたものとみなし、AllUsers のパスを 追加しません。 3. PowerShell 7 の User、System、$PSHOME のパスをこの順で先頭に 追加します。 - powershell.config.json に User スコープまたは System スコープの PSModulePath が含まれる場合は、既定値ではなくそれらを使用します。 PowerShell 7 の起動 (Windows 以外) Windows 以外のプラットフォームには User/System の区別がありません。 PSModulePath は継承され、PowerShell 7 固有のパスがまだ定義されて いなければ先頭に追加されます。 PowerShell 7 から Windows PowerShell を起動する場合 $Env:PSModulePath の値が WinPSModulePath にコピーされ、次の変更が 加えられます。 - PowerShell 7 の User モジュールパスを削除します。 - PowerShell 7 の System モジュールパスを削除します。 - PowerShell 7 の $PSHOME モジュールパスを削除します。 これにより、PowerShell 7 のモジュールが Windows PowerShell に 読み込まれるのを防ぎます。 Windows PowerShell から PowerShell 7 を起動する場合 PowerShell 7 の起動は通常どおり進み、Windows PowerShell が追加した パスを継承します。PowerShell 7 固有のパスが先頭に追加されるため、 機能上の問題は発生しません。 モジュールの検索動作 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 は最も高いバージョン番号を読み込みます。特定の バージョンを読み込むには、Import-Module の FullyQualifiedName パラメーターを使用します。 PSModulePath の変更 一時的な追加 (現在のセッション) C:\Program Files\Fabrikam\Modules を一時的に追加するには、次の コマンドを使用します。 $Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules" 区切り文字には、Windows ではセミコロン (;) を、Windows 以外では コロン (:) を使用します。 Windows 以外での永続的な変更 すべてのセッションで反映させるには、上記のコマンドを PowerShell プロファイルに追加します。 Windows での永続的な変更 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) 関連項目 about_Modules about_Windows_PowerShell_Compatibility Import-Module ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |