このページでは、PowerShellを使って簡単に「ファイル検索アプリケーション」を作成するためのコードを紹介します。
以下のコードをそのままコピペして使えるので、アプリケーションをすぐに作成できます!
必要な準備
PowerShellを起動して、**Add-Type
**でWindows.Formsを追加します。これにより、GUI(グラフィカルユーザーインターフェイス)を作成できるようになります。
Add-Type -AssemblyName System.Windows.Forms
1. アプリケーションのウィンドウ(フォーム)作成
最初に、アプリケーションのウィンドウを作成し、検索ボックスやボタンを配置します。
# フォーム作成
$form = New-Object Windows.Forms.Form
$form.Text = "ファイル検索アプリ"
$form.Size = New-Object Drawing.Size(600, 400)
# 検索ボックス
$TextBox_Search = New-Object Windows.Forms.TextBox
$TextBox_Search.Size = New-Object Drawing.Size(300, 20)
$TextBox_Search.Location = New-Object Drawing.Point(10, 10)
$form.Controls.Add($TextBox_Search)
# 検索ボタン
$Button_Search = New-Object Windows.Forms.Button
$Button_Search.Text = "検索"
$Button_Search.Location = New-Object Drawing.Point(320, 10)
$form.Controls.Add($Button_Search)
# 結果リスト
$ListBox_Result = New-Object Windows.Forms.ListBox
$ListBox_Result.Size = New-Object Drawing.Size(550, 200)
$ListBox_Result.Location = New-Object Drawing.Point(10, 40)
$form.Controls.Add($ListBox_Result)
$form.ShowDialog()
2. ファイル検索機能の追加
ユーザーが入力したキーワードで、指定したフォルダ内のファイル名を検索し、リストボックスに表示します。
# 検索ボタンのクリックイベント処理
$Button_Search.Add_Click({
$keyword = $TextBox_Search.Text
$folderPath = "C:\Users\YourUser\Documents" # 検索対象フォルダ
# フォルダ内のファイルを取得
$files = Get-ChildItem -Path $folderPath -Recurse -File
$filteredFiles = $files | Where-Object { $_.Name -like "*$keyword*" }
# リストボックスに結果を表示
$ListBox_Result.Items.Clear()
$filteredFiles | ForEach-Object { $ListBox_Result.Items.Add($_.FullName) }
})
3. 検索結果のエクスポート機能(CSV形式)
検索結果をCSV形式で保存できるボタンを追加します。
# CSV保存ボタン
$Button_ExportCSV = New-Object Windows.Forms.Button
$Button_ExportCSV.Text = "CSVで保存"
$Button_ExportCSV.Location = New-Object Drawing.Point(10, 250)
$form.Controls.Add($Button_ExportCSV)
$Button_ExportCSV.Add_Click({
# 保存ダイアログを表示
$SaveFileDialog = New-Object Windows.Forms.SaveFileDialog
$SaveFileDialog.Filter = "CSVファイル (*.csv)|*.csv"
if ($SaveFileDialog.ShowDialog() -eq "OK") {
# 検索結果をCSVとして保存
$filteredFiles | ForEach-Object {
'"{0}"' -f $_.FullName
} | Out-File -FilePath $SaveFileDialog.FileName -Encoding UTF8
}
})
4. PDFやWord文書の中身検索
検索対象がPDFやWord文書であれば、その中身も検索できるようにします。以下の関数を追加することで、PDFやWord文書を読み取って中身を検索できます。
PDFの内容を抽出(PdfSharpライブラリ)
Add-Type -Path "C:\path\to\PdfSharp.dll"
function Get-PdfText($path) {
$reader = New-Object PdfSharp.Pdf.IO.PdfReader
$doc = [PdfSharp.Pdf.IO.PdfReader]::Open($path, [PdfSharp.Pdf.IO.PdfDocumentOpenMode]::ReadOnly)
$text = ""
foreach ($page in $doc.Pages) {
$text += $page.Contents.ToString()
}
return $text
}
Word文書の中身を取得(Word.Application)
$word = New-Object -ComObject Word.Application
$word.Visible = $false
function Get-WordText($docPath) {
$doc = $word.Documents.Open($docPath, $false, $true)
$text = $doc.Content.Text
$doc.Close()
return $text
}
$word.Quit()
5. ファイルのプレビュー機能
選択されたファイルの内容をその場でプレビュー表示するための機能です。選択したファイルがテキストファイルであれば、その内容を表示します。
# プレビューボックス作成
$TextBox_Preview = New-Object System.Windows.Forms.TextBox
$TextBox_Preview.Multiline = $true
$TextBox_Preview.ScrollBars = "Vertical"
$TextBox_Preview.ReadOnly = $true
$TextBox_Preview.Dock = "Bottom"
$TextBox_Preview.Height = 200
$form.Controls.Add($TextBox_Preview)
# リストボックスの選択変更イベント
$ListBox_Result.Add_SelectedIndexChanged({
$selectedFile = $ListBox_Result.SelectedItem
if ($selectedFile -match "\.txt$|\.log$") {
$TextBox_Preview.Text = Get-Content $selectedFile -Raw
}
elseif ($selectedFile -match "\.docx$") {
$TextBox_Preview.Text = Get-WordText $selectedFile
}
elseif ($selectedFile -match "\.pdf$") {
$TextBox_Preview.Text = Get-PdfText $selectedFile
}
else {
$TextBox_Preview.Text = "(このファイル形式はプレビュー未対応です)"
}
})
6. 最終的なコードまとめ
以下は、これまでに紹介したすべてのコードを一つのスクリプトにまとめたものです。
# 必要なライブラリの読み込み
Add-Type -AssemblyName System.Windows.Forms
Add-Type -Path "C:\path\to\PdfSharp.dll"
# フォーム作成
$form = New-Object Windows.Forms.Form
$form.Text = "ファイル検索アプリ"
$form.Size = New-Object Drawing.Size(600, 400)
# 検索ボックス
$TextBox_Search = New-Object Windows.Forms.TextBox
$TextBox_Search.Size = New-Object Drawing.Size(300, 20)
$TextBox_Search.Location = New-Object Drawing.Point(10, 10)
$form.Controls.Add($TextBox_Search)
# 検索ボタン
$Button_Search = New-Object Windows.Forms.Button
$Button_Search.Text = "検索"
$Button_Search.Location = New-Object Drawing.Point(320, 10)
$form.Controls.Add($Button_Search)
# 結果リスト
$ListBox_Result = New-Object Windows.Forms.ListBox
$ListBox_Result.Size = New-Object Drawing.Size(550, 200)
$ListBox_Result.Location = New-Object Drawing.Point(10, 40)
$form.Controls.Add($ListBox_Result)
# プレビューボックス
$TextBox_Preview = New-Object System.Windows.Forms.TextBox
$TextBox_Preview.Multiline = $true
$TextBox_Preview.ScrollBars = "Vertical"
$TextBox_Preview.ReadOnly = $true
$TextBox_Preview.Dock = "Bottom"
$TextBox_Preview.Height = 200
$form.Controls.Add($TextBox_Preview)
# 検索ボタンのクリックイベント
$Button_Search.Add_Click({
$keyword = $TextBox_Search.Text
$folderPath = "C:\Users\YourUser\Documents"
# フォルダ内のファイルを取得
$files = Get-ChildItem -Path $folderPath -Recurse -File
$filteredFiles = $files | Where-Object { $_.Name -like "*$keyword*" }
# リストボックスに結果を表示
$ListBox_Result.Items.Clear()
$filteredFiles | ForEach-Object { $ListBox_Result.Items.Add($_.FullName) }
})
# リストボックスの選択変更イベント
$ListBox_Result.Add_SelectedIndexChanged({
$selectedFile = $ListBox_Result.SelectedItem
if ($selectedFile -match "\.txt$|\.log$") {
$TextBox_Preview.Text = Get-Content $selectedFile -Raw
}
elseif ($selectedFile -match "\.docx$") {
$TextBox_Preview.Text = Get-WordText $selectedFile
}
elseif ($selectedFile -match "\.pdf$") {
$TextBox_Preview.Text = Get-PdfText $selectedFile
}
else {
$TextBox_Preview.Text = "(このファイル形式はプレビュー未対応です)"
}
})
$form.ShowDialog()
まとめ
このコードをコピーしてPowerShellに貼り付けるだけで、簡単なファイル検索アプリが動作します。
検索結果を表示し、選択したファイルの内容をプレビュー表示する機能も完備!
ぜひ、自分の用途に合わせてカスタマイズして、業務の効率化に役立ててください。
コメント