Share via


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 挿入されます
    • 他:
      • ユーザーが意図的に場所を削除$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)

関連項目