指定したディレクトリ配下のディレクトリとファイルをリスト化するPowerShellスクリプトをメモしておきます。
PowerShellでGUIアプリケーションを作成できることを最近知ったため、画面でフォルダを選択できるようにしました。
スクリプト
実行時にフォルダ選択ダイアログが表示され、選択されたディレクトリ配下のディレクトリとファイルの一覧をCSVファイルに出力するスクリプトです。
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# フォルダ選択ダイアログの作成
$folderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$folderBrowserDialog.Description = '対象のディレクトリを選択してください'
$folderBrowserDialog.RootFolder = 'MyComputer'
# ダイアログを表示
if ($folderBrowserDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$directoryPath = $folderBrowserDialog.SelectedPath
} else {
Write-Host "ディレクトリが選択されませんでした。"
exit
}
# 出力ファイルパス(スクリプトと同じフォルダに 'DirectoryFileList.csv' という名前で保存します)
$scriptDirectory = Split-Path -Parent $MyInvocation.MyCommand.Definition
$outputFilePath = Join-Path -Path $scriptDirectory -ChildPath "DirectoryFileList.csv"
# ディレクトリおよびファイルの一覧を取得し、カスタムオブジェクトを作成
$items = Get-ChildItem -Path $directoryPath -Recurse | ForEach-Object {
[PSCustomObject]@{
FullName = $_.FullName
CreationTime = $_.CreationTime
LastWriteTime = $_.LastWriteTime
Type = if ($_.PSIsContainer) {'Directory'} else {'File'}
Size = if (-not $_.PSIsContainer) {$_.Length} else {'N/A'}
}
}
# 結果をCSVファイルに出力
$items | Export-Csv -Path $outputFilePath -NoTypeInformation -Encoding UTF8
# 完了メッセージ
Write-Host "ディレクトリとファイルの一覧が以下に出力されました: $outputFilePath"
このスクリプトでは、System.Windows.Forms.FolderBrowserDialog
コンポーネントを使用してフォルダ選択ダイアログを表示します。
ユーザーがディレクトリを選択し、「OK」ボタンをクリックすると、そのディレクトリのパスが $directoryPath
に格納され、後続の処理が実行されます。
ユーザーが「キャンセル」ボタンをクリックするか、何も選択せずにダイアログを閉じた場合、スクリプトは「ディレクトリが選択されませんでした。」と表示して終了します。
選択されたディレクトリ配下のアイテムは Get-ChildItem
コマンドレットで取得し、ファイルかディレクトリかに応じてカスタムオブジェクトを生成しています。
最後に、これらのオブジェクトをCSVファイルに出力しています。このスクリプトを実行することで、GUIを介してユーザーが任意のディレクトリを選択し、その内容をCSVファイルに出力することが可能になります。