Powershell Modül Yolu | PSModulePath ortam değişkenini öğrenin


Powershell Modül Yoluna Giriş

Sistemde halihazırda kurulu olan modüllerin konumları PSModulePath ortam değişkeninde saklanır. PowerShell cmdlet'lerini genişletmenin iki önemli yolu vardır; bunlar Modüller ve Snapinlerdir. Her ikisi de cmdlet'ler ve işlevlerden oluşan paketlerdir. Snapin'ler ilk geliştirilenlerdi ve PowerShell sürüm 1 ile tanıtıldılar, modüller ise PowerShell sürüm 2'de tanıtıldı. Snapin'ler kullanımdan kaldırılıyor. Snapin'ler derlemelerde tanımlanırken modüller derlemelerde veya PowerShell komut dosyalarında tanımlanır. Hem ek bileşenler hem de modüller, cmdlet'ler, işlevler, değişkenler ve iş akışlarından oluşan bir paketten başka bir şey değildir. Kayıtlı ek bileşenler, "Get-PSSnapin-registered" cmdlet'ini kullanarak öğrenebilir. Kurulu mevcut modüllerin listesi “Get-Module -ListAvailable” cmdlet'i kullanılarak bulunabilir. Bu makale Powershell Modül Yolunu ayrıntılı olarak ele alacaktır.

Dizin'de bulunan Modüllerin Listesi: C:\Program Files\WindowsPowerShell\Modules

ModuleType Version Name
Script 1.0.1 Microsoft.PowerShell.Operation.Validation
Binary 1.0.0.1 PackageManagement
Script 3.4.0 Pester
Script 1.0.0.1 PowerShellGet
Script 1.2 PSReadline

Dizin Dizininde bulunan Modüllerin Listesi:C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules

ModuleType Version Name
Manifest 1.0.0.0 AppBackgroundTask
Manifest 2.0.0.0 AppLocker
Manifest 1.0.0.0 AppvClient
Manifest 2.0.0.0 Appx
Script 1.0.0.0 AssignedAccess
Manifest 1.0.0.0 BitLocker
Manifest 2.0.0.0 BitsTransfer
Manifest 1.0.0.0 BranchCache
Manifest 1.0.0.0 CimCmdlets
Manifest 1 ConfigCI
Manifest 1 Defender
Manifest 1.0.0.0 DeliveryOptimization
Manifest 1.0.0.0 DirectAccessClientComponents
Script 3 Dism
Manifest 1.0.0.0 DnsClient
Manifest 1.0.0.0 EventTracingManagement
Manifest 2.0.0.0 International
Manifest 1.0.0.0 iSCSI
Script 1.0.0.0 ISE

Yalnızca geçerli oturumda mevcut olan modülleri almak için “Get-Module -All ” cmdlet'i kullanılır. Import-Module cmdlet'inin yardımıyla herhangi bir modül bir oturuma aktarılabilir.

Geçerli oturumdaki modüller:

ModuleType Version Name
Script 1.0.0.0 ISE
Binary 3.0.0.0 Microsoft.PowerShell.Commands.Management.dll
Binary 3.0.0.0 Microsoft.PowerShell.Commands.Utility.dll
Manifest 3.1.0.0 Microsoft.PowerShell.Management
Script 0 Microsoft.PowerShell.Utility
Manifest 3.1.0.0 Microsoft.PowerShell.Utility

Örnek:

İçe Aktarma Modülü -Ad PSDiagnostics

Verbose parametresi, modül içe aktarılırken modülde bulunan cmdlet'ler ve işlevler hakkında bilgi edinmek için kullanılabilir.

Modülü oturumdan kaldırmak için aşağıdaki cmdlet kullanılabilir

Modül Adını Kaldır PSDiagnostics. Verbose parametresi burada da kullanılabilir.

PSModulePath:

PSModulePath, sistemde yüklü olan modüllerin adresini saklayan bir ortam değişkenidir. Kullanıcı modülün yolunu bilmediğinde veya belirtmediğinde PowerShell onları bulmak için bu değişkeni kullanır. Depolanan modülleri görüntülemek için aşağıdaki cmdlet'i yürütün.

Sözdizimi:

$env:PSModulePath

Çıktı:

$env:PSModulePath'in varsayılan değeri aşağıdaki değerlerden biridir

  • $HOME\Documents\PowerShell\Modules;
  • $PSHOME\Modules veya $HOME\Documents\WindowsPowerShell\Modules;
  • $PSHOME\Modüller

PSModulePath'le çalışma

PSModulePath'e aşağıdaki gibi geçici yeni bir yol veya konum eklenebilir.

$env:PSModulePath = $env:PSModulePath + ";c:\windows\test"

Ortam değişkeni düzenleyicisi kullanılarak kayıt defterine yeni bir değişken eklenebilir.

Betiği kullanarak yeni bir değişken eklemek için Environment sınıfının SetEnvironmentVariable yönteminin kullanılması gerekir.

$CurrentValue = [Environment]::GetEnvironmentVariable("PSModulePath", "Machine")
[Environment]::SetEnvironmentVariable("PSModulePath", $CurrentValue + ";C:\vignesh\test", "Machine")

Yolu veya konumu PSModulePath'ten kaldırmak için değiştirme parametresi kullanılabilir.

$env:PSModulePath -replace ";c:\windows\test".

Yukarıdaki cmdlet c:\windows\test'i modül yolundan kaldıracaktır.

Modüllerin Otomatik Olarak İçe Aktarılmasını Etkinleştirme:

Varsayılan olarak PSModulePath'te bulunan modüller yalnızca bir oturumda içe aktarılır. Başka konumlardan modülleri içe aktarmak için Import-Module cmdlet'inin kullanılması gerekir. $PSModuleAutoloadingPreference, modüllerin otomatik olarak içe aktarılıp aktarılmayacağını belirleyen parametredir. Kabul edilebilir değerleri All, ModuleQualified ve Hiçbiri'dir.

Tümü: Varsayılan değerdir. Modüller ilk kullanım için içe aktarılır.

ModuleQualified: Yalnızca kullanıcı bir modül belirtirse içe aktarılır.

Yok: Modüller otomatik olarak içe aktarılmaz. Örn. $PSModuleAutoloadingPreference='yok'

Örnekler:

PSModulePath'e bir modülün yeni konumunu eklemek için.

Giriş:

Function Add-ToPSModulePathEg {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)][String]$ModulePath
)
Write-Host "Add a path tutorial"
if (!($env:PSModulePath.split(";") -contains $ModulePath)){
$Current = $env:PSModulePath
[Environment]::SetEnvironmentVariable("PSModulePath",$Current + ";" + $ModulePath, "Machine")
$env:PSModulePath = [System.Environment]::GetEnvironmentVariable("PSModulePath","Machine")
Write-Host "Path Added"
}else{
Write-Host "$ModulePath is already available in psMOdulePath $env:psModulePath"
}
}

Komut dosyasının nasıl çalıştırılacağına ilişkin adımlar:

Yukarıdaki script bir fonksiyondur. Bu nedenle parametrelerin ona iletilmesi gerekir.

İlk önce betiği çalıştırın.

Çıkış bölmesinde Add-ToPSModulePathEg - ModulePath “Buraya eklenecek yol yazın. ”

Referans için aşağıdaki çıktı ekranına bakın

Çıktı:

Yukarıdaki çıktıda betiğin ilk kez ne zaman çalıştırıldığını görüyorsanız. Yol, zaten ModulePath'te yoksa eklenecektir ve Yol ekleme eğitimi, eklenen yolla birlikte yazdırılacaktır. Betik aynı yol için tekrar çalıştırılırsa ikinci çıktı olan “Test4 zaten mevcut” yazdırılır.

PSModulePath'ten bir yolu kaldırmak için:

Giriş:

function Remove-FromPSModulePathEg{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)][String]$ModulePath
)
Write-Host "Removing a path from PSModulePath Variable"
if ($env:PSModulePath.split(";") -contains $ModulePath){
$NewValue = (($env:PSModulePath).Split(";") | ? { $_ -ne $ModulePath }) -join ";"
[Environment]::SetEnvironmentVariable("PSModulePath", $NewValue, "Machine")
$env:PSModulePath = [System.Environment]::GetEnvironmentVariable("PSModulePath","Machine")
write-Host "$ModulePath removed. Restart the prompt for the changes to take effect."
}else{
write-Host "$ModulePath is not present in $env:psModulePath"
}
}

Komut dosyasının nasıl çalıştırılacağına ilişkin adımlar:

Yukarıdaki script bir fonksiyondur. Bu nedenle parametrelerin ona iletilmesi gerekir.

İlk önce betiği çalıştırın.

Çıkış bölmesinde, FromPSModulePathEg - ModulePath “Buraya silinecek yol yazın. ”

Referans için aşağıdaki çıktı ekranına bakın

Çıktı:

Yukarıdaki çıktıda öncelikle yukarıda eklenen yol kaldırılır. Daha sonra çıktıdan bir yolun kaldırılması üretilir. Son olarak, kaldırılan yol için komut dosyası ikinci kez çalıştırıldığında, mevcut olmayan yol üretilir.

PSModulePath'e Aynı Anda Birden Fazla Konum Ekleme

Giriş:

Write-Host "Welcome to adding multiple paths to the PSModulePath Environment Variable"
#storing the paths to be added in an array
$address=@("C:\Vignesh\test","C:\Vignesh\Tickets","C:\Vignesh\Patching","C:\Vignesh\Training Screenshots" )
foreach($add in $address)
{
Write-Host "Adding the path" $add "to the PSModulePath Variable"
$env:PSModulePath = $env:PSModulePath +";$add"
Write-Host "Path added"
Write-Host "Current value of PSModulePath is "$env:PSModulePath
}

Çıktı:

PSModulePath'ten Aynı Anda Birden Çok Yolu Kaldırma:

Giriş:

Write-Host "Welcome to deleting multiple paths from the PSModulePath Environment Variable"
Write-Host "Current Value in PSModulePath is" $env:PSModulePath
#storing the paths to be removed from the location
$address=@("C:\Vignesh\test","C:\Vignesh\Tickets","C:\Vignesh\Patching","C:\Vignesh\Training Screenshots" )
foreach($add in $address)
{
if ($env:PSModulePath.split(";") -contains $add){
Write-Host "Removing the path" $add
$NewValue = (($env:PSModulePath).Split(";") | ? { $_ -ne $add }) -join ";"
[Environment]::SetEnvironmentVariable("PSModulePath", $NewValue, "Machine")
$env:PSModulePath = [System.Environment]::GetEnvironmentVariable("PSModulePath","Machine")
write-Host "$add removed"
}
}

Çıktı:

Sonuç - Powershell Modül Yolu

Bu nedenle makalede PSModulePath ortam değişkeni ayrıntılı olarak ele alınmıştır. Ayrıca modül ile snapin arasındaki farkı da açıkladı. Dikkat edilmesi gereken bazı önemli noktalar, modülün otomatik yüklenmesinin etkinleştirildiği durumlardır; İlk pozisyonun gerekli modüle sahip olmasına dikkat edilmelidir. Aynı modül için birden fazla sürümün olması durumunda PowerShell varsayılan olarak modülün en son sürümünü kullanır. Ayrıca bir PSModulePath değişkeninin nasıl ekleneceği ve kaldırılacağına ilişkin örnekler de gösterilmiştir. Cmdlet hakkında derinlemesine bilgi edinmek, örnek programlar oluşturmak ve bunların etrafında çalışarak eğlenmek tavsiye edilir.

İlgili makaleler