# 画面設計書 185-WSFCノード

## 概要

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

### 本画面の処理概要

SQL Server FCIやAvailability Groupをホストするフェイルオーバークラスター内の個々のノード（サーバー）の構成と状態詳細を取得する。所有権情報、バージョン情報、運用状態などの重要なノードプロパティを返す。

**業務上の目的・背景**：データベース管理者は、クラスターノードの問題をトラブルシューティングし、SQL Serverフェイルオーバー操作前のノード構成を検証し、クラスターメンバーサーバーの詳細を監査する必要がある。この機能により、キャパシティプランニング、パッチ管理調整、高可用性トラブルシューティングに必要なノードメタデータを取得できる。

**画面へのアクセス方法**：PowerShellコンソールから以下のコマンドを実行する：
```powershell
Get-DbaWsfcNode -ComputerName <クラスター名またはノード名>
```

**主要な操作・処理内容**：
1. Get-DbaWsfcClusterでクラスター情報を取得
2. WMI名前空間（root\MSCluster）からMSCluster_Nodeクラスを照会
3. クラスター名とFQDNをノードオブジェクトに追加
4. 結果オブジェクトを出力

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

**権限による表示制御**：全てのWSFCコマンドは各メンバーノードでローカル管理者権限が必要。Credentialパラメータで代替認証を使用可能。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 689 | Get-DbaWsfcNode | 主機能 | WSFCノードの取得 |

## 画面種別

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

## URL/ルーティング

PowerShellコマンド:
- `Get-DbaWsfcNode`

## 入出力項目

### Get-DbaWsfcNode パラメータ

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

## 表示項目

### Get-DbaWsfcNode 出力（デフォルト表示）

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | クラスター名 |
| ClusterFqdn | string | クラスターの完全修飾ドメイン名 |
| Name | string | ノード名（サーバー名） |
| PrimaryOwnerName | string | ノードリソースの主要所有者 |
| PrimaryOwnerContact | string | 主要所有者の連絡先情報 |
| Dedicated | bool | クラスタリング専用フラグ |
| NodeHighestVersion | uint32 | サポートされる最高クラスターAPIバージョン |
| NodeLowestVersion | uint32 | サポートされる最低クラスターAPIバージョン |

### 追加プロパティ（Select-Object *で取得可能）

| 項目名 | 説明 |
|--------|------|
| State | ノード状態 |
| ResourceOwnership | リソース所有情報 |
| ClusterCommunicationDetails | クラスター通信詳細 |

## イベント仕様

### 1-ノード情報取得

1. 指定されたComputerNameに対してループ処理開始
2. Get-DbaWsfcClusterでクラスター情報を取得
3. Get-DbaCmObjectでWMI名前空間（root\MSCluster）のMSCluster_Nodeクラスを照会
4. ClusterNameとClusterFqdnをNotePropertyとして追加
5. Select-DefaultViewでデフォルト表示プロパティを設定して出力

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

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

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

| 操作（イベント） | 対象 | 操作種別 | 概要 |
|----------------|------|---------|------|
| ノード情報取得 | WMI root\MSCluster | SELECT（読み取り） | ノード構成情報の取得 |

## メッセージ仕様

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

## 例外処理

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

## 備考

- WMI名前空間: root\MSCluster
- WMIクラス: MSCluster_Node
- 全てのWSFCコマンドは各メンバーノードでローカル管理者権限が必要
- 内部でGet-DbaWsfcClusterを呼び出してクラスター情報を取得

---

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

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

### 推奨読解順序

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

WMI MSCluster_Nodeクラスの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaWsfcNode.ps1 | `public/Get-DbaWsfcNode.ps1` | 出力プロパティとSelect-DefaultViewの設定（行77） |

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

Get-DbaWsfcNode関数の処理フローを把握する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaWsfcNode.ps1 | `public/Get-DbaWsfcNode.ps1` | Get-DbaWsfcCluster呼び出し、Get-DbaCmObject呼び出し |

**主要処理フロー**:
1. **行64-70**: パラメータ定義
2. **行71-72**: processブロックでComputerNameループ開始
3. **行73**: Get-DbaWsfcClusterでクラスター情報取得
4. **行74**: Get-DbaCmObjectでWMI照会（MSCluster_Node）
5. **行75-76**: ClusterNameとClusterFqdnをNotePropertyとして追加
6. **行77**: Select-DefaultViewでデフォルト表示プロパティを設定

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

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

### データフロー図

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

ComputerName ────────────▶ Get-DbaWsfcCluster
                                    │
                                    ▼
                           Cluster情報取得
                           (Name, Fqdn)
                                    │
                                    ▼
                           Get-DbaCmObject
                           Namespace: root\MSCluster
                           ClassName: MSCluster_Node
                                    │
                                    ▼
                           Add-Member
                           (ClusterName, ClusterFqdn)
                                    │
                                    ▼
                           [CimInstance]
                           ├─ ClusterName
                           ├─ ClusterFqdn
                           ├─ Name
                           ├─ PrimaryOwnerName
                           ├─ PrimaryOwnerContact
                           ├─ Dedicated
                           ├─ NodeHighestVersion
                           └─ NodeLowestVersion
```

### 関連ファイル一覧

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