# 画面設計書 189-WSFCネットワーク

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおけるWindows Server Failover Cluster（WSFC）ネットワーク情報取得機能の設計を定義する。

### 本画面の処理概要

フェイルオーバークラスター内のネットワーク構成とネットワークインターフェース情報を取得する。クラスターネットワーク、IPアドレス、サブネットマスク、DHCP設定、ネットワークロールなどの詳細情報を提供する。

**業務上の目的・背景**：データベース管理者は、SQL Server Failover Cluster InstancesやAvailability Groupの接続性問題の診断、クラスターネットワーク構成の検証、ノード間通信問題の特定が必要である。この機能により、クラスターネットワークのIPv4/IPv6アドレス、プレフィックス長、クォーラム設定、各ノードのネットワークインターフェース構成を確認できる。

**画面へのアクセス方法**：PowerShellコンソールから以下のコマンドを実行する：
- `Get-DbaWsfcNetwork` - クラスターネットワークの取得
- `Get-DbaWsfcNetworkInterface` - ネットワークインターフェースの取得

**主要な操作・処理内容**：
1. Get-DbaWsfcClusterでクラスター情報を取得
2. WMI名前空間からMSCluster_Network/NetworkInterfaceを照会
3. クラスター情報をプロパティに追加
4. Select-DefaultViewで表示プロパティを設定して出力

**画面遷移**：単独のCLIコマンド群として動作。内部でGet-DbaWsfcClusterを呼び出す。

**権限による表示制御**：全てのWSFCコマンドは各メンバーノードでローカル管理者権限が必要。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 687 | Get-DbaWsfcNetwork | 主機能 | WSFCネットワークの取得 |
| 688 | Get-DbaWsfcNetworkInterface | 補助機能 | ネットワークインターフェースの取得 |

## 画面種別

コマンドラインインターフェース（CLI）

## URL/ルーティング

PowerShellコマンド:
- `Get-DbaWsfcNetwork`
- `Get-DbaWsfcNetworkInterface`

## 入出力項目

### Get-DbaWsfcNetwork パラメータ

| パラメータ名 | 型 | 必須 | 説明 |
|-------------|-----|------|------|
| ComputerName | DbaInstanceParameter[] | No | 対象クラスターまたはノード名（デフォルト: $env:COMPUTERNAME） |
| Credential | PSCredential | No | 代替認証用資格情報 |
| EnableException | switch | No | 例外を有効にするフラグ |

### Get-DbaWsfcNetworkInterface パラメータ

| パラメータ名 | 型 | 必須 | 説明 |
|-------------|-----|------|------|
| ComputerName | DbaInstanceParameter[] | No | 対象クラスターまたはノード名（デフォルト: $env:COMPUTERNAME） |
| Credential | PSCredential | No | 代替認証用資格情報 |
| EnableException | switch | No | 例外を有効にするフラグ |

## 表示項目

### Get-DbaWsfcNetwork 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | クラスター名 |
| ClusterFqdn | string | クラスターFQDN |
| Name | string | ネットワーク名 |
| Address | string | ネットワークアドレス |
| AddressMask | string | サブネットマスク |
| IPv4Addresses | string[] | IPv4アドレス配列 |
| IPv4PrefixLengths | int[] | IPv4プレフィックス長配列 |
| IPv6Addresses | string[] | IPv6アドレス配列 |
| IPv6PrefixLengths | int[] | IPv6プレフィックス長配列 |
| QuorumType | int | クォーラムタイプ（数値） |
| QuorumTypeValue | string | クォーラムタイプ値 |
| RequestReplyTimeout | int | リクエスト/リプライタイムアウト（ミリ秒） |
| Role | string | ネットワークロール（cluster/client等） |

### Get-DbaWsfcNetworkInterface 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | クラスター名 |
| ClusterFqdn | string | クラスターFQDN |
| Name | string | インターフェース名 |
| Network | string | 所属ネットワーク名 |
| Node | string | 所属ノード名 |
| Adapter | string | アダプター識別子 |
| Address | string | IPアドレス |
| DhcpEnabled | bool | DHCP有効フラグ |
| IPv4Addresses | string[] | IPv4アドレス配列 |
| IPv6Addresses | string[] | IPv6アドレス配列 |

## イベント仕様

### 1-ネットワーク情報取得（Get-DbaWsfcNetwork）

1. Get-DbaWsfcClusterでクラスター情報取得
2. Get-DbaCmObjectでMSCluster_Networkを照会
3. ClusterName、ClusterFqdnをNotePropertyとして追加
4. Select-DefaultViewで表示プロパティを設定して出力

### 2-ネットワークインターフェース取得（Get-DbaWsfcNetworkInterface）

1. Get-DbaWsfcClusterでクラスター情報取得
2. Get-DbaCmObjectでMSCluster_NetworkInterfaceを照会
3. ClusterName、ClusterFqdnをNotePropertyとして追加
4. Select-DefaultViewで表示プロパティを設定して出力

## データベース更新仕様

### 操作別データベース影響一覧

この機能はデータベースへの更新操作を行わない。WMIクエリによる読み取り専用操作のみ。

| 操作（イベント） | 対象 | 操作種別 | 概要 |
|----------------|------|---------|------|
| ネットワーク情報取得 | WMI root\MSCluster | SELECT（読み取り） | ネットワーク構成情報の取得 |
| インターフェース情報取得 | WMI root\MSCluster | SELECT（読み取り） | インターフェース構成情報の取得 |

## メッセージ仕様

| 種別 | メッセージ | 発生条件 |
|------|----------|---------|
| Error | (WMI接続エラー) | クラスターへの接続失敗時 |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| WMI接続エラー | Get-DbaCmObjectのエラーハンドリングに委譲 |
| クラスター情報取得失敗 | Get-DbaWsfcClusterのエラーハンドリングに委譲 |

## 備考

- WMI名前空間: root\MSCluster
- WMIクラス: MSCluster_Network、MSCluster_NetworkInterface
- Get-DbaWsfcNetworkInterfaceのSelect-DefaultViewでIPv6Addressesが2回指定されている（タイプミスの可能性）

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

ネットワーク情報出力オブジェクトの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaWsfcNetwork.ps1 | `public/Get-DbaWsfcNetwork.ps1` | Select-DefaultViewのプロパティリスト（行75） |
| 1-2 | Get-DbaWsfcNetworkInterface.ps1 | `public/Get-DbaWsfcNetworkInterface.ps1` | Select-DefaultViewのプロパティリスト（行80） |

**読解のコツ**: 両関数ともWMIオブジェクトにNotePropertyを追加してSelect-DefaultViewで表示整形する同一パターン。

#### Step 2: エントリーポイントを理解する

各関数の処理フローを把握する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaWsfcNetwork.ps1 | `public/Get-DbaWsfcNetwork.ps1` | MSCluster_Networkの照会と表示プロパティ |
| 2-2 | Get-DbaWsfcNetworkInterface.ps1 | `public/Get-DbaWsfcNetworkInterface.ps1` | MSCluster_NetworkInterfaceの照会と表示プロパティ |

**主要処理フロー（Get-DbaWsfcNetwork）**:
1. **行67-68**: processブロック開始、ComputerNameループ
2. **行69**: Get-DbaWsfcClusterでクラスター情報取得
3. **行71**: Get-DbaCmObjectでMSCluster_Network照会
4. **行72-73**: ClusterName、ClusterFqdnをNotePropertyとして追加
5. **行75**: Select-DefaultViewで表示プロパティを設定して出力

**主要処理フロー（Get-DbaWsfcNetworkInterface）**:
1. **行74-75**: processブロック開始、ComputerNameループ
2. **行76**: Get-DbaWsfcClusterでクラスター情報取得
3. **行77**: Get-DbaCmObjectでMSCluster_NetworkInterface照会
4. **行78-79**: ClusterName、ClusterFqdnをNotePropertyとして追加
5. **行80**: Select-DefaultViewで表示プロパティを設定して出力（注：IPv6Addressesが重複）

### プログラム呼び出し階層図

```
Get-DbaWsfcNetwork (public/Get-DbaWsfcNetwork.ps1)
    │
    ├─ Get-DbaWsfcCluster
    │      └─ クラスター情報取得
    │
    ├─ Get-DbaCmObject
    │      └─ WMI Query (root\MSCluster\MSCluster_Network)
    │
    ├─ Add-Member
    │      └─ ClusterName, ClusterFqdn追加
    │
    └─ Select-DefaultView
           └─ デフォルト表示プロパティ設定

Get-DbaWsfcNetworkInterface (public/Get-DbaWsfcNetworkInterface.ps1)
    │
    ├─ Get-DbaWsfcCluster
    │      └─ クラスター情報取得
    │
    ├─ Get-DbaCmObject
    │      └─ WMI Query (root\MSCluster\MSCluster_NetworkInterface)
    │
    ├─ Add-Member
    │      └─ ClusterName, ClusterFqdn追加
    │
    └─ Select-DefaultView
           └─ デフォルト表示プロパティ設定
```

### データフロー図

```
[入力]                        [処理]                              [出力]

ComputerName ────────────▶ Get-DbaWsfcCluster
                                    │
                                    ▼
                           Cluster情報取得
                           (Name, Fqdn)
                                    │
                                    ▼
                           Get-DbaCmObject
                           Namespace: root\MSCluster
                           ClassName: MSCluster_Network
                                    /MSCluster_NetworkInterface
                                    │
                                    ▼
                           Add-Member
                           (ClusterName, ClusterFqdn)
                                    │
                                    ▼
                           Select-DefaultView
                                    │
                                    ▼
                           [WMI Object]
                           ├─ ClusterName
                           ├─ ClusterFqdn
                           ├─ Name
                           ├─ Address/Network
                           ├─ IPv4Addresses
                           ├─ IPv6Addresses
                           └─ (その他プロパティ)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaWsfcNetwork.ps1 | `public/Get-DbaWsfcNetwork.ps1` | ソース | クラスターネットワーク情報取得 |
| Get-DbaWsfcNetworkInterface.ps1 | `public/Get-DbaWsfcNetworkInterface.ps1` | ソース | ネットワークインターフェース情報取得 |
| Get-DbaWsfcCluster.ps1 | `public/Get-DbaWsfcCluster.ps1` | ソース | クラスター情報取得 |
| Get-DbaCmObject.ps1 | `public/Get-DbaCmObject.ps1` | ソース | WMIオブジェクト取得汎用関数 |
