PowerShell Get-Childitem изменяет вывод

Заметил странное поведение с PowerShell Get-ChildItem. Я делаю в своем скрипте что-то вроде этого:

New-PSDrive -Name "R" -PSProvider "FileSystem"-Root "\\server\share"
$files = Get-ChildItem "R:/" | Select-Object -Property * -ExcludeProperty VersionInfo
$files | export-csv -Path "output.csv" -Delimiter ";" 

Get-ChildItem возвращает объект со свойствами, такими как BaseName, FullName, Parent, Root, ...

Проблема, с которой я столкнулся, заключается в том, что недавно (или в некоторых сетевых ресурсах, которые я монтирую) свойства объекта, возвращаемого Get-ChildItem, изменились. Раньше это был такой список:

PSPath  PSParentPath    PSChildName PSDrive PSProvider  PSIsContainer   Mode    BaseName    Target  LinkType    Name    FullName    Parent  Exists  Root    Extension   CreationTime    CreationTimeUtc LastAccessTime  LastAccessTimeUtc   LastWriteTime   LastWriteTimeUtc    Attributes

и в последнее время (или, как уже упоминалось, для определенной общей папки, еще не понял этого) были добавлены следующие свойства:

Length  DirectoryName   Directory

В моем CSV теперь есть 3 дополнительных столбца между Name и IsReadOnly, добавлены вышеупомянутые 3 свойства. Кто-нибудь знает, связано ли это с обновлением PowerShell или с конкретным сервером, для которого была смонтирована общая папка?


person Silver    schedule 23.10.2019    source источник
comment
Используйте параметр -File в своей команде Get-Childitem.   -  person AdminOfThings    schedule 23.10.2019
comment
get-childitem -file | gm по-прежнему показывает эти 3 дополнительных свойства. Вы думаете, что он показывает эти свойства, потому что среди результатов есть каталоги?   -  person Silver    schedule 23.10.2019
comment
Ах, get-childitem -Directory | gm не показывает эти 3 свойства. Так что, вероятно, ваше предположение верно, но я интерпретировал его наоборот.   -  person Silver    schedule 23.10.2019


Ответы (1)


Как указывает @AdminOfThings, Get-ChildItem может возвращать несколько типов объектов: DirectoryInfo и FileInfo, где только FileInfo имеет свойства Directory, DirectoryName и Length. Поэтому при экспорте результатов из Get-ChildItem в файл CSV. Этот файл будет содержать только 3 столбца, если папка также содержала файлы.

В следующей документации описывается поведение export-csv в случае отправки нескольких объектов с разными типами Microsoft Powershell6.0:

Когда вы отправляете несколько объектов в Export-CSV, Export-CSV организует файл на основе свойств первого отправленного вами объекта. Если у оставшихся объектов нет одного из указанных свойств, значение свойства этого объекта равно нулю, что представлено двумя последовательными запятыми. Если у остальных объектов есть дополнительные свойства, значения этих свойств не включаются в файл.

Я обновлю ответ, как только найду решение, обеспечивающее согласованность вывода CSV.

person Silver    schedule 23.10.2019