O comprimento do PowerShell não aparecerá na saída de Get-ChildItem
Estou tentando este comando no Windows 10 PowerShell:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime
O resultado contém apenas FullName
, while LastAccessTime
e Length
está faltando na saída.
PowerShell ScreenShot
O que estou fazendo de errado?
Respostas
Isso vai funcionar:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv
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
FullName
propriedade por último , como aconselha Doug Maurer , o que fará com que todas as propriedades (colunas) apareçam, embora osFullName
valores 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
-Width
valor 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
FullName
valores para que todas as colunas possam caber; observe que, por brevidade, estou omitindo a chamadaselect
( 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 (
w
entrada, abreviação dewidth
) é baseada na janela do console com ([Console]::WindowWidth
) menos45
caracteres, para mostrar o máximo deFullName
valores 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 daa
entrada, abreviação dealignment
); se você preferir o truncamento do final do caminho, omita aa
entrada (que então assume o padrãoleft
).Para obter mais informações sobre essa
@{ ... }
maneira baseada em hashtable ( ) de especificar as chamadas propriedades calculadas paraFormat-Table
, incluindo uma maneira de truncar desde o início enquanto mantém o alinhamento à esquerda , consulte esta resposta .