about_PSModulePath

Kısa açıklama

Bu makalede ortam değişkeninin amacı ve kullanımı $env:PSModulePath açıklanmaktadır.

Uzun açıklama

Ortam $env:PSModulePath değişkeni, modülleri ve kaynakları bulmak için aranan klasör konumlarının listesini içerir. PowerShell, her klasörde modül (.psd1 veya .psm1) dosyalarını özyinelemeli olarak arar.

Install-Module modülün geçerli kullanıcı için mi yoksa tüm kullanıcılar için mi yükleneceğini belirtmenize olanak tanıyan bir Scope parametresine sahiptir. Daha fazla bilgi için bkz . Install-Module.

Varsayılan olarak, atanan $env:PSModulePath geçerli konumlar şunlardır:

  • Sistem genelinde konumlar: Bu klasörler PowerShell ile birlikte gelen modülleri içerir. Bu modüller klasöründe depolanır $PSHOME\Modules .

    • Windows'da , AllUsers kapsamında yüklü modüller içinde $env:ProgramFiles\WindowsPowerShell\Modulesdepolanır.
    • Windows olmayan sistemlerde , AllUsers kapsamında yüklü modüller içinde /usr/local/share/powershell/Modulesdepolanır.
  • Kullanıcı tarafından yüklenen modüller: Windows'ta , CurrentUser kapsamında yüklü modüller genellikle klasörde depolanır $HOME\Documents\WindowsPowerShell\Modules . Klasörün belirli konumu Documents Windows sürümüne ve klasör yeniden yönlendirme kullandığınızda değişir. Ayrıca, Microsoft OneDrive klasörünüzün Documents konumunu değiştirebilir. Aşağıdaki komutu kullanarak klasörünüzün Documents konumunu doğrulayabilirsiniz: [Environment]::GetFolderPath('MyDocuments').

    Windows olmayan sistemlerde CurrentUser kapsamında yüklü modüller klasöründe depolanır $HOME/.local/share/powershell/Modules .

  • Uygulamaya özgü modüller: Kurulum programları, Windows'taki klasör gibi Program Files diğer dizinlere modül yükleyebilir. Yükleyici paketi konumuna $env:PSModulePatheklenebilir veya eklemeyebilir.

PowerShell PSModulePath yapısı

değeri $env:PSModulePath , PowerShell her başlatıldığında oluşturulur. Değer, PowerShell sürümüne ve nasıl başlatıldığına göre değişir.

Windows PowerShell başlatma

Windows PowerShell, başlangıçta oluşturmak PSModulePath için aşağıdaki mantığı kullanır:

  • Yoksa PSModulePath CurrentUser, AllUsers ve modül yollarını birleştirin $PSHOME
  • Varsa PSModulePath :
    • Modüller yolu içeriyorsa PSModulePath$PSHOME :
      • AllUsers modül yolu modül yolundan önce $PSHOME eklenir
    • Başka:
      • Kullanıcı konumu kasıtlı olarak kaldırdığından$PSHOME, yalnızca tanımlandığı gibi kullanın PSModulePath

CurrentUser modül yolu, yalnızca Kullanıcı kapsamı $env:PSModulePath yoksa önek olarak eklenir. Aksi takdirde, Kullanıcı kapsamı $env:PSModulePath tanımlandığı gibi kullanılır.

PowerShell 7 başlatma

Windows'da çoğu ortam değişkeni için Kullanıcı kapsamlı değişken varsa, yeni bir işlem bu değeri yalnızca aynı ada sahip Makine kapsamlı bir değişken mevcut olsa bile kullanır.

PowerShell 7'de, PSModulePath ortam değişkeninin Windows'da nasıl işlendiğinde olduğu Path gibi ele alınır. Windows'ta, Path diğer ortam değişkenlerinden farklı şekilde ele alınıyor. Bir işlem başlatıldığında, Windows Kullanıcı kapsamlı Path ile Makine kapsamlı Pathöğesini birleştirir.

  • Kullanıcı Kapsamlı'nı alma PSModulePath
  • Devralınan ortam değişkenlerini PSModulePath işlemekle karşılaştır
    • Aynıysa:
      • Ortam değişkeninin semantiğinin ardından AllUsers'ıPSModulePathPath sonuna ekleyin
      • Windows System32 yolu tanımlanan PSModulePath makineden gelir, bu nedenle açıkça eklenmesi gerekmez
    • Farklıysa, kullanıcı açıkça değiştirmiş gibi davranın ve AllUsers'ı eklemeyin PSModulePath
  • PS7 Kullanıcı, Sistem ve $PSHOME yollara bu sırayla sahip ön ek
    • Kapsamı PSModulePathbelirlenmiş bir kullanıcı içeriyorsapowershell.config.json, kullanıcı için varsayılan yerine bunu kullanın
    • powershell.config.json kapsamlı PSModulePathbir sistem içeriyorsa, sistem için varsayılan yerine bunu kullanın

Unix sistemlerin Kullanıcı ve Sistem ortam değişkenlerinin ayrımı yoktur. PSModulePath devralınır ve önceden tanımlanmamışsa PS7'ye özgü yollar önek olarak eklenir.

Windows PowerShell'i PowerShell 7'den başlatma

Bu tartışma için Windows PowerShell hem hem de powershell.exepowershell_ise.exeanlamına gelir.

değeri $env:PSModulePath aşağıdaki değişikliklerle kopyalanır WinPSModulePath :

  • PS7 kullanıcı modülü yolunu kaldırma
  • PS7'yi Sistem modülü yolunu kaldırma
  • PS7'yi $PSHOME modül yolunu kaldırma

PS7 modüllerinin Windows PowerShell'de yüklenmemesi için PS7 yolları kaldırılır. Değeri WinPSModulePath , Windows PowerShell başlatılırken kullanılır.

PowerShell 7'ye Windows PowerShell'den başlama

PowerShell 7 başlatma işlemi, Windows PowerShell'in eklediği devralan yolların eklenmesiyle olduğu gibi devam eder. PS7'ye özgü yollar önekli olduğundan işlevsel bir sorun yoktur.

Modül arama davranışı

PowerShell, MODÜL (.psd1 veya .psm1) dosyaları için PSModulePath'teki her klasörü özyinelemeli olarak arar. Bu arama düzeni, aynı modülün birden çok sürümünün farklı klasörlere yüklenmesini sağlar. Örneğin:

    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

Varsayılan olarak PowerShell, birden çok sürüm bulunduğunda modülün en yüksek sürüm numarasını yükler. Belirli bir sürümü yüklemek için FullyQualifiedName parametresiyle kullanın.Import-Module Daha fazla bilgi için bkz . Import-Module.

PSModulePath'i Değiştirme

Çoğu durumda modülleri varsayılan modül konumlarına yüklemeniz gerekir. Ancak ortam değişkeninin PSModulePath değerini değiştirmeniz gerekebilir.

Örneğin, geçerli oturumun dizinini C:\Program Files\Fabrikam\Modules$env:PSModulePath geçici olarak eklemek için şunu yazın:

$Env:PSModulePath = $Env:PSModulePath+";C:\Program Files\Fabrikam\Modules"

Komuttaki noktalı virgül (;), yeni yolu listede kendisinden önceki yoldan ayırır. Windows olmayan platformlarda iki nokta üst üste (:), ortam değişkenindeki yol konumlarını ayırır.

Windows olmayan bir uygulamada PSModulePath'i değiştirme

Windows dışı bir ortamdaki her oturumun PSModulePath değerini değiştirmek için önceki komutu PowerShell profilinize ekleyin.

Windows'da PSModulePath'i değiştirme

Değerini her oturumda değiştirmek PSModulePath için, değerleri depolayarak PSModulePath kayıt defteri anahtarını düzenleyin. PSModulePath Değerler kayıt defterinde genişletilmemiş dizeler olarak depolanır. Değerleri kalıcı olarak genişletilmiş dizeler olarak kaydetmekten PSModulePath kaçınmak için alt anahtardaki GetValue yöntemini kullanın ve değeri doğrudan düzenleyin.

Aşağıdaki örnek, genişletilmemiş dizeleri genişletmeden ortam değişkeninin PSModulePath değerine yol eklerC:\Program Files\Fabrikam\Modules.

$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)

Kullanıcı ayarına yol eklemek için kayıt defteri sağlayıcısını olarak HKLM:\HKCU:\değiştirin.

$key = (Get-Item 'HKCU:\').OpenSubKey('Environment', $true)
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)

Ayrıca bkz.