PowerShellで作るファイル検索アプリケーション(コピペで使えるコード)


このページでは、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文書の中身検索

検索対象がPDFWord文書であれば、その中身も検索できるようにします。以下の関数を追加することで、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に貼り付けるだけで、簡単なファイル検索アプリが動作します。
検索結果を表示し、選択したファイルの内容をプレビュー表示する機能も完備!

ぜひ、自分の用途に合わせてカスタマイズして、業務の効率化に役立ててください。


コメント

タイトルとURLをコピーしました