PowerShell Modülünü Takma


PowerShell modülünüzü oluşturduktan sonra, muhtemelen sizin veya başkalarının kullanabilmesi için modülü bir sisteme kurmak isteyeceksiniz. Genel olarak konuşursak, bu, modül dosyalarının (yani .psm1 veya ikili derlemenin, modül bildiriminin ve diğer ilgili dosyaların) o bilgisayardaki bir dizine kopyalanmasından oluşur. Çok küçük bir proje için bu, dosyaları Windows Gezgini ile tek bir uzak bilgisayara kopyalayıp yapıştırmak kadar basit olabilir; ancak daha büyük çözümler için daha karmaşık bir kurulum süreci kullanmak isteyebilirsiniz. Modülünüzü sisteme nasıl yerleştirdiğinize bakılmaksızın PowerShell, kullanıcıların modüllerinizi bulmasına ve kullanmasına olanak tanıyan bir dizi teknik kullanabilir. Bu nedenle kurulum için asıl konu PowerShell'in modülünüzü bulabilmesini sağlamaktır. Daha fazla bilgi için bkz. PowerShell Modülünü İçe Aktarma.

Modül Kurulum Kuralları

Aşağıdaki bilgiler, kendi kullanımınız için oluşturduğunuz modüller, başka taraflardan aldığınız modüller ve başkalarına dağıttığınız modüller dahil olmak üzere tüm modüller için geçerlidir.

Modülleri PSModulePath'e Yükleme

Mümkün olduğunda, tüm modülleri PSModulePath ortam değişkeninde listelenen bir yola yükleyin veya modül yolunu PSModulePath ortam değişkeni değerine ekleyin.

PSModulePath ortam değişkeni ($Env:PSModulePath), Windows PowerShell modüllerinin konumlarını içerir. Cmdlet'ler modülleri bulmak için bu ortam değişkeninin değerine güvenir.

Varsayılan olarak, PSModulePath ortam değişkeni değeri aşağıdaki sistem ve kullanıcı modülü dizinlerini içerir, ancak değere ekleme yapabilir ve değeri düzenleyebilirsiniz.

  • $PSHome\Modules (%Windir%\System32\WindowsPowerShell\v1.0\Modules)

    Uyarı

    Bu konum Windows ile birlikte gelen modüller için ayrılmıştır. Modülleri bu konuma kurmayın.

  • $HOME\Documents\WindowsPowerShell\Modules (%HOMEDRIVE%%HOMEPATH%\Documents\WindowsPowerShell\Modules)

  • $Env:ProgramFiles\WindowsPowerShell\Modules (%ProgramFiles%\WindowsPowerShell\Modules)

    PSModulePath ortam değişkeninin değerini almak için aşağıdaki komutlardan birini kullanın.

    $Env:PSModulePath
    [Environment]::GetEnvironmentVariable("PSModulePath")
    

    PSModulePath ortam değişkeni değerinin değerine bir modül yolu eklemek için aşağıdaki komut biçimini kullanın. Bu biçim, PSModulePath ortam değişkeninde oturumdan bağımsız bir değişiklik yapmak için System.Environment sınıfının SetEnvironmentVariable yöntemini kullanır.

    #Save the current value in the $p variable.
    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    
    #Add the new path to the $p variable. Begin with a semi-colon separator.
    $p += ";C:\Program Files (x86)\MyCompany\Modules\"
    
    #Add the paths in $p to the PSModulePath value.
    [Environment]::SetEnvironmentVariable("PSModulePath",$p)
    

    Bu önemli

    PSModulePath yolunu ekledikten sonra değişiklik hakkında bir ortam mesajı yayınlamalısınız. Değişikliğin yayınlanması, kabuk gibi diğer uygulamaların değişikliği almasına olanak tanır. Değişikliği yayınlamak için ürün kurulum kodunuzun, "Environment" dizesine ayarlanmış lParam ile bir WM_SETTINGCHANGE mesajı göndermesini sağlayın. Modül kurulum kodunuz PSModulePath'i güncelledikten sonra mesajı gönderdiğinizden emin olun.

  • Doğru Modül Dizini Adını Kullanın

    İyi biçimlendirilmiş bir modül, modül dizinindeki en az bir dosyanın temel adıyla aynı adı taşıyan bir dizinde saklanan bir modüldür. Bir modül iyi biçimlendirilmemişse Windows PowerShell onu bir modül olarak tanımaz.

    Bir dosyanın "temel adı", dosya adı uzantısı olmayan addır. İyi biçimlendirilmiş bir modülde, modül dosyalarını içeren dizinin adı, modüldeki en az bir dosyanın temel adıyla eşleşmelidir.

    Örneğin, örnek Fabrikam modülünde, modül dosyalarını içeren dizin "Fabrikam" olarak adlandırılır ve en az bir dosya "Fabrikam" temel adına sahiptir. Bu durumda hem Fabrikam.psd1 hem de Fabrikam.dll "Fabrikam" temel adına sahiptir.

    C:\Program Files
      Fabrikam Technologies
        Fabrikam Manager
          Modules
            Fabrikam
              Fabrikam.psd1 (module manifest)
              Fabrikam.dll (module assembly)
    

    Yanlış Kurulumun Etkisi

    Modül iyi biçimlendirilmemişse ve konumu PSModulePath ortam değişkeninin değerine dahil edilmemişse, Windows PowerShell'in aşağıdaki gibi temel bulma özellikleri çalışmaz.

    • Modül Otomatik Yükleme özelliği modülü otomatik olarak içe aktaramaz.

    • Get-Module cmdlet'inin ListAvailable parametresi modülü bulamıyor.

    • Import-Module cmdlet'i modülü bulamıyor. Modülü içe aktarmak için kök modül dosyasının veya modül bildirim dosyasının tam yolunu sağlamanız gerekir.

      Aşağıdaki gibi ek özellikler, modül oturuma aktarılmadığı sürece çalışmaz. PSModulePath ortam değişkenindeki iyi biçimlendirilmiş modüllerde bu özellikler, modül oturuma aktarılmadığında bile çalışır.

    • Get-Command cmdlet'i modüldeki komutları bulamıyor.

    • Güncelle-Yardım ve Kaydet-Yardım cmdlet'leri modüle ilişkin yardımı güncelleyemez veya kaydedemez.

    • Show-Command cmdlet'i modüldeki komutları bulamıyor ve görüntüleyemiyor.

      Modüldeki komutlar, Windows PowerShell Tümleşik Komut Dosyası Ortamı'ndaki (ISE) Show-Command penceresinde eksik.

    Modüller Nereye Kurulur

    Bu bölümde Windows PowerShell modüllerinin dosya sisteminin neresine kurulacağı açıklanmaktadır. Konum, modülün nasıl kullanıldığına bağlıdır.

    Belirli Bir Kullanıcıya Yönelik Modüllerin Kurulması

    Kendi modülünüzü oluşturursanız veya Windows PowerShell topluluğu web sitesi gibi başka bir taraftan modül alırsanız ve modülün yalnızca kullanıcı hesabınız için kullanılabilir olmasını istiyorsanız modülü kullanıcıya özel Modüller dizininize yükleyin.

    $HOME\Documents\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

    Kullanıcıya özel Modüller dizini, varsayılan olarak PSModulePath ortam değişkeninin değerine eklenir.

    Program Dosyalarındaki Tüm Kullanıcılar için Modüllerin Kurulması

    Bir modülün bilgisayardaki tüm kullanıcı hesaplarının kullanımına sunulmasını istiyorsanız modülü Program Dosyaları konumuna yükleyin.

    $Env:ProgramFiles\WindowsPowerShell\Modules\<Module Folder>\<Module Files>

    Not

    Program Dosyaları konumu, Windows PowerShell 4,0 ve sonraki sürümlerde varsayılan olarak PSModulePath ortam değişkeninin değerine eklenir. Windows PowerShell'in önceki sürümleri için, Program Dosyaları konumunu (%ProgramFiles%\WindowsPowerShell\Modules) manuel olarak oluşturabilir ve bu yolu yukarıda açıklandığı gibi PSModulePath ortam değişkeninize ekleyebilirsiniz.

    Modülleri Ürün Dizinine Yükleme

    Modülü diğer taraflara dağıtıyorsanız, yukarıda açıklanan varsayılan Program Dosyaları konumunu kullanın veya %ProgramFiles% dizininin kendi şirkete özel veya ürüne özel alt dizinini oluşturun.

    Örneğin, hayali bir şirket olan Fabrikam Technologies, Fabrikam Manager ürünü için bir Windows PowerShell modülü gönderiyor. Modül yükleyicisi, Fabrikam Manager ürün alt dizininde bir Modüller alt dizini oluşturur.

    C:\Program Files
      Fabrikam Technologies
        Fabrikam Manager
          Modules
            Fabrikam
              Fabrikam.psd1 (module manifest)
              Fabrikam.dll (module assembly)
    

    Fabrikam modülünü bulmak amacıyla Windows PowerShell modülü bulma özelliklerini etkinleştirmek için Fabrikam modülü yükleyicisi, modül konumunu PSModulePath ortam değişkeninin değerine ekler.

    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    $p += ";C:\Program Files\Fabrikam Technologies\Fabrikam Manager\Modules\"
    [Environment]::SetEnvironmentVariable("PSModulePath",$p)
    

    Ortak Dosya Dizinine Modül Yükleme

    Bir modül, bir ürünün birden çok bileşeni veya bir ürünün birden çok sürümü tarafından kullanılıyorsa, modülü %ProgramFiles%\Common Files\Modules alt dizininin modüle özgü alt dizinine yükleyin.

    Aşağıdaki örnekte Fabrikam modülü, %ProgramFiles%\Common Files\Modules alt dizininin Fabrikam alt dizinine yüklenir. Her modülün, Modüller alt dizininde kendi alt dizininde bulunduğunu unutmayın.

    C:\Program Files
      Common Files
        Modules
          Fabrikam
            Fabrikam.psd1 (module manifest)
            Fabrikam.dll (module assembly)
    

    Daha sonra yükleyici, PSModulePath ortam değişkeninin değerinin, ortak dosya modülleri alt dizininin yolunu içerdiğini garanti eder.

    $m = $env:ProgramFiles + '\Common Files\Modules'
    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    $q = $p -split ';'
    if ($q -notContains $m) {
        $q += ";$m"
    }
    $p = $q -join ';'
    [Environment]::SetEnvironmentVariable("PSModulePath", $p)
    

    Bir Modülün Birden Çok Sürümünü Yükleme

    Aynı modülün birden fazla sürümünü kurmak için aşağıdaki prosedürü kullanın.

    1. Modülün her sürümü için bir dizin oluşturun. Sürüm numarasını dizin adına ekleyin.
    2. Modülün her sürümü için bir modül bildirimi oluşturun. Bildirimdeki ModuleVersion anahtarının değerine modül sürüm numarasını girin. Bildirim dosyasını (.psd1) modülün sürüme özel dizinine kaydedin.
    3. Aşağıdaki örneklerde gösterildiği gibi, modül kök klasörü yolunu PSModulePath ortam değişkeninin değerine ekleyin.

    Modülün belirli bir sürümünü içe aktarmak için son kullanıcı, Import-Module cmdlet'inin MinimumVersion veya RequiredVersion parametrelerini kullanabilir.

    Örneğin Fabrikam modülü 8.0 ve 9.0 sürümlerinde mevcutsa Fabrikam modülü dizin yapısı aşağıdakine benzeyebilir.

    C:\Program Files
    Fabrikam Manager
     Fabrikam8
       Fabrikam
         Fabrikam.psd1 (module manifest: ModuleVersion = "8.0")
         Fabrikam.dll (module assembly)
     Fabrikam9
       Fabrikam
         Fabrikam.psd1 (module manifest: ModuleVersion = "9.0")
         Fabrikam.dll (module assembly)
    

    Yükleyici, her iki modül yolunu da PSModulePath ortam değişkeni değerine ekler.

    $p = [Environment]::GetEnvironmentVariable("PSModulePath")
    $p += ";C:\Program Files\Fabrikam\Fabrikam8;C:\Program Files\Fabrikam\Fabrikam9"
    [Environment]::SetEnvironmentVariable("PSModulePath",$p)
    

    Bu adımlar tamamlandığında Get-Module cmdlet'inin ListAvailable parametresi her iki Fabrikam modülünü de alır. Belirli bir modülü içe aktarmak için Import-Module cmdlet'inin MinimumVersion veya RequiredVersion parametrelerini kullanın.

    Her iki modül de aynı oturuma içe aktarılırsa ve modüller aynı adlara sahip cmdlet'ler içeriyorsa en son içe aktarılan cmdlet'ler oturumda etkilidir.

    Komut Adı Çakışmalarını Ele Alma

    Bir modülün dışa aktardığı komutlar, kullanıcının oturumundaki komutlarla aynı ada sahip olduğunda komut adı çakışmaları meydana gelebilir.

    Bir oturum aynı ada sahip iki komut içerdiğinde, Windows PowerShell öncelikli olan komut türünü çalıştırır. Bir oturum aynı ada ve aynı türe sahip iki komut içerdiğinde Windows PowerShell, oturuma en son eklenen komutu çalıştırır. Varsayılan olarak çalıştırılmayan bir komutu çalıştırmak için kullanıcılar komut adını modül adıyla niteleyebilir.

    Örneğin, oturum bir Get-Date işlevi ve Get-Date cmdlet'ini içeriyorsa, Windows PowerShell işlevi varsayılan olarak çalıştırır. Cmdlet'i çalıştırmak için komutun başına aşağıdaki gibi modül adını ekleyin:

    Microsoft.PowerShell.Utility\Get-Date
    

    Ad çakışmalarını önlemek amacıyla modül yazarları, modülden dışa aktarılan tüm komutlar için bir isim öneki belirtmek amacıyla modül bildirimindeki DefaultCommandPrefix anahtarını kullanabilir.

    Kullanıcılar alternatif bir önek kullanmak için Import-Module cmdlet'inin Prefix parametresini kullanabilir. Prefix parametresinin değeri, DefaultCommandPrefix anahtarının değerine göre önceliklidir.

    Windows dışı sistemlerde destekleyici yollar

    Windows dışı platformlar, yol ayırıcı olarak iki nokta üst üste (:) karakterini ve dizin ayırıcı olarak eğik çizgi (/) karakterini kullanır. [System.IO.Path] sınıfı, kodunuzun herhangi bir platformda çalışmasını sağlamak için kullanılabilecek statik üyelere sahiptir:

    • [System.IO.Path]::PathSeparator - ana bilgisayar platformu için PATH ortam değişkenindeki yolları ayırmak için kullanılan karakteri döndürür
    • [System.IO.Path]::DirectorySeparatorChar - ana bilgisayar platformu için dizin adlarını bir yolla ayırmak için kullanılan karakteri döndürür

    Yol dizeleri oluştururken ; ve \ karakterleri yerine bu statik özellikleri kullanın.

    Ayrıca Bakınız

    about_Command_Precedence

    Windows PowerShell Modülü Yazma

    İlgili makaleler