La longueur de Powershell n'apparaîtra pas dans la sortie de Get-ChildItem

Dec 20 2020

J'essaye cette commande dans Windows 10 PowerShell:

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

Le résultat contient uniquement FullName, while LastAccessTimeet Lengthest absent de la sortie.

ScreenShot PowerShell

Qu'est-ce que je fais mal?

Réponses

1 AshokPrasath Dec 20 2020 at 23:34

Cela fonctionnera:

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

3 mklement0 Dec 21 2020 at 01:07

Le problème est simplement un problème d' affichage :

  • Étant donné que les chemins parmi les objets de sortie sont longs et qu'il FullNames'agit de la première propriété sélectionnée, les propriétés restantes (colonnes) ne s'impriment pas , car elles ne peuvent pas tenir à l'écran. Cependant, les propriétés sont présentes et peuvent être utilisées par programme.

  • Remarque: Si l'intention est d'enregistrer dans un fichier pour un traitement par programmation ultérieur , vous ne devez pas utiliser >/ Out-File, qui entraîne le même formatage d' affichage que celui que vous voyez dans la console (terminal), car ce formatage est uniquement destiné au observateur humain .

    • Pour le traitement par programmation , utilisez un format de données structuré tel que CSV , comme indiqué dans la réponse d'Ashok Prasath

Solutions de contournement :

  • Une solution de contournement rapide consiste à mettre la FullNamepropriété en dernier , comme le conseille Doug Maurer , ce qui fera apparaître toutes les propriétés (colonnes), bien que les FullNamevaleurs de propriété soient tronquées (symbolisées par ), et notamment à partir du début des chemins:

    # FullName is placed *last*
    # Caveat: Paths will be truncated at the *end*.
    Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
    
  • Si cela ne vous dérange pas de passer à un format basé sur une liste , où chaque valeur de propriété est représentée sur sa propre ligne précédée du nom de la propriété, dirigez vers Format-List; notez que les valeurs trop longues seront bouclées :

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
    
  • Si vous voulez une sortie tabulaire et que cela ne vous dérange pas le retour à la ligne dans votre sortie , vous pouvez diriger Out-Stringavec une -Widthvaleur suffisamment grande pour s'adapter à toutes les colonnes (notez que cela Out-Fileprend également en charge -Width):

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
      Out-String -Width 300
    
    • Si vous préférez le défilement horizontal au retour à la ligne, vous pouvez enregistrer ce qui précède dans un fichier et y ouvrir un éditeur de texte ou, avec un éditeur de texte tel que Visual Studio Code , vous pouvez directement diriger la sortie vers celui-ci:

      # Opens the output directly in a new Visual Studio Code editor tab.
      Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
        Out-String -Width 300 | code -
      
  • Sinon - si vous voulez voir un affichage tabulaire dans la console , dans l' ordre exact des colonnes spécifié et sans retour à la ligne - votre seule option est de tronquer les FullNamevaleurs afin que toutes les colonnes puissent tenir; notez que, par souci de concision, j'omets l' appel select( Select-Object) en faveur de l'utilisation directe de Format-Table:

    Get-ChildItem -Recurse |
      Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'},
                   Length, LastAccessTime
    
    • Notez comment la largeur de la colonne ( wentrée, abréviation de width) est basée sur la fenêtre de la console avec ( [Console]::WindowWidth) 45caractères moins , pour afficher autant de FullNamevaleurs que possible tout en laissant de la place pour les deux autres colonnes; aussi, pour s'assurer que la troncature (symbolisée par est appliquée au début du chemin - de sorte que le nom du fichier / répertoire soit toujours affiché - la colonne est alignée à droite (via l' aentrée, abréviation de alignment); si vous préférez la troncature de la fin du chemin, omettez l' aentrée (qui prend alors la valeur par défaut left).

    • Pour plus d'informations sur cette manière basée sur la table de hachage ( @{ ... }) de spécifier des propriétés dites calculées pour Format-Table, y compris une manière de tronquer depuis le début tout en maintenant l' alignement à gauche , consultez cette réponse .