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, klasör konumlarının listesini içerir. PowerShell, her klasörde modül (.psd1
veya .psm1
) dosyalarını özyinelemeli olarak arar.
Varsayılan olarak, atanan $env:PSModulePath
geçerli konumlar şunlardır:
- CurrentUser kapsamında yüklü modüller:
- Windows'da bu modüller içinde
$HOME\Documents\PowerShell\Modules
depolanır. Klasörün belirli konumuDocuments
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ünDocuments
konumunu değiştirebilir. KlasörünüzünDocuments
konumunu doğrulamak için komutunu çalıştırın:[Environment]::GetFolderPath('MyDocuments')
. - Windows olmayan sistemlerde bu modüller klasöründe depolanır
$HOME/.local/share/powershell/Modules
.
- Windows'da bu modüller içinde
- AllUsers kapsamında yüklü modüller :
- Windows'da bu modüller içinde
$env:ProgramFiles\PowerShell\Modules
depolanır. - Windows olmayan sistemlerde bu modüller içinde
/usr/local/share/powershell/Modules
depolanır.
- Windows'da bu modüller içinde
- PowerShell ile birlikte gelen modüller içinde
$PSHOME\Modules
depolanır.
Not
PowerShell modülleri içeren uygulamalar, klasör gibi Program Files
Windows'daki diğer dizinlere modül yükleyebilir. Yükleyici paketi konumuna $env:PSModulePath
eklenemeyebilir.
Windows PowerShell 5.1 için varsayılan konumlar PowerShell 7'den farklıdır.
- CurrentUser kapsamına yüklenen modüller içinde
$HOME\Documents\WindowsPowerShell\Modules
depolanır. - AllUsers kapsamında yüklü modüller içinde
$env:ProgramFiles\WindowsPowerShell\Modules
depolanır. - içinde depolanan
$PSHOME\Modules
Windows PowerShell ile birlikte gelen modüller.$env:SystemRoot\System32\WindowsPowerShell\1.0\Modules
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şlattığınıza 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
- AllUsers modül yolu modül yolundan önce
- başka:
- Kullanıcı konumu kasıtlı olarak kaldırdığından
$PSHOME
, yalnızca tanımlandığı gibi kullanınPSModulePath
- Kullanıcı konumu kasıtlı olarak kaldırdığından
- Modüller yolu içeriyorsa
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, aynı ada sahip Makine kapsamlı bir değişken mevcut olsa bile yeni bir işlem yalnızca bu değeri kullanır. Yol ortamı değişkenleri farklı değerlendirilir.
Windows'da, PSModulePath
ortam değişkeninin nasıl işlendiğinden Path
benzer şekilde işlenir. Path
diğer ortam değişkenlerinden farklı olarak 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'ı
PSModulePath
Path
sonuna ekleyin - Windows
System32
yolu tanımlananPSModulePath
makineden gelir, bu nedenle açıkça eklenmesi gerekmez
- Ortam değişkeninin semantiğinin ardından AllUsers'ı
- Farklıysa, kullanıcı açıkça değiştirmiş gibi davranın ve AllUsers'ı eklemeyin
PSModulePath
- Aynıysa:
- PS7 Kullanıcı, Sistem ve
$PSHOME
yollara bu sırayla sahip ön ek- Kapsamı
PSModulePath
belirlenmiş bir kullanıcı içeriyorsapowershell.config.json
, kullanıcı için varsayılan yerine bunu kullanın powershell.config.json
kapsamlıPSModulePath
bir sistem içeriyorsa, sistem için varsayılan yerine bunu kullanın
- Kapsamı
Windows dışı sistemlerde 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.exe
powershell_ise.exe
anlamı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 ön ekli 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 yöntemini kullanın GetValue()
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\Environment')
$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 aşağıdaki kodu kullanın:
$key = (Get-Item 'HKCU:\Environment')
$path = $key.GetValue('PSModulePath','','DoNotExpandEnvironmentNames')
$path += ';%ProgramFiles%\Fabrikam\Modules'
$key.SetValue('PSModulePath',$path,[Microsoft.Win32.RegistryValueKind]::ExpandString)
Ayrıca bkz.
PowerShell