Panjang Powershell tidak akan muncul dalam keluaran Get-ChildItem

Dec 20 2020

Saya mencoba perintah ini di Windows 10 PowerShell:

Get-ChildItem -Recurse | select FullName,Length,LastAccessTime

Hasilnya hanya berisi FullName, sementara LastAccessTimedan Lengthhilang dari keluaran.

PowerShell ScreenShot

Apa yang saya lakukan salah?

Jawaban

1 AshokPrasath Dec 20 2020 at 23:34

Ini akan berhasil:

Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv

3 mklement0 Dec 21 2020 at 01:07

Masalahnya hanyalah masalah tampilan :

  • Karena jalur di antara objek output panjang dan FullNamemerupakan properti pertama yang dipilih, properti (kolom) yang tersisa tidak dicetak , karena tidak bisa muat di layar. Namun, sifat yang hadir, dan dapat digunakan pemrograman.

  • Catatan: Jika tujuannya adalah untuk menyimpan ke file untuk pemrosesan terprogram nanti , Anda tidak boleh menggunakan >/ Out-File, yang menghasilkan pemformatan tampilan yang sama seperti yang Anda lihat di konsol (terminal), karena pemformatan ini dimaksudkan hanya untuk pengamat manusia .

    • Untuk pemrosesan terprogram , gunakan format data terstruktur seperti CSV , seperti yang ditunjukkan dalam jawaban Ashok Prasath

Solusi :

  • Solusi cepat dan kotor adalah menempatkan FullNameproperti terakhir , seperti yang disarankan Doug Maurer , yang akan membuat semua properti (kolom) ditampilkan, meskipun nilai FullNameproperti akan dipotong (dilambangkan dengan ), dan terutama dari awal jalur:

    # FullName is placed *last*
    # Caveat: Paths will be truncated at the *end*.
    Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
    
  • Jika Anda tidak keberatan beralih ke format berbasis daftar , di mana setiap nilai properti direpresentasikan pada barisnya sendiri yang diawali dengan nama properti, pipa ke Format-List; perhatikan bahwa nilai yang terlalu panjang akan membungkus baris :

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
    
  • Jika Anda memang menginginkan keluaran tabular dan tidak keberatan penggabungan baris dalam keluaran Anda, Anda dapat menyalurkan ke Out-Stringdengan -Widthnilai yang cukup besar untuk memuat semua kolom (perhatikan yang Out-Filejuga mendukung -Width):

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
      Out-String -Width 300
    
    • Jika Anda lebih suka pengguliran horizontal daripada penggabungan garis, Anda dapat menyimpan di atas ke file dan membukanya di dalamnya editor teks atau, dengan editor teks seperti Visual Studio Code , Anda dapat langsung menyalurkan output ke sana:

      # Opens the output directly in a new Visual Studio Code editor tab.
      Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
        Out-String -Width 300 | code -
      
  • Jika tidak - jika Anda ingin melihat tabel tampilan di konsol , dalam urutan kolom yang tepat yang ditetapkan dan tanpa garis-pembungkus - satunya pilihan Anda adalah untuk memotong dengan FullNamenilai-nilai sehingga semua kolom dapat ditampung; perhatikan bahwa, untuk singkatnya, saya menghilangkan panggilan select( Select-Object) untuk mendukung penggunaan langsung dari Format-Table:

    Get-ChildItem -Recurse |
      Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'},
                   Length, LastAccessTime
    
    • Perhatikan bagaimana lebar kolom ( wentri, kependekan dari width) didasarkan pada jendela konsol dengan karakter ( [Console]::WindowWidth) minus 45, untuk menampilkan FullNamenilai sebanyak mungkin sambil tetap menyisakan ruang untuk dua kolom lainnya; juga, untuk memastikan bahwa pemotongan (disimbolkan dengan diterapkan ke awal jalur - sehingga nama file / direktori selalu ditampilkan - kolom diratakan kanan (melalui aentri, kependekan dari alignment); jika Anda lebih suka pemotongan bagian akhir jalan, menghilangkan yang amasuk (yang kemudian defaultnya left).

    • Untuk informasi selengkapnya tentang @{ ... }cara berbasis hashtable ( ) ini untuk menentukan apa yang disebut properti terhitung untuk Format-Table, termasuk cara memotong dari awal sekaligus mempertahankan perataan kiri , lihat jawaban ini .