---
title: PowerShellでJSONデータをGUIで表示する
url: 'https://automationse.net/creating-dynamic-guis-with-powershell'
markdown: 'https://automationse.net/creating-dynamic-guis-with-powershell.md'
date: '2024-02-11'
description: 'PowerShellを使用してWindows Formsアプリケーションを作成する方法を紹介します。具体的には、JSONデータを読み込んで、その内容を表形式でGUI表示するプログラムです。 基本設定 まず、必要な.NET Frameworkのアセンブリを読み込みます。これにはSystem.Windows.FormsとSystem.Drawingが含まれます。これらはGUIコ…'
taxonomy:
  category:
    - IT関連
  tag:
    - PowerShell
---

## [PowerShellでJSONデータをGUIで表示する](https://automationse.net/creating-dynamic-guis-with-powershell)

  公開日 2024.02.11 更新日 2024.02.11  [PowerShell](https://automationse.net/tag:PowerShell#body-wrapper)  

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

### 基本設定

まず、必要な.NET Frameworkのアセンブリを読み込みます。これには`System.Windows.Forms`と`System.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()
```

 [ Previous Post](https://automationse.net/processing-json-with-powershell) [Next Post ](https://automationse.net/powershell-windows-forms-json-guide)

---

## Navigation

- Parent: [WordPress Import](https://automationse.net/wordpress-import.md)
- Previous: [PowerShellを使用してJSONデータをGridView表示する](https://automationse.net/powershell-windows-forms-json-guide.md)
- Next: [PowerShellを使用してJSONデータを処理する方法について](https://automationse.net/processing-json-with-powershell.md)
