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
- Windows 以外のシステムでは、AllUsers スコープにインストールされているモジュールは .
/usr/local/share/powershell/Modules
- Windows では、AllUsers スコープにインストールされているモジュールは .
ユーザーがインストールしたモジュール: Windows では、CurrentUser スコープにインストールされているモジュールは通常、フォルダーに
$HOME\Documents\WindowsPowerShell\Modules
格納されます。 フォルダーの特定のDocuments
場所は、Windows のバージョンとフォルダー リダイレクトを使用する場合によって異なります。 また、Microsoft OneDrive はフォルダーの場所をDocuments
変更できます。 次のコマンド[Environment]::GetFolderPath('MyDocuments')
を使用して、フォルダーのDocuments
場所を確認できます。Windows 以外のシステムでは、CurrentUser スコープにインストールされているモジュールがフォルダーに
$HOME/.local/share/powershell/Modules
格納されます。アプリケーション固有のモジュール: セットアップ プログラムは、Windows 上のフォルダーなどの他のディレクトリにモジュールを
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 7 の起動
Windows では、ほとんどの環境変数で、ユーザー スコープ変数が存在する場合、同じ名前のマシン スコープ変数が存在する場合でも、新しいプロセスでその値が使用されます。
PowerShell 7 では、 PSModulePath
Windows での環境変数の Path
処理方法と同様に扱われます。 Windows では、 Path
他の環境変数とは異なる方法で処理されます。 プロセスが開始されると、Windows はユーザー スコープとマシン スコープPath
Path
を組み合わせます。
- ユーザー スコープを取得する
PSModulePath
- 継承された環境変数をプロセスと
PSModulePath
比較する- 同じ場合:
- 環境変数のセマンティクスに 従って AllUsers
PSModulePath
を末尾にPath
追加する - Windows
System32
パスは、定義PSModulePath
されたコンピューターから取得されるため、明示的に追加する必要はありません
- 環境変数のセマンティクスに 従って AllUsers
- 異なる場合は、ユーザーが明示的に変更したかのように扱い、AllUsers を追加 しないでください
PSModulePath
- 同じ場合:
- PS7 ユーザー、システム、パスの
$PSHOME
プレフィックスをその順序で指定する- スコープが設定された
PSModulePath
ユーザーが含まれている場合powershell.config.json
は、ユーザーの既定値ではなく、これを使用します - システム スコープ
PSModulePath
が含まれている場合powershell.config.json
は、システムの既定値ではなく、これを使用します
- スコープが設定された
Unix システムでは、ユーザー環境変数とシステム環境変数が分離されていません。
PSModulePath
は継承され、まだ定義されていない場合は PS7 固有のパスにプレフィックスが付けられます。
PowerShell 7 から Windows PowerShell を起動する
この説明では、 Windows PowerShell は両方 powershell.exe
を意味します powershell_ise.exe
。
の $env:PSModulePath
値は、次の変更を加えてコピー WinPSModulePath
されます。
- PS7 のユーザー モジュール パスを削除する
- PS7 のシステム モジュール パスを削除する
- モジュール パスを PS7 から
$PSHOME
削除する
PS7 モジュールが Windows PowerShell に読み込まれないように、PS7 パスが削除されます。 この値は WinPSModulePath
、Windows PowerShell の起動時に使用されます。
Windows PowerShell から PowerShell 7 を起動する
PowerShell 7 の起動は、Windows PowerShell によって追加された継承パスが追加された状態でそのまま続行されます。 PS7 固有のパスにはプレフィックスが付いているため、機能上の問題はありません。
モジュールの検索動作
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"
コマンドのセミコロン (;
) は、新しいパスをリストの前のパスから分離します。 Windows 以外のプラットフォームでは、コロン (:
) によって環境変数内のパスの場所が区切られます。
Windows 以外での PSModulePath の変更
Windows 以外の環境のすべてのセッションの PSModulePath
値を変更するには、前のコマンドを PowerShell プロファイルに追加します。
Windows での PSModulePath の変更
すべてのセッションの 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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示