Длина Powershell не будет отображаться в выводе Get-ChildItem
Я пробую эту команду в Windows 10 PowerShell:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime
Результат содержит только FullName
while LastAccessTime
и Length
отсутствует в выводе.
PowerShell ScreenShot
Что я делаю неправильно?
Ответы
Это будет работать:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv
Проблема заключается в простом отображении :
Поскольку пути между выходными объектами длинны и
FullName
являются первым свойством выбрано, остальные свойства (столбцы) не печатать , потому что они не могут поместиться на экране. Однако свойства могут присутствовать, и могут быть использованы программным способом .Примечание. Если намерение состоит в том, чтобы сохранить файл для последующей программной обработки , вы не должны использовать
>
/Out-File
, что приведет к тому же форматированию для отображения, которое вы видите в консоли (терминале), потому что это форматирование предназначено только для человек-наблюдатель .- Для программной обработки , используют структурированный формат данных , таких как CSV , как показано в ответ Ashok Prasath в
Обходные пути :
Быстрый и грязный обходной путь - поместить
FullName
свойство последним , как советует Дуг Маурер , что заставит показывать все свойства (столбцы), хотяFullName
значения свойств будут усечены (обозначены символом…
), особенно с начала путей:# FullName is placed *last* # Caveat: Paths will be truncated at the *end*. Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
Если вы не возражаете переключиться на формат на основе списка , где каждое значение свойства представлено в отдельной строке с префиксом имени свойства, перенаправьте к Format-List; обратите внимание, что слишком длинные значения будут переноситься строкой :
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
Если вы хотите , табличный вывод и не против переноса строк в вашем выводе , вы можете направить к Out-Stringс
-Width
значением достаточно большим , чтобы соответствовать всем столбцам (обратите внимание , что Out-Fileтакже поддерживает-Width
):Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300
Если вы предпочитаете горизонтальную прокрутку переносу строк, вы можете сохранить приведенное выше в файл и открыть в нем текстовый редактор или с помощью текстового редактора, такого как Visual Studio Code , вы можете напрямую передать ему вывод:
# Opens the output directly in a new Visual Studio Code editor tab. Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300 | code -
В противном случае - если вы хотите , чтобы увидеть табличный дисплей на консоли , в порядке точного колонка , указанный и без переноса строк - ваш единственным вариант, чтобы обрезать те
FullName
значения , так что все столбцы могут поместиться; обратите внимание, что для краткости я опускаю вызовselect
( Select-Object) в пользу прямого использования Format-Table:Get-ChildItem -Recurse | Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'}, Length, LastAccessTime
Обратите внимание на то, как ширина столбца (
w
запись, сокращение отwidth
) основана на окне консоли с символами ([Console]::WindowWidth
) минус45
, чтобы показать как можно большеFullName
значений, оставив место для двух других столбцов; Кроме того , чтобы гарантировать , что усечение (символизируется с…
прикладываются к началу пути - так , что файл / каталог имя всегда отображаются - столбец выравнивается по правому краю (черезa
вход, сокращениеalignment
), если вы предпочитаете усечение конца пути, опустить наa
запись ( по умолчанию , которые затем вleft
).Для получения дополнительной информации об этом
@{ ... }
способе указания так называемых вычисляемых свойств на основе хэш-таблицы ( )Format-Table
, включая способ усечения с самого начала при сохранении выравнивания по левому краю, см. Этот ответ .