for files によって返される[System.IO.FileInfo]
インスタンスには、またはプロパティGet-ChildItem
がありません。Folder
FolderName
Get-ChildItem -File $HOME\Desktop | Get-Member
たとえば、 は利用可能なプロパティを表示し、およびプロパティから必要な情報を取得できることを示します。PSPath
PSParentPath
Select-Object
では、ハッシュテーブルベースのプロパティ定義、いわゆる計算プロパティを使用できます。これにより、プロパティの名前変更や変換、スクリプト ブロックを介して他のプロパティ値から派生したカスタム プロパティを追加できます。
注:また、およびコマンドレットで計算されたプロパティを使用して、Format-Table
Format-List
表示専用の出力を作成することもできます(他のコマンドレットと同様に、リンクされたヘルプ トピックを参照してください)。
探しているものの簡単な例 (CSV ファイルへの出力を含む):
Get-ChildItem $HOME\Desktop | Select-Object Name,
@{ Name = 'Folder'; Expression = { Convert-Path $_.PSParentPath } },
@{ Name = 'Foldername'; Expression = { ($_.PSPath -split '\\')[-2] } } |
Export-Csv Out.csv -Encoding Utf8 -NoTypeInformation
または、質問のプロパティで行ったように、を介して入力オブジェクトにプロパティをFolder
追加することもできます。FolderName
Add-Member
Owner
説明:
を実行すると、言及されたコマンドのいずれかに関するより詳細な情報を取得できることに注意してくださいGet-Help <command-name> -Full
。-online
ブラウザでヘルプ トピックを表示するために追加します。-split
演算子の詳細については、実行してくださいGet-Help about_split
。PowerShell のヘルプ システム全般について学習するには、 を実行しますGet-Help Get-Help -online
。
@{ ... }
に渡される各コンストラクトは、各出力オブジェクトにアタッチするプロパティを定義するハッシュ テーブルですSelect-Object
。
- ハッシュ テーブルには 2 つのエントリが必要です。
Name
または Label
、プロパティの名前を定義します。簡潔にするために、キー名の (大文字と小文字を区別しない) プレフィックスを使用できn
ますl
。
Expression
、プロパティの値を定義します。繰り返しますが、キー名の (大文字と小文字を区別しない) プレフィックスも機能しますe
。
- 単純に入力プロパティの名前を変更したい場合は、式を単なるプロパティ名(文字列) にすることもできますが、より一般的には、入力オブジェクトごとに実行されるコードの一部であるスクリプト ブロック( ) を使用します。出力は、定義されているプロパティの値になります。そのスクリプト ブロック内で、自動変数(または) は手元の入力オブジェクトを参照します。
{ ... }
$_
$PSItem
プロパティの定義Folder
: プロパティに含まConvert-Path $_.PSParentPath
れる完全修飾 PowerShell パス (ドライブ プロバイダーを識別するプレフィックスを含む) を通常のファイルシステム パスに変換します。PSParentPath
例: Microsoft.PowerShell.Core\FileSystem::C:\Users\jdoe\Desktop
-> C:\Users\jdoe\Desktop
.
Foldername
プロパティの定義 ($_.PSPath -split '\\')[-2]
:フル パスをパス セパレーターによってコンポーネントに分割し、\
最後から 2 番目のコンポーネント ( ) にアクセスし-2
ます。これは親フォルダー名です。例C:\Users\jdoe\Desktop\file.txt
- >Desktop
'\\'
を表す\
ために使用する必要があります。これ-split
は、 の最初の RHS オペランドが正規表現であるためです。ここに\
は特別な意味があり、リテラルとして取得するには 2 倍にする必要があります。
/
クロスプラットフォームのサポートのためにパスセパレーターとしてもサポートしたい場合は、($_.PSPath -split '[\\/]')[-2]
.
Export-Csv
Select-Object
によって出力されたオブジェクトを CSVにエクスポートしますOut.csv
。入力オブジェクトのプロパティ名がヘッダー行になり、プロパティ値がデータ行になります。
-Encoding Utf8
、Windows PowerShellでのみ必要です (PowerShell (Core) 7+ は現在、幸いなことに一貫して BOM なしの UTF-8 を使用しています)、非 ASCII 文字が適切にエンコードされていることを保証します。デフォルトでExport-Csv
は、ASCII エンコーディングを使用し、外国の文字などの非 ASCII 文字をそのまま ?
の文字に置き換えるだけで、情報が失われます。-Encoding Utf8
Windows PowerShellでは、必ずBOM 付きのUTF-8 ファイルが作成されることに注意してください。
-NoTypeInformation
、これもWindows PowerShellでのみ必要です。デフォルトで出力ファイルの最初の行として追加される行を抑制します。この行にはExport-Csv
、入力オブジェクトの完全な型名 (クラス名) が含まれます (たとえば、#TYPE System.Management.Automation.PSCustomObject
これは、後の再変換を容易にするためのものです。オブジェクト)。