Panjang Powershell tidak akan muncul dalam keluaran Get-ChildItem
Saya mencoba perintah ini di Windows 10 PowerShell:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime
Hasilnya hanya berisi FullName
, sementara LastAccessTime
dan Length
hilang dari keluaran.
PowerShell ScreenShot
Apa yang saya lakukan salah?
Jawaban
Ini akan berhasil:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv
Masalahnya hanyalah masalah tampilan :
Karena jalur di antara objek output panjang dan
FullName
merupakan 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
FullName
properti terakhir , seperti yang disarankan Doug Maurer , yang akan membuat semua properti (kolom) ditampilkan, meskipun nilaiFullName
properti 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
-Width
nilai 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
FullName
nilai-nilai sehingga semua kolom dapat ditampung; perhatikan bahwa, untuk singkatnya, saya menghilangkan panggilanselect
( 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 (
w
entri, kependekan dariwidth
) didasarkan pada jendela konsol dengan karakter ([Console]::WindowWidth
) minus45
, untuk menampilkanFullName
nilai 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 (melaluia
entri, kependekan darialignment
); jika Anda lebih suka pemotongan bagian akhir jalan, menghilangkan yanga
masuk (yang kemudian defaultnyaleft
).Untuk informasi selengkapnya tentang
@{ ... }
cara berbasis hashtable ( ) ini untuk menentukan apa yang disebut properti terhitung untukFormat-Table
, termasuk cara memotong dari awal sekaligus mempertahankan perataan kiri , lihat jawaban ini .