Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Deskripsi singkat
Artikel ini menjelaskan tujuan dan penggunaan variabel lingkungan $Env:PSModulePath.
Deskripsi panjang
Variabel lingkungan $Env:PSModulePath berisi daftar lokasi folder. PowerShell secara rekursif mencari setiap folder untuk file modul (.psd1 atau .psm1).
Secara default, lokasi efektif yang ditetapkan ke $Env:PSModulePath adalah:
- Modul yang diinstal dalam cakupan CurrentUser:
- Di Windows, modul ini disimpan di
$HOME\Documents\PowerShell\Modules. Lokasi spesifik folderDocumentsbervariasi menurut versi Windows dan saat Anda menggunakan pengalihan folder. Selain itu, Microsoft OneDrive dapat mengubah lokasi folderDocumentsAnda. Untuk memverifikasi lokasi folderDocumentsAnda, jalankan gunakan perintah berikut:[Environment]::GetFolderPath('MyDocuments'). - Pada sistem non-Windows, modul ini disimpan di folder
$HOME/.local/share/powershell/Modules.
- Di Windows, modul ini disimpan di
- Modul yang diinstal dalam cakupan AllUsers:
- Di Windows, modul ini disimpan di
$Env:ProgramFiles\PowerShell\Modules. - Pada sistem non-Windows, modul ini disimpan di
/usr/local/share/powershell/Modules.
- Di Windows, modul ini disimpan di
- Modul yang dikirim dengan PowerShell disimpan di
$PSHOME\Modules.
Nota
Aplikasi yang menyertakan modul PowerShell dapat menginstal modul di direktori lain di Windows, seperti folder Program Files. Paket alat penginstal mungkin tidak menambahkan lokasi ke $Env:PSModulePath.
Lokasi default untuk Windows PowerShell 5.1 berbeda dari PowerShell 7.
- Modul yang diinstal dalam cakupan CurrentUser disimpan di
$HOME\Documents\WindowsPowerShell\Modules. - Modul yang diinstal dalam cakupan AllUsers disimpan di
$Env:ProgramFiles\WindowsPowerShell\Modules. - Modul yang dikirim dengan Windows PowerShell disimpan di
$PSHOME\Modules, yang$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules.
Konstruksi PowerShell PSModulePath
Nilai $Env:PSModulePath dibangun setiap kali PowerShell dimulai.
Nilainya bervariasi menurut versi PowerShell dan cara Anda meluncurkannya.
Startup Windows PowerShell
Windows PowerShell menggunakan logika berikut untuk membuat PSModulePath saat startup:
- Jika
PSModulePathtidak ada, gabungkan CurrentUser, AllUsers, dan jalur modul$PSHOME - Jika
PSModulePathmemang ada:- Jika
PSModulePathberisi jalur modul$PSHOME:-
jalur modul AllUsers dimasukkan sebelum jalur modul
$PSHOME
-
jalur modul AllUsers dimasukkan sebelum jalur modul
- lain:
- Cukup gunakan
PSModulePathseperti yang didefinisikan karena pengguna sengaja menghapus lokasi$PSHOME
- Cukup gunakan
- Jika
Jalur modul CurrentUser diawali hanya jika cakupan Pengguna $Env:PSModulePath tidak ada. Jika tidak, cakupan pengguna $Env:PSModulePath digunakan sebagaimana didefinisikan.
Startup PowerShell 7
Di Windows, untuk sebagian besar variabel lingkungan, jika variabel cakupan pengguna ada, proses baru hanya menggunakan nilai tersebut, bahkan ketika variabel cakupan mesin dengan nama yang sama ada. Jalur variabel lingkungan diperlakukan secara berbeda.
Di Windows, PSModulePath diperlakukan mirip dengan bagaimana variabel lingkungan Path diperlakukan.
Path diperlakukan berbeda dari variabel lingkungan lainnya. Ketika proses dimulai, Windows menggabungkan Path cakupan pengguna dengan Pathcakupan mesin .
- Mengambil
PSModulePathcakupan pengguna - Bandingkan dengan memproses variabel lingkungan
PSModulePathyang diwariskan- Jika sama:
- Tambahkan ke akhir setelah semantik variabel lingkungan
PSModulePath - Jalur windows
System32berasal dari komputer yang ditentukanPSModulePathsehingga tidak perlu ditambahkan secara eksplisit
- Tambahkan ke akhir setelah semantik variabel lingkungan
- Jika berbeda, perlakukan seolah-olah pengguna secara eksplisit memodifikasinya dan tidak menambahkan AllUsers
PSModulePath
- Jika sama:
- Awalan dengan jalur Pengguna, Sistem, dan
$PSHOMEPS7 dalam urutan tersebut- Jika
powershell.config.jsonberisiPSModulePathyang dilingkup pengguna , gunakan itu alih-alih default untuk pengguna - Jika
powershell.config.jsonberisi sistem yang terlingkupPSModulePath, gunakan itu alih-alih default untuk sistem
- Jika
Sistem non-Windows 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 powershell.exe dan powershell_ise.exe.
Nilai $Env:PSModulePath disalin ke WinPSModulePath dengan modifikasi berikut:
- Menghapus PS7 jalur modul Pengguna
- Menghapus PS7 jalur modul Sistem
- Menghapus PS7 jalur modul
$PSHOME
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 as-is 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. Misalnya:
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 perlu mengubah nilai variabel lingkungan PSModulePath.
Misalnya, untuk menambahkan direktori C:\Program Files\Fabrikam\Modules untuk sementara waktu ke $Env:PSModulePath untuk 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 menyimpan nilai PSModulePath. Nilai PSModulePath disimpan dalam registri sebagai string yang belum ada. Untuk menghindari penyimpanan nilai PSModulePath secara permanen saat diperluas string, gunakan metode GetValue() pada subkunji dan edit nilai secara langsung.
Contoh berikut menambahkan jalur C:\Program Files\Fabrikam\Modules ke nilai variabel lingkungan PSModulePath tanpa memperluas string yang tidak diperluas.
$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)
Untuk menambahkan jalur ke pengaturan pengguna, gunakan kode berikut:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)