about_PSModulePath
Deskripsi singkat
Artikel ini menjelaskan tujuan dan penggunaan $env:PSModulePath
variabel lingkungan.
Deskripsi panjang
Variabel $env:PSModulePath
lingkungan berisi daftar lokasi folder yang dicari untuk menemukan modul dan sumber daya. PowerShell secara rekursif mencari setiap folder untuk file modul (.psd1
atau .psm1
) .
Install-Module
memiliki parameter Cakupan yang memungkinkan Anda menentukan apakah modul diinstal untuk pengguna saat ini atau untuk semua pengguna. Untuk informasi selengkapnya, lihat Install-Module.
Secara default, lokasi efektif yang ditetapkan $env:PSModulePath
adalah:
Lokasi di seluruh sistem: Folder ini berisi modul yang dikirim dengan PowerShell. Modul ini disimpan dalam
$PSHOME\Modules
folder. Ini juga merupakan lokasi tempat modul manajemen Windows diinstal.Modul yang diinstal dalam cakupan AllUsers disimpan di
$env:ProgramFiles\WindowsPowerShell\Modules
.Modul yang diinstal pengguna: Ini adalah modul yang diinstal dalam cakupan CurrentUser . Lokasi cakupan CurrentUser biasanya
$HOME\Documents\WindowsPowerShell\Modules
adalah folder . LokasiDocuments
spesifik folder bervariasi menurut versi Windows dan saat Anda menggunakan pengalihan folder. Selain itu, Microsoft OneDrive dapat mengubah lokasi folder AndaDocuments
. Anda dapat memverifikasi lokasi folder AndaDocuments
menggunakan perintah berikut:[Environment]::GetFolderPath('MyDocuments')
.Modul khusus aplikasi: Program penyiapan dapat menginstal modul di direktori lain, seperti
Program Files
direktori. Alat penginstal dapat menambahkan lokasi aplikasi ke nilai$env:PSModulePath
.
Konstruksi PowerShell PSModulePath
Nilai $env:PSModulePath
dibangun setiap kali PowerShell dimulai.
Nilai bervariasi menurut versi PowerShell dan bagaimana diluncurkan.
Startup Windows PowerShell
Windows PowerShell menggunakan logika berikut untuk membuat PSModulePath
saat startup:
- Jika
PSModulePath
tidak ada, gabungkan CurrentUser, AllUsers, dan$PSHOME
jalur modul - Jika
PSModulePath
ada:- Jika
PSModulePath
berisi$PSHOME
jalur modul:- Jalur modul AllUsers dimasukkan sebelum
$PSHOME
jalur modul
- Jalur modul AllUsers dimasukkan sebelum
- Lain:
- Cukup gunakan
PSModulePath
seperti yang didefinisikan karena pengguna sengaja menghapus$PSHOME
lokasi
- Cukup gunakan
- Jika
Jalur modul CurrentUser diawali hanya jika cakupan $env:PSModulePath
Pengguna tidak ada. Jika tidak, cakupan $env:PSModulePath
Pengguna digunakan sebagaimana didefinisikan.
Perilaku pencarian modul
PowerShell secara rekursif mencari setiap folder di file PSModulePath untuk modul (.psd1
atau .psm1
) . Pola pencarian ini memungkinkan beberapa versi modul yang sama diinstal di folder yang berbeda. Contohnya:
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
Secara default, PowerShell memuat nomor versi tertinggi modul saat beberapa versi ditemukan. Untuk memuat versi tertentu, gunakan Import-Module
dengan parameter FullyQualifiedName . Untuk informasi selengkapnya, lihat Import-Module.
Memodifikasi PSModulePath
Untuk sebagian besar situasi, Anda harus menginstal modul di lokasi modul default. Namun, Anda mungkin memiliki kebutuhan untuk mengubah nilai PSModulePath
variabel lingkungan.
Misalnya, untuk menambahkan C:\Program Files\Fabrikam\Modules
direktori untuk sementara waktu untuk $env:PSModulePath
sesi saat ini, ketik:
$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"
Untuk mengubah nilai PSModulePath
di setiap sesi, edit kunci registri yang PSModulePath
menyimpan nilai. Nilai PSModulePath
disimpan dalam registri sebagai string yang tidak tersedia . Untuk menghindari penyimpanan PSModulePath
nilai secara permanen sebagai string yang diperluas , gunakan metode GetValue pada subkunji dan edit nilai secara langsung.
Contoh berikut menambahkan C:\Program Files\Fabrikam\Modules
jalur ke nilai PSModulePath
variabel lingkungan tanpa memperluas string yang tidak diperluas.
$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)
Untuk menambahkan jalur ke pengaturan pengguna, ubah penyedia registri dari HKLM:\
ke 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)