Длина Powershell не будет отображаться в выводе Get-ChildItem

Dec 20 2020

Я пробую эту команду в Windows 10 PowerShell:

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

Результат содержит только FullNamewhile LastAccessTimeи Lengthотсутствует в выводе.

PowerShell ScreenShot

Что я делаю неправильно?

Ответы

1 AshokPrasath Dec 20 2020 at 23:34

Это будет работать:

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

3 mklement0 Dec 21 2020 at 01:07

Проблема заключается в простом отображении :

  • Поскольку пути между выходными объектами длинны и 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, включая способ усечения с самого начала при сохранении выравнивания по левому краю, см. Этот ответ .