Ben dinamik olarak şimdi, sözdizimi kullanabilirsiniz FileObject (a "komut dosyası özelliği" olarak adlandırılan) bir özelliği nasıl ekleneceğini anladım
(düzenle): boyutu okumak için $ theFileObject.CompressedSize.
(düzenleme sonu)
Oku Goyuix tepkisi, ben de "Serin ama PowerShell tip uzatma yeteneği çeşit yok?" Diye düşündüm. Sonra bu Scott Hanselman yazısını buldum: http://www.hanselman.com/blog/MakingJunctionsReparsePointsVisibleInPowerShell.aspx Ve FileInfo nesnesi için bir Script Özelliği oluşturdum: CompressedSize. (Not: Burada
ne yaptım ben PowerShell için oldukça yeni, ya da en azından ben bu muhtemelen çok daha iyi yapılabilir pek kullanmıyorum yok, ama burada öyle yaptım.
Birincisi, Goyuix en görevinden Ntfs.ExtendedFileInfo derlenmiş. Ben PowerShell profili dizininde DLL koymak (Belgeler WindowsPowerShell \)
ileri, ben My.Types.ps1xml adlı Profilimi dizininde bir dosya oluşturdum.
Aşağıdaki XML dosyasını şu dosyaya koydum:
<Types>
<Type>
<Name>System.IO.FileInfo</Name>
<Members>
<ScriptProperty>
<Name>CompressedSize</Name>
<GetScriptBlock>
[Ntfs.ExtendedFileInfo]::GetCompressedFileSize($this.FullName)
</GetScriptBlock>
</ScriptProperty>
</Members>
</Type>
</Types>
Bu kod (bir kez tip sistemde birleştirildiğinde), get-childitem/dir tarafından döndürülen FileInfo nesnelerine CompressedSize adlı bir özelliği dinamik olarak ekleyecektir.Ancak Powershell henüz kod hakkında bilgi sahibi değil ve henüz benim DLL'imi bilmiyor. Bunu sonraki adımda ele alıyoruz:
Edit Profile. aynı dizinde. Şimdi, Profil dosyamda, içinde powershell için Topluluk Eklentileri yüklü olduğu için zaten bir şeyler yapılıyor. Umarım, bir sonraki kod snippet'inde ihtiyacınız olan her şeyi dahil ederim, böylece uzantıları olmayan bir makinede bile çalışır. Profile.ps1 için aşağıdaki kodu ekleyin:
#This will load the ExtendedfileInfo assembly to enable the GetCompressedFileSize method. this method is used by the
#PSCompressedSize Script Property attached to the FileInfo object.
$null = [System.Reflection.Assembly]::LoadFile("$ProfileDir\ntfs.extendedfileinfo.dll")
#merge in my extended types
$profileTypes = $ProfileDir | join-path -childpath "My.Types.ps1xml"
Update-TypeData $profileTypes
Şimdi, başvuru $ ProfileDir değişken Daha önceki Profile.ps1 komut tanımlanır. Sadece sizinki durumunda değil, işte buradaki tanım:
$ProfileDir = split-path $MyInvocation.MyCommand.Path -Parent
Bu kadar. Powershell'i bir sonraki çalıştırmanızda FileInfo nesnesindeki CompressedSize özelliğine herhangi bir başka özellik gibi erişebilirsiniz. Örnek:
$ myFile = dir c: \ temp \ myfile.txt
$ myFile.CompressedSize
Bu (her neyse, benim makinede) çalışır, ama uyup uymadığını duymak isteriz En iyi uygulamalarla. Bildiğim bir şey yanlış yapıyorum: Profile.ps1 dosyasında LoadFile sonuçlarını kullanamayacağım bir değişkene döndürüyorum ($ null = blah blah). Bunu, yükleme dosyasının sonucunu konsola göstermek için yaptım. Muhtemelen bunu yapmanın daha iyi bir yolu vardır.
adresinde açıklanmıştır kullanılmayan küme alanı nedeniyle israf diskte boşluk istiyor musunuz? (Bu, MFT'deki satır içi nedeniyle küçük dosyalar ile zor) ya da sadece sıkıştırılmış boyuttur. – ShuggyCoUk