PowerShell Özellik Kurtarmaya Hazırlanıyor


Eğer siz de benim gibiyseniz ve gününüzün çoğunu PowerShell isteminde geçiriyorsanız, bu süreci basitleştiren her şeyi öğrenmeye veya kurmaya zaman ayırmaya değer. İyi bir daktilo olmama rağmen, PowerShell komut isteminde daha az yazmanın yollarını bulduğum için çok mutluyum. Zaten sekme tamamlama ve PSReadline özelliklerinden yararlanıyorum. Ancak her zaman yapılacak daha çok şey vardır. İlişki kurabileceğinizi düşündüğüm durum şu.

Diyelim ki konsol komut isteminden sık sık buna benzer bir PowerShell komutu çalıştırıyorum.

Get-Childitem c:\work -file | Select-Object -Property "Name","Length","CreationTime","LastWriteTime" 

Dosyaları kullanıyorum, ancak bu, sürekli olarak aynı özellik adları koleksiyonunu istediğiniz herhangi bir komut olabilir. Özellik adları için değişken oluşturabilirim.

$p = "Name","Length","CreationTime","LastWriteTime"
dir c:\work -file | select $p 

Ancak bu değişkeni her zaman tanımlamayı hatırlamam gerekir. Bunu PowerShell profilimde tanımlayabilirim ama daha iyi bir yol var.

Özellik Setleri

PowerShell'in genişletilebilir tür sistemi (ETS), özellik kümesi adı verilen bir şeye olanak tanır. Bu, tek bir özellik adıyla başvuruda bulunabileceğiniz bir özellikler koleksiyonudur. Get-Process'in süreç nesnesi varsayılan olarak bunlardan birkaçını içerir.

Kendin deneyebilirsin.

get-Process | Select psconfiguration

4 özellik adını yazmak yerine yalnızca bir tane yazmanız yeterlidir. Sekme tamamlamayı daha da az kullanıyorsunuz! Örnek senaryomda yazma yükümü hafifletmek için dosya nesneleri için bir özellik kümesi istiyorum.

Yeni-PSPropertySet

Şimdi o kadar da kolay olmayan kısıma geçelim. Takma ad özelliği gibi diğer tür uzantılarını oluşturmak Update-TypeData ile basittir. Ancak bir özellik kümesi yalnızca daha sonra Update-TypeData kullanılarak içe aktarılan bir .ps1xml dosyasında tanımlanabilir. Ah. Kim XML oluşturmak ister? Bu yüzden "hile yaptım" ve bunu benim için yapması için bir komut yazdım.

New-PSPropertySet adında yeni bir işlev eklemek için PSTypeExtensionTools modülümü güncelledim. .ps1xml dosyasını kolayca oluşturmak için bu işlevi kullanabilirim. PSTypeExtensionTools modülünü PowerShell Galerisinden yükleyebilirsiniz. V1.71 veya sonraki bir sürüme ihtiyacınız olacak.

Bir uzantı oluşturmak için tür adını bilmeniz gerekir. Get-Member'a ilettiğinizde gördüğünüz şey budur. İşte ne kadar kolay.

New-PSPropertySet -Typename System.IO.FileInfo -Name TimeSet -Properties "Name","Length","CreationTime","LastWriteTime" -FilePath c:\work\file.types.ps1xml

Özellik kümem TimeSet olarak adlandırılacak ve belirtilen özellikleri kullanacak. İçe aktarabilmeniz için ps1xml dosya uzantısını kullanmanız gerekir.

Update-TypeData C:\work\file.types.ps1xml

Artık bu özelliği kullanabilirim.

Bu şekilde kaldığım sürece PSTypeExtensionTools modülünden başka bir komutla yeni tip uzantılar oluşturup ardından yeni bir özellik seti tanımlayacağımı düşünüyorum.

Add-PSTypeExtension -TypeName system.io.fileinfo -MemberType AliasProperty -MemberName Size -Value Length
Add-PSTypeExtension -TypeName system.io.fileinfo -MemberType ScriptProperty -MemberName ModifiedAge -Value {New-TimeSpan -Start $this.lastwritetime -End (Get-Date)}
New-PSPropertySet -Typename system.io.fileinfo -Name Age -Properties Name,Size,LastWriteTime,ModifiedAge -Append -FilePath C:\work\file.types.ps1xml

Yeni özellik kümesini yüklemedim ancak özellikleri test edebilirim.

Modül, JSON veya XML kullanarak tür uzantılarını dışa ve içe aktarmaya yönelik mekanizmalara sahiptir. Ancak bir özellik kümem olduğundan, tür uzantılarını da dahil edebilirim.

Export-PSTypeExtension -TypeName system.io.fileinfo -MemberName Size,ModifiedAge -Path c:\work\file.types.ps1xml -append
Update-TypeData C:\work\file.types.ps1xml

Mevcut bir uzantıyı tanımlamaya çalışan bir dosyayı yeniden içe aktarırsanız PowerShell bir istisna oluşturur. .ps1xml dosyası kullanıldığında güncellemeyi zorlama olanağı yoktur. Ancak yeni ayarlar oluşturulacak.

Artık Size gibi istediğim özellik adlarıyla sonuçlar alabiliyorum, ModifiedAge gibi yeni özellikler oluşturabiliyorum ve Age gibi bir grup özelliğe küme olarak başvuru yapabiliyorum . Tek yapmam gereken PowerShell profil betiğime Update-TypeData komutunu eklemek.

Umarım bunu benim kadar faydalı bulursunuz. Yorum veya soru bırakmaktan çekinmeyin.

İlgili makaleler