PowerShell'de PSReadline'ın Tüm Eksileri ve Çıkışları
PowerShell olağanüstü bir platformlar arası görev otomasyon çözümüdür. Ancak dürüst olun, PowerShell komut satırı deneyiminizde bir şeylerin eksik olduğunu mu düşünüyorsunuz? Neden PSReadline PowerShell modülüne dönmüyorsunuz?
PSReadline, PowerShell deneyiminizi özelleştirmenize ve özellikler eklemenize olanak tanıyan cmdlet'ler içerir. Bu eğitimde, en son PowerShell'i nasıl kuracağınızı ve PSReadline'ı ve onun daha gelişmiş özelliklerinden bazılarını nasıl kullanacağınızı gözden geçireceksiniz.
Hazır? PowerShell deneyiminizi bir sonraki seviyeye taşımak için okumaya devam edin!
Önkoşullar
Bu eğitim uygulamalı bir gösteri olacaktır. Takip etmek istiyorsanız aşağıdakilere sahip olduğunuzdan emin olun:
- Windows, macOS veya Linux çalıştıran bir sistem - Bu eğitimde Windows 10 kullanılmaktadır ancak sonraki sürümler de çalışacaktır.
- .NET 6 SDK - Bu eğitimde v.6.0.203 kullanılmaktadır.
- PowerShell 7+ - Bu eğitimde PowerShell 7.2.4 kullanılıyor
PSReadline Modülünü Yükleme
PSReadline modülünün avantajlarından yararlanabilmeniz için önce onu yüklemeniz gerekir. Ve diğer PowerShell modülleri gibi, PSReadline modülünü yüklemek için Install-Module'u çalıştıracaksınız.
PSReadline'ın 2.x sürümü, sözdizimi renklendirme, özel tuş bağlamalar vb. gibi birçok özellik sunar. Özelliklerin tam listesi için PSReadline sürüm notlarını ziyaret edebilirsiniz.
1. Yükseltilmiş ayrıcalıklar gerektiren komutları çalıştırabildiğinizden emin olmak için PowerShell'i yönetici olarak açın.
2. Daha sonra, PSReadline modülünü PowerShell Galerisinden yüklemek için aşağıdaki Install-Module komutunu çalıştırın.
Install-Module PSReadLine -AllowPrerelease -Force3. Şimdi PSReadline modülünün kurulu olduğunu doğrulamak için aşağıdaki Get-InstalledModule komutunu çalıştırın.
Get-InstalledModule -Name PSReadLinePowerShell Geçmişi Üzerinden Komut Arama
Artık PSReadLine modülü yüklendiğine göre PowerShell ortamı deneyiminizi canlandırmaya hazırsınız. Belki de aynı komutu zaten birden çok kez çalıştırıyorsunuzdur. Bu durumda, geçmişten komutları aramanıza olanak tanıyan Set-PSReadLineKeyHandler cmdlet'iyle işlevleri etkinleştirin.
PowerShell geçmişi, PowerShell konsolunuzda çalıştırdığınız tüm komutların kaydını tutar. Ve PSReadLine modülüyle, komutları geçmişte aramak için tuşları (genellikle Yukarı ve Aşağı ok tuşları) ayarlayabilirsiniz.
Geçmişte komutları aramanıza olanak tanıyan işlevleri etkinleştirmek için aşağıdaki komutların her birini çalıştırın. Bu komutlar çıktı sağlamaz ancak geçmişteki komutlar için ileri ve geri arama yapmak üzere Yukarı ve Aşağı ok tuşlarını eşleştirir.
# Enables Up Arrow key to search backward for commands in the history.
Set-PSReadLineKeyHandler -Key UpArrow -Function HistorySearchBackward
# Enables Up Arrow key to search forward for commands in the history.
Set-PSReadLineKeyHandler -Key DownArrow -Function HistorySearchForward
Daha sonra Yukarı veya Aşağı ok tuşuna basın ve çalıştırmak için istediğiniz komutu bulduğunuzda Enter tuşuna basın.
Aşağıda, PowerShell'in şu ana kadar yazdıklarınızla eşleşen önceki veya sonraki komutu bulmak için geçmişinizi aradığına dikkat edin. Bu özellik, uzun veya karmaşık komutları tekrar tekrar çalıştırmayı sevmediğinizde zamandan tasarruf etmenizi sağlar.
İşlevleri Tuşlara Bağlama
PowerShell geçmişinde kayıtlı komutları aramak için Yukarı ve Aşağı ok tuşlarını eşleştirdiniz. Ancak diğer tuşları farklı işlevlere bağlayabilir misiniz? Evet! Get-PSReadlineKeyHandler, bağlı ve ilişkisiz işlevlerin bir listesini sağlayacaktır.
1. Varsayılan olarak varsayılan klavye bağlamalarını listeleyen aşağıdaki komutu parametreler olmadan çalıştırın.
Get-PSReadlineKeyHandlerAşağıda, varsayılan klavye bağlamalarının uzun listesinin yalnızca bir kısmı yer almaktadır. Bu liste, hangi tuşların hangi işlevleri veya komutları çağırdığı konusunda hafızanızı tazelemenize yardımcı olur.
2. Şimdi aşağıda aynı Get-PSReadlineKeyHandler komutunu çalıştırın, ancak bu sefer -Unbound parametrelerini ekleyin. Bunu yapmak Get-PSReadlineKeyHandler komutuna yalnızca ilişkisiz anahtarları yazdırmasını söyler.
Herhangi bir tuşa veya tuş kombinasyonuna eşlenmemiş işlevlerin bir listesini göreceksiniz.
Get-PSReadlineKeyHandler -UnboundAyrıca, ilişkisiz anahtarların uzun bir listesini de aldığınızı görebilirsiniz.
3. Geçmiş işlevleri bölümüne ilerleyin; BeginningOfHistory komutunun Sınırsız olduğunu göreceksiniz.
4. Şimdi, bir çıktı sağlamayan ancak BeginningOfHistory işlevini Ctrl+b tuş birleşimine bağlayan aşağıdaki Set-PSReadlineKeyHandler komutunu çalıştırın.
Ctrl+b tuş birleşiminin içinde boşluk olmadığından emin olun.
Tuş kombinasyonunun büyük/küçük harfe duyarlı olduğunu unutmayın. Ctrl+b tuş birleşimi Ctrl+B ile aynı değildir. Yani isteğe bağlı olarak Ctrl+B'yi farklı bir işleve bağlayabilirsiniz.
Set-PSReadLineKeyHandler -Chord Ctrl+b -Function BeginningOfHistoryAnahtar bağlamanız birden fazla tuş dizisinden oluşuyorsa, tuş dizilerini iki nokta üst üste ile ayırın: Ctrl+X:Ctrl+L.
5. Son olarak Ctrl+b tuş birleşimine basın; PowerShell, aşağıda gösterildiği gibi geçmişinizdeki ilk komutu getirir.
Otomatik Komut Önerisini Etkinleştirme
Geçmişinizde çok sayıda komut varsa yeniden çalıştırmak istediğiniz komutu bulmak zor olabilir. Daha önce tonlarca komut çalıştırdıysanız, Yukarı ve Aşağı ok tuşlarıyla hedef komutunuzu bulmak sıkıcı hale gelir. Peki otomatik komut önerisi nasıl ses çıkarıyor?
PSReadline, PSReadLineOption ile komut geçmişi önerileri sağlayabilir. Bu özellik, geçmişte kullandığınız komutlara göre yazmanızı tamamlar.
Çıktı sağlamayan ancak komut geçmişi önerileri özelliğini etkinleştiren aşağıdaki komutu çalıştırın.
Set-PSReadLineOption -PredictionSource History
Şimdi hedef komutunuzun bir bölümünü yazmaya başlayın; PowerShell'in geçmişinize göre olası komutlar önerdiğini göreceksiniz. Satır içi gölge metni, Sağ ok tuşuna bastığınızda nelerin tamamlanacağını gösterir.
Öneriyi kabul etmek için Sağ ok tuşuna basın ve komutu çalıştırmak için Enter tuşuna basın.
Komut Satırı Tahmincisi Oluşturma
PowerShell'deki tuş bağlamalarını özelleştirmek, çalışmanızı daha hızlı ve daha kolay hale getirmenin harika bir yoludur. PSReadLine 2.x.x, kendi akıllı komut satırı tahmincinizi oluşturmanıza olanak tanıyarak bu özelliği daha da genişletir.
Bir komut satırı (CLI) tahmincisi oluşturmak için, bir komut satırı (CLI) tahmincisi oluşturmak üzere Predictive IntelliSense özelliğini kendi kodunuza uygulayacaksınız. Bu CLI tahmincisi, siz yazarken üzerinde çalıştığınız bağlama hangi cmdlet'in veya işlevin uygun olabileceğine dair öneriler sağlar. Öneriler komut geçmişinize ve özel etki alanı eklentilerinize dayanmaktadır.
Bu özelliği kullanmak için PowerShell 7.2+ ve PSReadLine 2.2.2+ sürümüne ihtiyacınız vardır. PowerShell'in varsayılan 5.1 sürümü bu özelliği desteklemez.
Bir komut satırı tahmincisi oluşturmak için (PowerShell modülü):
1. Çalışma dizininizde temel bir .NET Sınıf Kitaplığı projesi oluşturmak için aşağıdaki dotnet komutunu çalıştırın. Projeyi istediğiniz gibi adlandırabilirsiniz ancak bu eğitim için projeye SamplePredictor adı verilmiştir.
dotnet new classlib --name SamplePredictor2. Proje klasörünüzdeki (SamplePredictor) SamplePredictor.csproj dosyasını tercih ettiğiniz metin düzenleyicide açın.
3. Şimdi SamplePredictor.csproj dosyasının içeriğini aşağıdaki kodla değiştirin.
Bu kod, derleyiciye bu projenin .NET 6,0'ı hedeflediğini ve PowerShell SDK'ya bir başvuru içerdiğini bildirir.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.PowerShell.SDK" Version="7.2.0" />
</ItemGroup>
</Project>4. Ardından, proje klasöründeki (SamplePredictor) varsayılan Class1.cs dosyasını silin.
5. Metin düzenleyicinizde yeni bir SamplePredictorClass.cs dosyası oluşturun ve kodu, dahil edilen ATA GitHub deposundan kopyalayıp yapıştırın.
Bu kod, tahmincinizi kullanılabilmesi için PowerShell'e kaydeder, ardından modül kaldırıldığında kaydını siler. Aynı zamanda bu kod tahminciniz çağrıldığında “HELLO WORLD” mesajını döndürür.
Kod bloğunun üst kısmına yakın bir yerde bildirilen bir tanımlayıcı değişkeni fark edeceksiniz. Bu tanımlayıcı, PowerShell'in izleyebilmesi için tahmincinizi benzersiz şekilde tanımlayan bir GUID'dir.
6. Şimdi projenizi oluşturmak için proje klasörünüzün (SamplePredictor) içinde aşağıdaki dotnet build komutunu çalıştırın. Bu komut, .dll (PowerShell modülünüz) uzantılı bir derleme dosyası oluşturur.
Bu .dll dosyası, proje klasörünüzün (SamplePredictor) içindeki bin/Debug/net6.0 konumunda bulunur.
dotnet buildArtık PowerShell oturumunuza aktarmanız gereken bir PowerShell modülünüz var (sekizinci adım).
7. .dll dosyanızın var olduğunu doğrulamak için SamplePredictor/bin/Debug/net6.0 klasörünüze gidin.
8. Çıktı sağlamayan ancak aşağıdakileri gerçekleştiren aşağıdaki komutları çalıştırın:
- Set-PSReadLineOption cmdlet'i PowerShell'e oluşturduğunuz tahminciyi (-PredictionSource HistoryAndPlugin) kullanmasını söyler.
- Import-Module cmdlet'i modülünüzü PowerShell oturumunuza aktarır.
Set-PSReadLineOption -PredictionSource HistoryAndPlugin
Import-Module .\bin\Debug\net6.0\SamplePredictor.dll9. Şimdi kayıtlı komut tahmincilerinin listesini görmek için aşağıdaki Get-PSSubsystem komutunu çalıştırın.
Get-PSSubsystem -Kind CommandPredictorTahmincinizin aşağıda gösterildiği gibi listede göründüğünü göreceksiniz.
10. Son olarak istemde herhangi bir şey yazın; tahmincinizin çalıştığını doğrulayan satır içi bir gölge önerisinin göründüğünü göreceksiniz. Artık başarıyla bir PowerShell komut tahmincisi yazdınız!
Çözüm
Bu eğitimde PSReadline modülünü kurmayı ve PowerShell'in özelliklerini kendi lehinize özelleştirmeyi öğrendiniz. C# dilini kullanarak, çıkardığı mesajı veya işlevselliğini değiştirerek daha da özelleştirebileceğiniz özel bir komut tahmincisi oluşturdunuz.
Artık PSReadline modülüyle çalışma konusunda sağlam bir bilgiye sahipsiniz. Ama burada durma! Tahminciniz için neden Microsoft Yardım İşaretleme Dili'ni (MAML) kullanarak bir yardım sayfası oluşturmuyorsunuz? Bir yardım sayfasıyla kullanıcılarınıza tahmin aracınızı ve yeteneklerini nasıl kullanacaklarını bildirin!















