次の方法で共有


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が存在しない場合は、CurrentUserAllUsers、および $PSHOME モジュール パスを結合します
  • PSModulePathが存在する場合:
    • PSModulePath$PSHOMEモジュールパスが含まれている場合:
      • allUsers モジュール パスは、モジュール パス $PSHOME 前に挿入されます
    • 然も無くば:
      • ユーザーが意図的にPSModulePathの場所を削除したので、定義されている$PSHOMEを使用するだけです

CurrentUser モジュール パスには、ユーザー スコープ$Env:PSModulePathが存在しない場合にのみプレフィックスが付けられます。 それ以外の場合は、ユーザー スコープ $Env:PSModulePath が定義どおりに使用されます。

モジュールの検索動作

PowerShell は、モジュール (または.psd1) ファイルを.psm1PSModulePath 内の各フォルダーを再帰的に検索します。 この検索パターンにより、同じモジュールの複数のバージョンを異なるフォルダーにインストールできます。 次に例を示します。

    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)

関連項目