La longitud de Powershell no aparecerá en la salida de Get-ChildItem

Dec 20 2020

Estoy probando este comando en Windows 10 PowerShell:

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

El resultado solo contiene FullName, while LastAccessTimey Lengthfalta en la salida.

Captura de pantalla de PowerShell

¿Qué estoy haciendo mal?

Respuestas

1 AshokPrasath Dec 20 2020 at 23:34

Esto funcionará:

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

3 mklement0 Dec 21 2020 at 01:07

El problema es simplemente un problema de visualización :

  • Debido a que las rutas entre los objetos de salida son largas y FullNamees la primera propiedad seleccionada, las propiedades restantes (columnas) no se imprimen porque no caben en la pantalla. Sin embargo, las propiedades están presentes y se pueden usar mediante programación.

  • Nota: Si la intención es guardar en un archivo para un procesamiento programático posterior , no debe usar >/ Out-File, que da como resultado el mismo formato de visualización que ve en la consola (terminal), porque este formato está destinado solo para el observador humano .

    • Para el procesamiento programático , use un formato de datos estructurados como CSV , como se muestra en la respuesta de Ashok Prasath

Soluciones alternativas :

  • Una solución rápida y sucia es poner la FullNamepropiedad en último lugar , como aconseja Doug Maurer , lo que hará que se muestren todas las propiedades (columnas), aunque los FullNamevalores de las propiedades se truncarán (simbolizarán con ) y, en particular, desde el inicio de las rutas:

    # FullName is placed *last*
    # Caveat: Paths will be truncated at the *end*.
    Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
    
  • Si no le importa cambiar a un formato basado en listas , donde cada valor de propiedad se representa en su propia línea con el prefijo del nombre de la propiedad, canalice a Format-List; tenga en cuenta que los valores demasiado largos se ajustarán a la línea :

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
    
  • Si desea una salida tabular y no le importa el ajuste de línea en su salida , puede canalizar Out-Stringcon un -Widthvalor lo suficientemente grande para adaptarse a todas las columnas (tenga en cuenta que Out-Filetambién es compatible -Width):

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
      Out-String -Width 300
    
    • Si prefiere el desplazamiento horizontal al ajuste de línea, puede guardar lo anterior en un archivo y abrir en él un editor de texto o, con un editor de texto como Visual Studio Code , puede canalizar directamente la salida a él:

      # Opens the output directly in a new Visual Studio Code editor tab.
      Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
        Out-String -Width 300 | code -
      
  • De lo contrario, si desea ver la visualización tabular en la consola , en el orden de columna exacto especificado y sinFullName ajuste de línea , su única opción es truncar los valores para que todas las columnas quepan; tenga en cuenta que, por brevedad, estoy omitiendo la llamada select( Select-Object) a favor del uso directo de Format-Table:

    Get-ChildItem -Recurse |
      Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'},
                   Length, LastAccessTime
    
    • Observe cómo el ancho de la columna ( wentrada, abreviatura de width) se basa en la ventana de la consola con ( [Console]::WindowWidth) 45caracteres menos , para mostrar la mayor cantidad de FullNamevalores posible mientras deja espacio para las otras dos columnas; también, para garantizar que el truncamiento (simbolizado con se aplique al inicio de la ruta, de modo que el nombre del archivo / directorio siempre se muestre), la columna esté alineada a la derecha (a través de la aentrada, abreviatura de alignment); si prefiere el truncamiento del final de la ruta, omita la aentrada (que por defecto es left).

    • Para obtener más información sobre esta forma basada en hashtable ( @{ ... }) de especificar las llamadas propiedades calculadas para Format-Table, incluida una forma de truncar desde el principio y al mismo tiempo mantener la alineación a la izquierda , consulte esta respuesta .