Get-ChildItemにフォルダの内容を取得させ、フォルダ内の各オブジェクトのサイズ、名前、およびオブジェクトのタイプ(ファイル/ディレクトリ)を表示させようとしています。しかし、これら3つの列だけを機能させるのに問題があります。
名前と長さはかなり単純ですが、ファイルとフォルダーの違いを表示するにはどうすればよいですか?
Get-ChildItemにフォルダの内容を取得させ、フォルダ内の各オブジェクトのサイズ、名前、およびオブジェクトのタイプ(ファイル/ディレクトリ)を表示させようとしています。しかし、これら3つの列だけを機能させるのに問題があります。
名前と長さはかなり単純ですが、ファイルとフォルダーの違いを表示するにはどうすればよいですか?
PSIsContainerプロパティを確認してください。フォルダの場合は$trueに設定され、ファイルの場合は$falseに設定されます。次に例を示します。
Get-ChildItem | Foreach-Object{
New-Object PSObject -Property @{
Name = $_.Name
SizeMB = if($_.PSIsContainer) { (Get-ChildItem $_.FullName -Recurse | Measure-Object Length -Sum).Sum/1mb } else {$_.Length}
Type = if($_.PSIsContainer) {'Directory'} else {'File'}
}
}
これは、「モード」情報を取得することで可能になると思います。(ここでこの回答を参照してください)
基本的に、Get-ChildItem
「モード」が「」で始まるコマンドによってリストされたものはすべてd
です。
@Joeyの回答に行きたくない場合は、「モード」で可能な6つの値の実際の意味を次に示します。
いずれにせよ、完全なリストは次のとおりです。
d - Directory a - Archive r - Read-only h - Hidden s - System l - Reparse point, symlink, etc.
そこで、これを使用してCSVを出力し、Excel、フロー、またはSharePointのフォルダーにフラグを付けます。私が使用したコマンドは次のとおりです。
Get-ChildItem -Recurse | Select-Object DirectoryName, BaseName, Extension, Mode | Export-Csv -Path INSERTPATH\listings.csv -Encoding ascii -NoTypeInformation
これがそれに出くわす人に役立つことを願っています。
警告、私が答えるという完全な意図を持って答えるのはこれが初めてです。これは6歳ですが、同じことを成し遂げようとすると、人々はそれでも役立つと思います。