PowerShell Türü Uzantılarıyla Verimlilik Ekleme


Geçen gün, Update-TypeData'ya bir göz atarak tamamlanan özel özellikler hakkında bir makale yayınladım. Amaç, komut dosyalarınızın veya modüllerinizin kullanımını kolaylaştırmak değil, komut isteminin verimliliğini artırmaktır. Komutları etkileşimli olarak çalıştırırken ihtiyacım olan bilgiyi mümkün olduğunca kolay bir şekilde almak istiyorum. PowerShell profil komut dosyalarımda hayatımı kolaylaştıracak bir dizi tür uzantısını tanımlayan kodum var. Bunlardan bazılarını sizinle paylaşayım dedim.

Görünüşe göre PowerShell'deki dosyalarla çalışmak için çok zaman harcıyorum, bu nedenle System.IO.FileInfo nesnesine bazı tür uzantıları eklemek için kodum var. Örneğin, "Boyut"u "Uzunluk"a tercih ediyorum, bu nedenle takma ad özelliği oluşturmak oldukça basittir.

Update-TypeData -TypeName System.IO.FileInfo -MemberType AliasProperty -MemberName Size -Value Length -force

Ancak birkaç takma ad özelliğim var, bu nedenle takma adlardan oluşan bir karma tablom ve Update-TypeData'ya ilettiğim değerleri var.

$aliases = @{
Size = "length"
Modified = "LastWriteTime"
Created = "CreationTime"
}

$aliases.GetEnumerator() | foreach {
 Update-TypeData -TypeName System.IO.FileInfo -MemberType AliasProperty -MemberName $_.key -Value $_.value -force
}

Bu eklemelerle şunun gibi komutları çalıştırabilirim:

Kendimi özellikle tembel hissettiğimde Uzunluk için 'sz' ve LastWriteTime için 'lwt' gibi takma adlarım vardı. Ama bunun bile çok uzak olduğuna karar verdim.

Ayrıca ölçüm nesneleri için uzantılarım var. Her zaman böyle bir kod çalıştırırdım:

dir c:\work -file | Measure-object -Property length -sum |
Select Count,@{Name="SumKB";Expression={$_.sum/1kb}}

Yine yazılması daha kolay bir şey istiyorum. Profilimde, Measureinfo nesnesi için script özellik tipi uzantılarını tanımlıyorum.

Update-TypeData -TypeName Microsoft.PowerShell.Commands.GenericMeasureInfo -MemberType ScriptProperty -MemberName SumKB -Value {[math]::Round($this.sum/1KB,2)} -Force
Update-TypeData -TypeName Microsoft.PowerShell.Commands.GenericMeasureInfo -MemberType ScriptProperty -MemberName SumMB -Value {[math]::Round($this.sum/1MB,2)} -Force
Update-TypeData -TypeName Microsoft.PowerShell.Commands.GenericMeasureInfo -MemberType ScriptProperty -MemberName SumGB -Value {[math]::Round($this.sum/1GB,2)} -Force

Bir toplam belirtmezsem özellik değerleri 0 olur.

Ama değere ihtiyacım olduğunda o orada.

Bu da PowerShell komutlarımı yazmayı çok daha kolay hale getiriyor.

dir c:\scripts -file | group extension | 
Select Count,Name,
@{Name="SizeKB";Expression={($_.group | Measure length -sum).sumkb}} |
sort SizeKB  -Descending | select -first 10

Yine söylüyorum, bu eklentiler sadece konsoldaki hayatımı kolaylaştırmak için. Hayatınızı kolaylaştıran şey nedir?

İlgili makaleler