O comprimento do PowerShell não aparecerá na saída de Get-ChildItem

Dec 20 2020

Estou tentando este comando no Windows 10 PowerShell:

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

O resultado contém apenas FullName, while LastAccessTimee Lengthestá faltando na saída.

PowerShell ScreenShot

O que estou fazendo de errado?

Respostas

1 AshokPrasath Dec 20 2020 at 23:34

Isso vai funcionar:

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

3 mklement0 Dec 21 2020 at 01:07

O problema é apenas um problema de exibição :

  • Como os caminhos entre os objetos de saída são longos e FullNameé a primeira propriedade selecionada, as propriedades restantes (colunas) não são impressas , pois não cabem na tela. No entanto, as propriedades estão presentes e podem ser usadas de forma programática.

  • Nota: Se a intenção for salvar em um arquivo para processamento programático posterior , você não deve usar >/ Out-File, que resulta na mesma formatação para exibição que você vê no console (terminal), porque essa formatação é destinada apenas para o observador humano .

    • Para processamento programático , use um formato de dados estruturados , como CSV , conforme mostrado na resposta de Ashok Prasath

Soluções alternativas :

  • Uma solução rápida e suja é colocar a FullNamepropriedade por último , como aconselha Doug Maurer , o que fará com que todas as propriedades (colunas) apareçam, embora os FullNamevalores das propriedades sejam truncados (simbolizados com ), principalmente desde o início dos caminhos:

    # FullName is placed *last*
    # Caveat: Paths will be truncated at the *end*.
    Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
    
  • Se você não se importar em mudar para um formato baseado em lista , onde cada valor de propriedade é representado em sua própria linha prefixada pelo nome da propriedade, direcione para Format-List; observe que valores excessivamente longos irão quebrar a linha :

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
    
  • Se você deseja uma saída tabular e não se importa com quebra de linha em sua saída , você pode canalizar para Out-Stringum -Widthvalor grande o suficiente para caber em todas as colunas (observe que Out-Filetambém suporta -Width):

    Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
      Out-String -Width 300
    
    • Se preferir a rolagem horizontal para a quebra de linha, você poderia salvar o acima para um arquivo e abrir nele um editor de texto ou com um editor de texto, como o Visual Código Estúdio , você pode diretamente da tubulação de saída para isso:

      # Opens the output directly in a new Visual Studio Code editor tab.
      Get-ChildItem -Recurse | select FullName,Length,LastAccessTime |
        Out-String -Width 300 | code -
      
  • Caso contrário - se você deseja ver a exibição tabular no console , na ordem exata da coluna especificada e sem quebra de linha - sua única opção é truncar os FullNamevalores para que todas as colunas possam caber; observe que, por brevidade, estou omitindo a chamada select( Select-Object) em favor do uso direto de Format-Table:

    Get-ChildItem -Recurse |
      Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'},
                   Length, LastAccessTime
    
    • Observe como a largura da coluna ( wentrada, abreviação de width) é baseada na janela do console com ( [Console]::WindowWidth) menos 45caracteres, para mostrar o máximo de FullNamevalores possível, enquanto ainda deixa espaço para as outras duas colunas; também, para garantir que o truncamento (simbolizado por é aplicado ao início do caminho - de modo que o nome do arquivo / diretório seja sempre exibido - a coluna é alinhada à direita (por meio da aentrada, abreviação de alignment); se você preferir o truncamento do final do caminho, omita a aentrada (que então assume o padrão left).

    • Para obter mais informações sobre essa @{ ... }maneira baseada em hashtable ( ) de especificar as chamadas propriedades calculadas para Format-Table, incluindo uma maneira de truncar desde o início enquanto mantém o alinhamento à esquerda , consulte esta resposta .