about_PSModulePath
環境変数 $env:PSModulePath には、モジュールとリソースを検索するために検索されるフォルダーの場所の一覧が含まれています。 PowerShell は、各フォルダーでモジュール ( または ) ファイルを再帰的.psd1 に .psm1検索します。
既定では、 に割り当てられる有効な場所は次 $env:PSModulePath のとおりです。
システム全体の場所: これらのフォルダーには、PowerShell に含まれるモジュールが含まれています。 これらのモジュールは フォルダーに格納
$PSHOME\Modulesされます。 これは、管理モジュールがインストールWindows場所です。ユーザーがインストールしたモジュール: これらは、ユーザーによってインストールされたモジュールです。
Install-Moduleには Scope パラメーター があります。このパラメーターを使用すると、モジュールを現在のユーザーにインストールするか、すべてのユーザーにインストールするか指定できます。 詳細については、「 Install-Module」を参照してください。- このWindows、ユーザー固有の CurrentUser スコープの場所は フォルダー
$HOME\Documents\PowerShell\Modulesです。 AllUsers スコープの場所は です$env:ProgramFiles\PowerShell\Modules。 - システム以外Windows、ユーザー固有 の CurrentUser スコープの場所は フォルダー
$HOME/.local/share/powershell/Modulesです。 AllUsers スコープの場所は です/usr/local/share/powershell/Modules。
- このWindows、ユーザー固有の CurrentUser スコープの場所は フォルダー
さらに、Program Files ディレクトリなどの他のディレクトリにモジュールをインストールするセットアップ プログラムでは、その場所を の値に追加できます $env:PSModulePath。
注意
このWindows、ユーザー固有のPowerShell\Modules場所は、ユーザー プロファイルの Documents フォルダーにあるフォルダーです。 その場所の特定のパスは、Windowsのバージョンと、フォルダー リダイレクトを使用するかどうかによって異なります。 Microsoft OneDrive Documents フォルダーの場所を変更することもできます。 次のコマンドを使用して 、Documents フォルダーの場所を確認できます。 [Environment]::GetFolderPath('MyDocuments')
PowerShell PSModulePath の構築
の値は $env:PSModulePath 、PowerShell が開始されるごとに構築されます。
値は、PowerShell のバージョンと起動方法によって異なります。
Windows PowerShellスタートアップ
Windows PowerShell次のロジックを使用して、起動時に をPSModulePath構築します。
- が
PSModulePath存在しない場合は、**CurrentUser、**AllUsers、およびモジュールのパスを$PSHOME結合します - が
PSModulePath存在する場合:- にモジュール
PSModulePathパスが含$PSHOMEまれている場合:- AllUsers モジュール のパスは、モジュール パスの前に
$PSHOME挿入されます
- AllUsers モジュール のパスは、モジュール パスの前に
- 他:
- ユーザーが意図的
PSModulePathに場所を削除した後、定義されているを使用$PSHOMEするだけ
- ユーザーが意図的
- にモジュール
CurrentUser モジュール のパスは、ユーザー スコープが存在しない場合にのみ$env:PSModulePathプレフィックス付けされます。 それ以外の場合は、ユーザー スコープが $env:PSModulePath 定義された方法で使用されます。
PowerShell 7 の起動
たとえばWindowsほとんどの環境変数で、ユーザー スコープ変数が存在する場合、新しいプロセスでは、同じ名前のマシン スコープ変数が存在する場合にのみ、その値が使用されます。
PowerShell 7 では、 PSModulePath は、 で環境変数をPath処理する方法と同様にWindows。 このWindows、 Path は他の環境変数とは異なる方法で処理されます。 プロセスが開始すると、Windowsスコープとマシン Path スコープの が結合されますPath。
- ユーザー スコープを取得する
PSModulePath - 継承された環境変数を処理と
PSModulePath比較する- 同じ場合:
- 環境変数の セマンティクスの後に AllUsers
PSModulePathを末尾にPath追加します - このWindows
System32は、定義されたマシンから得PSModulePathたものなので、明示的に追加する必要はないので、
- 環境変数の セマンティクスの後に AllUsers
- 異なる場合は、ユーザーが明示的に変更した場合と同様に扱い、 AllUsers を追加しない
PSModulePath
- 同じ場合:
- PS7 ユーザー、システム、およびパス
$PSHOMEをその順序でプレフィックスとして付く- に
powershell.config.jsonユーザー スコープが含まれている場合PSModulePathは、ユーザーの既定値ではなく、 を使用します。 - に
powershell.config.jsonシステム スコープが含まれている場合PSModulePathは、システムの既定値ではなく、 を使用します。
- に
Unix システムでは、User 環境変数と System 環境変数は分離されています。
PSModulePath が継承され、PS7 固有のパスにプレフィックスが付く (まだ定義されていない場合)。
PowerShell 7 Windows PowerShellの開始
この説明では、 と のWindows PowerShell を意味powershell.exeしますpowershell_ise.exe。
の値は $env:PSModulePath 、次の変更を加え WinPSModulePath 、 にコピーされます。
- PS7 のユーザー モジュール パスを削除する
- PS7 のシステム モジュール パスを削除する
- モジュール パス PS7 を
$PSHOME削除する
PS7 のパスは削除され、PS7 モジュールが読み込まれWindows PowerShell。 値WinPSModulePathは、値の開始Windows PowerShell。
PowerShell 7 のWindows PowerShell
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 はモジュールの最高バージョン番号を読み込む。 特定のバージョンを読み込むには、 Import-Module を FullyQualifiedName パラメーターと一緒に使用 します。 詳細については、「Import-Module」を参照してください。
PSModulePath の変更
ほとんどの場合、モジュールは既定のモジュールの場所にインストールする必要があります。 ただし、環境変数の値を変更する必要がある場合 PSModulePath があります。
たとえば、現在のセッションの にディレクトリ C:\Program Files\Fabrikam\Modules を一時的 $env:PSModulePath に追加するには、次のコマンドを入力します。
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
コマンドのセミコロン (;) は、リスト内のパスの前にあるパスから新しいパスを区切ります。 非構成プラットフォームWindows、コロン (:) によって環境変数内のパスの場所が分離されます。
非インスタンスでの PSModulePath のWindows
非接続環境内のすべてのPSModulePathセッションの値を変更するにはWindows前のコマンドを PowerShell プロファイルに追加します。
の PSModulePath のWindows
環境内のすべてのセッションPSModulePathの 値を変更するには、Windows格納されているレジストリ キーを編集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 += ';C:\Program Files\Fabrikam\Modules' # or '%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
ユーザー設定にパスを追加するには、レジストリ プロバイダーを から に変更 HKLM:\ します HKCU:\。
$key = (Get-Item 'HKCU:\SYSTEM\CurrentControlSet\Control\Session Manager').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';C:\Program Files\Fabrikam\Modules' # or '%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
関連項目
フィードバック
フィードバックの送信と表示