Die Powershell-Länge wird in der Ausgabe von Get-ChildItem nicht angezeigt

Dec 20 2020

Ich versuche diesen Befehl in Windows 10 PowerShell:

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

Das Ergebnis enthält nur FullName, während LastAccessTimeund Lengthfehlt in der Ausgabe.

PowerShell-Screenshot

Was mache ich falsch?

Antworten

1 AshokPrasath Dec 20 2020 at 23:34

Das wird funktionieren:

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

3 mklement0 Dec 21 2020 at 01:07

Das Problem ist lediglich ein Anzeigeproblem :

  • Da die Pfade zwischen den Ausgabeobjekten lang sind und FullNamedie erste ausgewählte Eigenschaft ist, werden die verbleibenden Eigenschaften (Spalten) nicht gedruckt , da sie nicht auf den Bildschirm passen. Die Eigenschaften sind jedoch vorhanden und können programmgesteuert verwendet werden.

  • Hinweis: Wenn Sie zur späteren programmgesteuerten Verarbeitung in einer Datei speichern möchten , sollten Sie >/ nicht verwenden . Out-FileDies führt zu derselben Formatierung für die Anzeige , die Sie in der Konsole (im Terminal) sehen, da diese Formatierung nur für die bestimmt ist menschlicher Beobachter .

    • Für programmatische Bearbeitung , verwenden Sie ein strukturiertes Datenformat wie CSV , wie in gezeigt Ashok Prasath Antwort

Problemumgehungen :

  • Eine schnelle und schmutzige Problemumgehung besteht darin , die FullNameEigenschaft als letzte zu setzen , wie Doug Maurer empfiehlt. Dadurch werden alle Eigenschaften (Spalten) angezeigt, obwohl die FullNameEigenschaftswerte abgeschnitten (symbolisiert mit ) werden, insbesondere vom Beginn der Pfade an:

    # FullName is placed *last*
    # Caveat: Paths will be truncated at the *end*.
    Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
    
  • Wenn Sie nichts dagegen nicht auf eine Schaltliste -basierten Format , wobei jeder Eigenschaftswert in einer eigenen Zeile von dem Eigenschaftsnamen voran dargestellt wird, Rohr Format-List; Beachten Sie, dass zu lange Werte in Zeilenumbrüche umgewandelt werden :

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
    
  • Wenn Sie eine tabellarische Ausgabe wünschen und es Ihnen nichts ausmacht, Zeilenumbrüche in Ihre Ausgabe einzufügen , können Sie Out-Stringmit einem -WidthWert weiterleiten, der groß genug ist, um in alle Spalten zu passen (beachten Sie, dass dies Out-Fileauch unterstützt wird -Width):

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
      Out-String -Width 300
    
    • Wenn Sie das horizontale Scrollen dem Zeilenumbruch vorziehen , können Sie das Obige in einer Datei speichern und darin einen Texteditor öffnen oder mit einem Texteditor wie Visual Studio Code die Ausgabe direkt an diese weiterleiten :

      # Opens the output directly in a new Visual Studio Code editor tab.
      Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
        Out-String -Width 300 | code -
      
  • Andernfalls können Sie - wenn Sie die tabellarische Anzeige in der Konsole in der angegebenen genauen Spaltenreihenfolge und ohne Zeilenumbruch anzeigen möchten, die Werte nur abschneidenFullName , damit alle Spalten passen. Beachten Sie, dass ich der Kürze halber den Aufruf select( Select-Object) zugunsten der direkten Verwendung von Format-Table:

    Get-ChildItem -Recurse |
      Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'},
                   Length, LastAccessTime
    
    • Beachten Sie, wie die Spaltenbreite ( wEintrag, Abkürzung für width) auf den Konsolenfenstern mit ( [Console]::WindowWidth) Minuszeichen basiert 45, um so viele FullNameWerte wie möglich anzuzeigen und gleichzeitig Platz für die beiden anderen Spalten zu lassen. auch, um diese Abschneiden (symbolisiert zu gewährleisten mit dem angelegten wird Anfang des Weges - so dass Datei- / Verzeichnisname immer angezeigt wird - die Spalte rechtsbündig (über den aEintrag, kurz für alignment); wenn Sie Abschneiden der bevorzugen Ende Lassen Sie den aEintrag des Pfads weg (der dann standardmäßig lautet left).

    • Weitere Informationen zu dieser hashtable-basierten ( @{ ... }) Methode zum Angeben sogenannter berechneter Eigenschaften für Format-Table, einschließlich einer Methode zum Abschneiden von Anfang an unter Beibehaltung der linken Ausrichtung, finden Sie in dieser Antwort .