0

注意到 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 中,我现在在 Name 和 IsReadOnly 之间有 3 个额外的列,添加了前面提到的 3 个属性。有谁知道这是由于 PowerShell 的更新还是由于安装了共享文件夹的特定服务器?

4

1 回答 1

0

正如@AdminOfThings 所指出的,Get-ChildItem可以返回多种对象类型:DirectoryInfo 和 FileInfo,其中只有 FileInfo 具有属性DirectoryDirectoryNameLength。因此,在将结果导出Get-ChildItem到 CSV 文件时。如果文件夹还包含文件,则此文件将仅包含 3 列。

以下文档描述了 export-csv 在您提交具有不同类型Microsoft Powershell6.0的多个对象时的行为:

当您向 Export-CSV 提交多个对象时,Export-CSV 会根据您提交的第一个对象的属性来组织文件。如果其余对象不具有指定属性之一,则该对象的属性值为 null,由两个连续的逗号表示。如果其余对象具有其他属性,则这些属性值不包含在文件中。

一旦找到使 CSV 输出一致的解决方案,我将更新答案。

于 2019-10-23T08:31:11.863 回答