PowerShellでJSONデータをGUIで表示する

PowerShellを使用してWindows Formsアプリケーションを作成する方法を紹介します。具体的には、JSONデータを読み込んで、その内容を表形式でGUI表示するプログラムです。

基本設定

まず、必要な.NET Frameworkのアセンブリを読み込みます。これにはSystem.Windows.FormsSystem.Drawingが含まれます。これらはGUIコンポーネントとグラフィックス描画に必要です。

JSONデータの準備

この例では、カテゴリーとアイテムが定義された入れ子JSONデータを使用します。ConvertFrom-Jsonコマンドレットを使って、このJSON文字列をPowerShellオブジェクトに変換します。

$jsonData = @"
{
  "Category": {
    "Category1": [
      {
        "Key1": "Item1"
      },
      {
        "Key2": "Item2"
      },
      {
        "Key3": "Item3"
      }
    ],
    "Category2": [
      {
        "Key1": "Item4"
      },
      {
        "Key2": "Item5"
      },
      {
        "Key3": "Item6"
      }
    ]
  }
}
"@ | ConvertFrom-Json

フォームの作成

System.Windows.Forms.Formオブジェクトを作成し、フォームの基本設定を行います。フォームのタイトルや開始位置を設定することで、ユーザーインターフェイスの初期状態を定義します。

powershellCopy code

$form = New-Object System.Windows.Forms.Form $form.Text = 'Category Details' $form.StartPosition = 'CenterScreen'

TableLayoutPanelの設定

System.Windows.Forms.TableLayoutPanelを使用して、動的に行を追加できる表形式のレイアウトを作成します。これは、カテゴリとアイテムを整理して表示するのに適した方法です。

$table = New-Object System.Windows.Forms.TableLayoutPanel
$table.ColumnCount = 2
$table.RowCount = 1
$table.AutoSize = $true
$table.AutoSizeMode = 'GrowAndShrink'
$table.GrowStyle = 'FixedSize'
$table.CellBorderStyle = 'Single'
$form.Controls.Add($table)

カテゴリーラベルとアイテムの追加

カテゴリー名とそれに属するアイテムをTableLayoutPanelに追加する関数を定義します。この関数では、カテゴリーごとにラベルを作成し、その下にアイテムを表示します。

# カテゴリーラベルとアイテムを追加する関数
function AddCategoryItemsToTable {
    param (
        [Parameter(Mandatory = $true)][string]$categoryName,
        [Parameter(Mandatory = $true)][pscustomobject[]]$items
    )

    # カテゴリーラベルの設定
    $categoryLabel = New-Object System.Windows.Forms.Label
    $categoryLabel.Text = $categoryName
    $categoryLabel.BackColor = 'Green'
    $categoryLabel.ForeColor = 'White'
    $categoryLabel.Dock = 'Fill'
    $categoryLabel.TextAlign = 'MiddleCenter'
    $table.Controls.Add($categoryLabel) | Out-Null
    $table.SetColumnSpan($categoryLabel, 2)

    # カテゴリーのアイテムを追加
    foreach ($item in $items) {
        foreach ($key in $item.psobject.Properties) {
            $keyLabel = New-Object System.Windows.Forms.Label
            $keyLabel.Text = $key.Name
            $keyLabel.Dock = 'Fill'
            $table.Controls.Add($keyLabel) | Out-Null

            $valueLabel = New-Object System.Windows.Forms.Label
            $valueLabel.Text = $key.Value
            $valueLabel.Dock = 'Fill'
            $table.Controls.Add($valueLabel) | Out-Null
        }
    }
}

JSONデータからのテーブルへのアイテム追加

JSONデータをループして、各カテゴリとそのアイテムをTableLayoutPanelに追加します。これにより、データが動的にフォームに表示されます。

# JSONデータからカテゴリーとアイテムをテーブルに追加
foreach ($category in $jsonData.Category.psobject.Properties) {
    $table.RowCount += $category.Value.Count + 1
    AddCategoryItemsToTable -categoryName $category.Name -items $category.Value
}

フォームの表示

最後に、フォームのサイズを内容に合わせて自動調整し、ShowDialogメソッドを使ってフォームを表示します。

$form.AutoSize = $true
$form.AutoSizeMode = 'GrowAndShrink'
$form.ShowDialog()

最後に

このプログラムは、PowerShellを使ってWindows Formsアプリケーションを作成する基本的な方法を示しています。GUIを使用することで、スクリプトの出力をより視覚的に表示し、ユーザーインタラクションを向上させることができます。

以下はプログラムの全容です。

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

# JSONデータ文字列
$jsonData = @"
{
  "Category": {
    "Category1": [
      {
        "Key1": "Item1"
      },
      {
        "Key2": "Item2"
      },
      {
        "Key3": "Item3"
      }
    ],
    "Category2": [
      {
        "Key1": "Item4"
      },
      {
        "Key2": "Item5"
      },
      {
        "Key3": "Item6"
      }
    ]
  }
}
"@ | ConvertFrom-Json

# フォームの基本設定
$form = New-Object System.Windows.Forms.Form
$form.Text = 'Category Details'
$form.StartPosition = 'CenterScreen'

# TableLayoutPanelの設定
$table = New-Object System.Windows.Forms.TableLayoutPanel
$table.ColumnCount = 2
$table.RowCount = 1 # 初期値は1行、後で行を追加します
$table.AutoSize = $true
$table.AutoSizeMode = 'GrowAndShrink'
$table.GrowStyle = 'FixedSize'
$table.CellBorderStyle = 'Single'
$form.Controls.Add($table)

# カテゴリーラベルとアイテムを追加する関数
function AddCategoryItemsToTable {
    param (
        [Parameter(Mandatory = $true)][string]$categoryName,
        [Parameter(Mandatory = $true)][pscustomobject[]]$items
    )

    # カテゴリーラベルの設定
    $categoryLabel = New-Object System.Windows.Forms.Label
    $categoryLabel.Text = $categoryName
    $categoryLabel.BackColor = 'Green'
    $categoryLabel.ForeColor = 'White'
    $categoryLabel.Dock = 'Fill'
    $categoryLabel.TextAlign = 'MiddleCenter'
    $table.Controls.Add($categoryLabel) | Out-Null
    $table.SetColumnSpan($categoryLabel, 2)

    # カテゴリーのアイテムを追加
    foreach ($item in $items) {
        foreach ($key in $item.psobject.Properties) {
            $keyLabel = New-Object System.Windows.Forms.Label
            $keyLabel.Text = $key.Name
            $keyLabel.Dock = 'Fill'
            $table.Controls.Add($keyLabel) | Out-Null

            $valueLabel = New-Object System.Windows.Forms.Label
            $valueLabel.Text = $key.Value
            $valueLabel.Dock = 'Fill'
            $table.Controls.Add($valueLabel) | Out-Null
        }
    }
}

# JSONデータからカテゴリーとアイテムをテーブルに追加
foreach ($category in $jsonData.Category.psobject.Properties) {
    $table.RowCount += $category.Value.Count + 1
    AddCategoryItemsToTable -categoryName $category.Name -items $category.Value
}

# フォームのサイズを内容に合わせて調整
$form.AutoSize = $true
$form.AutoSizeMode = 'GrowAndShrink'

# フォームを表示
$form.ShowDialog()

スポンサーリンク

-IT関連
-