# 画面設計書 184-WSFCクラスター

## 概要

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

### 本画面の処理概要

SQL Server高可用性環境をホストするWindows Server Failover Clusterの構成情報と運用状態を取得する。クオーラム設定、共有ボリューム設定、現在の運用状態などの詳細なクラスタープロパティを返す。

**業務上の目的・背景**：データベース管理者は、SQL Server FCIやAvailability Groupを支えるフェイルオーバークラスターの健全性を監視し、構成を検証する必要がある。この機能により、クラスター問題のトラブルシューティング、SQL Serverインストール前のクラスター検証、高可用性構成のドキュメント化が可能になる。

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

**主要な操作・処理内容**：
1. 指定されたクラスターまたはノードへの接続確立
2. WMI名前空間（root\MSCluster）からMSCluster_Clusterクラスを照会
3. クラスター状態を変換してプロパティに追加
4. 結果オブジェクトを出力

**画面遷移**：単独のCLIコマンドとして動作。他のWSFCコマンド（Get-DbaWsfcNode等）の基盤として使用される。

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 685 | Get-DbaWsfcCluster | 主機能 | WSFCクラスターの取得 |

## 画面種別

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

## URL/ルーティング

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

## 入出力項目

### Get-DbaWsfcCluster パラメータ

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

## 表示項目

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

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Name | string | クラスター名 |
| Fqdn | string | クラスターの完全修飾ドメイン名 |
| State | string | 現在の運用状態 |
| DrainOnShutdown | uint32 | シャットダウン時のドレイン設定 |
| DynamicQuorumEnabled | uint32 | 動的クオーラム有効化フラグ |
| EnableSharedVolumes | uint32 | クラスター共有ボリューム有効化フラグ |
| SharedVolumesRoot | string | 共有ボリュームのルートパス |
| QuorumPath | string | クオーラムファイルのパス |
| QuorumType | string | クオーラムタイプ（文字列表現） |
| QuorumTypeValue | uint32 | クオーラムタイプ（数値） |
| RequestReplyTimeout | uint32 | 要求応答タイムアウト（ミリ秒） |

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

| 項目名 | 説明 |
|--------|------|
| Caption | クラスターの短い説明 |
| Description | 詳細説明 |
| InstallDate | インストール日時 |
| Status | 運用ステータス文字列 |
| AddEvictDelay | ノード追放後の追加遅延 |
| AdminAccessPoint | 管理アクセスポイント種別 |
| BackupInProgress | バックアップ進行中フラグ |
| MaxNumberOfNodes | 最大ノード数 |
| S2DEnabled | Storage Spaces Direct有効化 |

## イベント仕様

### 1-クラスター情報取得

1. 指定されたComputerNameに対してループ処理開始
2. Get-DbaCmObjectでWMI名前空間（root\MSCluster）のMSCluster_Clusterクラスを照会
3. Get-ResourceState関数でState値を変換
4. NotePropertyとしてStateを追加
5. Select-DefaultViewでデフォルト表示プロパティを設定して出力

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

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

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

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

## メッセージ仕様

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

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| WMI接続エラー | Get-DbaCmObjectのエラーハンドリングに委譲 |
| 権限不足 | アクセス拒否エラーメッセージを表示 |
| クラスターサービス未起動 | WMIクラス未検出エラーを返却 |

## 備考

- WMI名前空間: root\MSCluster
- WMIクラス: MSCluster_Cluster
- 全てのWSFCコマンドは各メンバーノードでローカル管理者権限が必要
- QuorumTypeの値: Majority Node Majority、Node and Disk Majority、No Majority - Disk Only、Node Majority、Witness

---

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

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

### 推奨読解順序

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

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

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

**読解のコツ**: MSCluster_ClusterはWMIのクラスターオブジェクトで、多数のプロパティを持つ。Select-DefaultViewで表示されるプロパティが主要なもの。

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

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaWsfcCluster.ps1 | `public/Get-DbaWsfcCluster.ps1` | パラメータ定義、Get-DbaCmObject呼び出し、State変換 |

**主要処理フロー**:
1. **行101-107**: パラメータ定義（ComputerName、Credential、EnableException）
2. **行108-109**: processブロックでComputerNameループ開始
3. **行110**: Get-DbaCmObjectでWMI照会（Namespace=root\MSCluster, ClassName=MSCluster_Cluster）
4. **行111**: Get-ResourceState関数でState値を人間可読形式に変換
5. **行112**: Select-DefaultViewでデフォルト表示プロパティを設定

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

```
Get-DbaWsfcCluster (public/Get-DbaWsfcCluster.ps1)
    │
    ├─ Get-DbaCmObject
    │      └─ WMI Query (root\MSCluster\MSCluster_Cluster)
    │
    ├─ Get-ResourceState (内部関数)
    │      └─ State数値を文字列に変換
    │
    └─ Select-DefaultView
           └─ デフォルト表示プロパティ設定
```

### データフロー図

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

ComputerName ────────────▶ Get-DbaCmObject
                                    │
Credential ──────────────▶         │
                                    ▼
                           WMI Query
                           Namespace: root\MSCluster
                           ClassName: MSCluster_Cluster
                                    │
                                    ▼
                           Get-ResourceState
                           (State数値→文字列変換)
                                    │
                                    ▼
                           Add-Member (State NoteProperty)
                                    │
                                    ▼
                           Select-DefaultView
                                    │
                                    ▼
                           [CimInstance]
                           ├─ Name
                           ├─ Fqdn
                           ├─ State
                           ├─ DrainOnShutdown
                           ├─ DynamicQuorumEnabled
                           ├─ EnableSharedVolumes
                           ├─ SharedVolumesRoot
                           ├─ QuorumPath
                           ├─ QuorumType
                           ├─ QuorumTypeValue
                           └─ RequestReplyTimeout
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaWsfcCluster.ps1 | `public/Get-DbaWsfcCluster.ps1` | ソース | クラスター情報取得メイン関数 |
| Get-DbaCmObject.ps1 | `public/Get-DbaCmObject.ps1` | ソース | WMIオブジェクト取得汎用関数 |
| Get-ResourceState | `internal/functions/` | ソース | リソース状態変換関数 |
