Ve uygun düzenlemeler sonrasında şu şekilde:
Satır genişliğindeki değişme, bu düzenlemeler sonucunda değil, bu kısmı göz ardı edelim. Odaklanmamız gereken Get-ChildItem ile başlayan satırdaki renklenme. Bunu sağlamak için öncelikle profile.ps1 dosya şu şekilde bir prompt fonksiyonu ekledim:
function Prompt
{
$promptString = "PS " + (Get-Date -Format t) + " " + $(Get-Location) + ">"
Write-Host $promptString -NoNewline -ForegroundColor Cyan
return " "
}
Bunun sonucunda PS kısaltmasından hemen sonra saat ve dakikayı içeren saat bilgisi, ve dosya sistemindeki mevcut konumumu gösteren klasör yolunu renkli olarak aldım. Profile.ps1 dosyasının konumu da Belgelerim klasörümün içinde WindowsPowershell klasörünün içinde olmalıdır. Belgelerim klasörümün konumunu öğrenmek için
PS> [environment]::getfolderpath("mydocuments")yazabilirim.
Burada yaptığım bir renklendirme de Windows 10 ile varsayılan olarak yüklü gelen PSGallery modülü PSReadLine'ı yüklemek oldu. Bunun sonucunda cmdlet'ler ile parametrelerim farklı renkli görünmeye başladı. Ayrıca kapatılmamış bir tırnak veya parantez varsa prompt'un sonundaki '>' işaretinin de rengi kırmızıya dönüşüyor. Görsel olmayan bir büyük fark da klavye kısayollarının gelmesi. cmd.exe'de var olmayan son kelimeyi silme kısayolu olarak Ctrl+Backspace varsayılan ataması geliyor. Değiştirmek için
Set-PSReadLineKeyHandler -Chord Ctrl+w -Function BackwardDeleteWordgibi atamalar kullanılabilir.
PSReadline modülünün bir güzelliği de pencereler kapatılsa bile silinmeyen bir komut geçmişine (history) sahip olması. Bu komut geçmişini
Get-PSReadlineOption
cmdlet'inin çıktısındaki HistorySavePath değişkeninde bulabiliriz. İlginç olan yukarı ve aşağı ok tuşlarıyla komut geçmişinde gezinmek mümkün, ama Get-History ile bu geçmişi göremiyoruz. Eğer Get-History / Invoke-History gibi komutları kullanmayı tercih ediyorsak PSReadlineHistory modülünü yükleyerek bu iki komutun eşdeğeri olan Get-PSReadlineHistory / Invoke-PSReadlineHistory gibi komutlara sahip olabiliriz. İleride bizi bekleyen bir sorun; komut geçmişinin binlerce satırdan oluşması. Bu durumda shell penceresinin açılışı çok uzun sürebilir. Bu durumlar için geliştirilen cmdlet Optimize-PSReadlinehistory. Komut geçmişinin boyutu sınırlandırılabilir, belli bir karakterden uzun olmayan komutlar silinebilir, ya da tekrarlayan komutlardan kurtulunabilir. Komut geçmişi de
%appdata%\Microsoft\Windows\Powershell\PSReadLine\ConsoleHost_history.txt
dosyasında saklanır, doğrudan müdahale etmek istenirse.
BONUS: Açılan pencerenin yönetici olarak açılıp açılmadığını başlık çubuğunda yazan Administrator kelimesinden anlayabiliriz. Ama ayrıca komut satırında da bununla ilgili bir belirteç görmek istersek bu ayrımı yapabilmek için şu yöntem kullanılabilir:
if ((whoami /all | select-string S-1-16-12288) -ne $nullBu şekilde yönetici ayrıcalıklarıyla açılan pencerenin komut satırında koyu yeşil fon üzerine beyaz bir # işareti, normal kullanıcı yetkileriyle açılanda ise yeşil bir > işareti görüntülenebilir.
{
Write-Host "#" -ForegroundColor White -BackgroundColor DarkGreen -NoNewline
}
else
{
Write-Host ">" -ForegroundColor Green -NoNewline
}
Şu sayfadaki
if ((New-Object Security.Principal.WindowsPrincipal(
[Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(
[Security.Principal.WindowsBuiltInRole]::Administrator))
{
Write-Output "Elevated."
}
else
{
Write-Output "Not elevated."
}
{
$clockGlyph = [char]0x23F0
$hourglassGlyph = [char]0x23F3
$winlogo = [char]0xE70F
Write-Host "$clockGlyph"(Get-Date -Format "(dd, dddd) HH:mm") " " -ForegroundColor Red -BackgroundColor White -NoNewline
if ((Get-History).Length -gt 0)
{
$LastExecutionTime = "{0:N0}" -f ((Get-History)[-1].EndExecutionTime - (Get-History)[-1].StartExecutionTime).TotalMilliSeconds
}
else
{
$LastExecutionTime = "0"
}
Write-Host "$hourglassGlyph $LastExecutionTime ms " -ForegroundColor Red -BackgroundColor Yellow -NoNewLine
Write-Host (Get-Location) -ForegroundColor Cyan
Set-PSReadLineOption -PromptText "$winlogo > "
Write-Host "$winlogo >" -NoNewline
# if required to diplay path in the title bar:
# $host.ui.rawui.WindowTitle = (Get-Location)
return " "
}
oh-my-posh kullanmayan bir terminal yapmak istedim. İki satırlık bir prompt, uzun komutlarda ekrana sığması açısından faydalı oluyor. Solda bulunduğumuz klasörün tam yolunu yazan, sağda ise batarya durumumuzla tarih ve saati yazan, ikinci satırda ise bir önceki işlemin ne kadar sürdüğünü (ekran görüntüsünde 10ms'den az olduğu için gözükmemiş), eğer yükseltilmiş yetkilerle açılmış bir terminal penceresi ise bir pacman canavarı ile bunu belirten ve sonrasında prompt karakterlerini gösteren bir prompt fonksiyonunu şu şekilde özelleştirdim:
https://docs.microsoft.com/en-us/powershell/module/psreadline/?view=powershell-6
Hiç yorum yok:
Yorum Gönder