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