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 LastAccessTimee Lengthestá 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
FullNamepropriedade por último , como aconselha Doug Maurer , o que fará com que todas as propriedades (colunas) apareçam, embora osFullNamevalores 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, FullNameSe 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-ListSe 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 300Se 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 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, LastAccessTimeObserve como a largura da coluna (
wentrada, abreviação dewidth) é baseada na janela do console com ([Console]::WindowWidth) menos45caracteres, para mostrar o máximo deFullNamevalores 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 daaentrada, abreviação dealignment); se você preferir o truncamento do final do caminho, omita aaentrada (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 .