PowerShell Profillerini Kullanma


Bazen PowerShell'i her açtığımda veya belirli işlevleri veya değişkenleri yüklediğimde uygulanacak belirli ayarları yapılandırmam gerekiyor. Bu, bir PowerShell profil betiği kullanılarak kolayca gerçekleştirilebilir.

Profil betiği bir başlangıç betiği olarak tanımlanabilir ve PowerShell'i her başlattığımda geçerli kapsamda çalıştırılacak bir betiktir; özel işlevleri, ayarları veya değişkenleri yüklemek için mükemmeldir. Bir kullanıcı profili komut dosyasının konumu, bir dize içeren $profile değişkeninde saklanır.

Bu dize, CurrentUserCurrentHost profil komut dosyası olarak adlandırılan şeye atıfta bulunur ve şuna benzer bir değere sahip olabilir: C:UsersSimonDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1.

Evet doğru tahmin ettiniz, CurrentHost, betiğin yalnızca bir ana bilgisayar için geçerli olduğunu ima ediyor. Ana bilgisayar, PowerShell'i barındıran programdır ve Windows'ta varsayılan olarak iki ana bilgisayar mevcuttur: powershell.exe ve PowerShell ISE ve her birinin kendi profil komut dosyası vardır.

Microsoft.PowerShell_profile.ps1, powershell.exe için CurrentUserCurrentHost profilidir. PowerShell ISE'de $profile değerini kontrol edersem bunun yerine şu değeri elde ederim: C:UsersSimonDocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1.

Bu dosyaların her ikisi de kullanıcının Belgeler klasöründe bulunur ve her kullanıcıya özeldir. Bu profillere işlevlerinizi ve özelleştirmelerinizi başka hiçbir kullanıcıyı etkilemeden güvenle yükleyebilirsiniz.

Ama durun, dahası da var! $Profile yaygın bir dizedir, ancak bunu Get-Member cmdlet'ine yönlendirirsek, şu adlarla adlandırılan dört ekstra not özelliğine sahip olduğunu görebiliriz:

Tüm KullanıcılarTüm Ana Bilgisayarlar

Tüm KullanıcılarMevcut Ana Bilgisayar

GeçerliKullanıcıTümAna Bilgisayarlar

CurrentUserCurrentHost

Bunların her birinin bir profil betiğine atıfta bulunan bir değeri vardır ve hepsi PowerShell'i her başlattığınızda yüklenir. Bunlar yukarıda listelendiği sırayla yüklenir; yani, hem AllUsersAllHosts hem de CurrentUserCurrentHost'ta aynı değişkeni ayarlarsam CurrentUserCurrent ana bilgisayarında ayarlanan değer, AllUsersAllHosts'ta ayarlanan değerin üzerine yazacaktır.

Tüm profil komut dosyalarının yollarını göstermek için $profile'ı Select-Object cmdlet'ine -Property * parametresiyle aktarın. Bu, bir nesnedeki tüm özellikleri gösterecektir. İşte n powershell.exe'den aldığım çıktı:

Aynı şeyi PowerShell ISE'de çalıştırırsam bunun yerine şunu elde ederim:

AllHosts profillerinin her iki resimde de aynı olduğunu, CurrentHost profillerinin ise farklı olduğunu hemen görebiliriz, bu da aslında altı farklı profil komut dosyasının olduğu anlamına gelir!

Ama yine de hepsi bu değil! 64 bit işletim sistemi çalıştırıyorsanız AllUsers profil komut dosyaları PowerShell'in 32 ve 64 bit sürümleri için aynı değildir. PowerShell'in 32 bit sürümünü, Windows PowerShell'i (x86) başlatırsanız, AllUsers profilleri C:WindowsSysWOW64WindowsPowerShellv1.0 konumunda depolanır. Yalnızca 32, -veya 64 bit ana bilgisayarı kullanırken yüklemek istediğiniz belirli ayarlarınız varsa bu kullanışlı olabilir; bu ayarların bilgisayardaki tüm kullanıcılar için geçerli olacağını unutmayın.

Toplamda dokuz profil mevcut! İşte tam liste:

AllUsersAllHosts (x86)            : C:WindowsSysWOW64WindowsPowerShellv1.0profile.ps1
AllUsersAllHosts (x64)            : C:WindowsSystem32WindowsPowerShellv1.0profile.ps1

AllUsersCurrentHost (ISE x86)     : C:WindowsSysWOW64WindowsPowerShellv1.0Microsoft.PowerShellISE_profile.ps1
AllUsersCurrentHost (ISE x64)     : C:WindowsSysWOW64WindowsPowerShellv1.0Microsoft.PowerShell_profile.ps1
AllUsersCurrentHost (Console x86) : C:WindowsSystem32WindowsPowerShellv1.0Microsoft.PowerShellISE_profile.ps1
AllUsersCurrentHost (Console x64) : C:WindowsSystem32WindowsPowerShellv1.0Microsoft.PowerShell_profile.ps1

CurrentUserAllHosts               : C:UsersSimonDocumentsWindowsPowerShellprofile.ps1

CurrentUserCurrentHost (ISE)      : C:UsersSimonDocumentsWindowsPowerShellMicrosoft.PowerShellISE_profile.ps1
CurrentUserCurrentHost (Console)  : C:UsersSimonDocumentsWindowsPowerShellMicrosoft.PowerShell_profile.ps1

PowerShell varsayılan ayarlarını özelleştirmeye başlamadan önce profil komut dosyalarını oluşturmamız gerekecek. Tüm profil komut dosyalarını oluşturmak ve bunları PowerShell ISE'de açmak için aşağıdaki pasajı kullanıyorum. Bu hem ISE'den hem de powershell.exe'den çalışır.

powershell_ise.exe -File ((
    $profile.AllUsersAllHosts,
    $profile.AllUsersCurrentHost,
    $profile.CurrentUserAllHosts,
    $profile.CurrentUserCurrentHost | 
    ForEach-Object {
        $Path = $_
        Try {
            $ParentPath = Split-Path $Path
            if(-Not(Test-Path $ParentPath)) {
                New-Item -Path $ParentPath -ItemType Directory -ErrorAction Stop
            }
            if(-Not(Test-Path $Path)) {
                New-Item -Path $Path -ItemType File -ErrorAction Stop
            }
            $_
        } Catch {
            Write-Warning -Message "Failed to create file $Path"
        }
    }
)-join ',')

Elbette! Artık tüm profiller oluşturulduğuna göre, onlara ne koyacağım?!

Hey, Scripting Guy'da mükemmel bir yazı var! Profilinize ne ekleyeceğinize dair önerilerin yer aldığı blog listesi burada: http://blogs.technet.com/b/heyscriptingguy/archive/2014/05/22/what-s-in-your-powershell-profile-powershell-mvps -favoriler.aspx

Mutlu Profil Oluşturma!

İlgili makaleler