Bagikan melalui


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 . Lokasi Documents spesifik folder bervariasi menurut versi Windows dan saat Anda menggunakan pengalihan folder. Selain itu, Microsoft OneDrive dapat mengubah lokasi folder Anda Documents . Anda dapat memverifikasi lokasi folder Anda Documents 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
    • Lain:
      • Cukup gunakan PSModulePath seperti yang didefinisikan karena pengguna sengaja menghapus $PSHOME lokasi

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)

Lihat juga