ざーっと特定ディレクトリ配下のファイルの一覧を出力してそのファイルの状態を比較しようと思った時の話
C:.
│ text1.txt
│
├─dir2
│ │ text2.txt
│ │
│ └─dir4
│ text4.txt
│
└─dir3
text3.txt
的な状態で、
Get-ChildItem dir2 | Export-Csv dir2.csv -Encoding UTF8
Get-ChildItem dir3 | Export-Csv dir3.csv -Encoding UTF8
をやると、dir2.csvとdir3.csvの項目は異なるものが作成される。
具体的には、Get-ChildItemの最初(?)のオブジェクトの違い、
#TYPE System.IO.DirectoryInfo
#TYPE System.IO.FileInfo
の差がでるため。
プロパティの差はそんなに大きくはないのだが、ファイルにはあってディレクトリにはない Length が結構(個人的には)致命的。
エレガントなやり方ではないかもしれないが、Select-Objectを間に挟んで、
Get-ChildItem dir2 | Select-Object PSDrive, BaseName, Mode, Name, Length, DirectoryName, Directory, IsReadOnly, Exists, FullName, Extension, CreationTime, CreationTimeUtc, LastAccessTime, LastAccessTimeUtc, LastWriteTime, LastWriteTimeUtc, Attributes | Export-Csv dir2.csv -Encoding UTF8
とかやってあげる必要がありそうな気がしている。
実際にはもう少し必要なプロパティにだけ絞り込んであげればよいかな。