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.- Di Windows, modul yang diinstal dalam cakupan AllUsers disimpan di
$env:ProgramFiles\WindowsPowerShell\Modules
. - Pada sistem non-Windows, modul yang diinstal dalam cakupan AllUsers disimpan di
/usr/local/share/powershell/Modules
.
- Di Windows, modul yang diinstal dalam cakupan AllUsers disimpan di
Modul yang diinstal pengguna: Pada Windows, modul yang diinstal dalam cakupan CurrentUser biasanya disimpan di
$HOME\Documents\WindowsPowerShell\Modules
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')
.Pada sistem non-Windows, modul yang diinstal dalam cakupan CurrentUser disimpan di
$HOME/.local/share/powershell/Modules
folder .Modul khusus aplikasi: Program penyiapan dapat menginstal modul di direktori lain, seperti
Program Files
folder di Windows. Paket alat penginstal mungkin atau mungkin tidak menambahkan lokasi ke$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.
Startup PowerShell 7
Di Windows, untuk sebagian besar variabel lingkungan, jika variabel Cakupan pengguna ada, proses baru menggunakan nilai tersebut hanya meskipun variabel cakupan Mesin dengan nama yang sama ada.
Di PowerShell 7, PSModulePath
diperlakukan mirip dengan bagaimana Path
variabel lingkungan diperlakukan di Windows. Pada Windows, Path
diperlakukan berbeda dari variabel lingkungan lainnya. Ketika proses dimulai, Windows menggabungkan cakupan Pengguna dengan cakupan Path
Path
Mesin .
- Mengambil cakupan Pengguna
PSModulePath
- Bandingkan dengan memproses variabel lingkungan yang diwariskan
PSModulePath
- Jika sama:
- Tambahkan AllUsers
PSModulePath
ke akhir setelah semantikPath
variabel lingkungan - Jalur Windows
System32
berasal dari komputer yang ditentukanPSModulePath
sehingga tidak perlu ditambahkan secara eksplisit
- Tambahkan AllUsers
- Jika berbeda, perlakukan seolah-olah pengguna secara eksplisit memodifikasinya dan tidak menambahkan AllUsers
PSModulePath
- Jika sama:
- Awalan dengan Pengguna, Sistem, dan
$PSHOME
jalur PS7 dalam urutan tersebut- Jika
powershell.config.json
berisi pengguna yang terlingkupPSModulePath
, gunakan itu alih-alih default untuk pengguna - Jika
powershell.config.json
berisi sistem yang terlingkupPSModulePath
, gunakan itu alih-alih default untuk sistem
- Jika
Sistem Unix tidak memiliki pemisahan variabel lingkungan Pengguna dan Sistem.
PSModulePath
diwariskan dan jalur khusus PS7 diawali jika belum ditentukan.
Memulai Windows PowerShell dari PowerShell 7
Untuk diskusi ini, Windows PowerShell berarti dan powershell.exe
powershell_ise.exe
.
Nilai $env:PSModulePath
disalin ke WinPSModulePath
dengan modifikasi berikut:
- Menghapus PS7 jalur modul Pengguna
- Menghapus PS7 jalur modul Sistem
- Menghapus PS7
$PSHOME
jalur modul
Jalur PS7 dihapus sehingga modul PS7 tidak dimuat di Windows PowerShell. Nilai WinPSModulePath
digunakan saat memulai Windows PowerShell.
Memulai PowerShell 7 dari Windows PowerShell
Startup PowerShell 7 berlanjut apa adanya dengan penambahan jalur warisan yang ditambahkan Windows PowerShell. Karena jalur khusus PS7 diawali, tidak ada masalah fungsi.
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"
Titik koma (;
) dalam perintah memisahkan jalur baru dari jalur yang mendahuluinya dalam daftar. Pada platform non-Windows, titik dua (:
) memisahkan lokasi jalur dalam variabel lingkungan.
Memodifikasi PSModulePath di non-Windows
Untuk mengubah nilai PSModulePath
untuk setiap sesi di lingkungan non-Windows, tambahkan perintah sebelumnya ke profil PowerShell Anda.
Memodifikasi PSModulePath di Windows
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)
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk