# 画面設計書 186-WSFCリソース

## 概要

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

### 本画面の処理概要

フェイルオーバークラスター内のリソース（SQL Serverインスタンス、ディスク、ネットワーク名、その他のサービス）に関する包括的な情報を取得する。現在の状態、所有権、依存関係、再起動ポリシー、タイムアウト設定を表示する。

**業務上の目的・背景**：データベース管理者は、クラスターリソースの障害診断、メンテナンスウィンドウ計画、SQL Serverサービスのフェイルオーバー問題調査が必要である。この機能により、スタックしたリソースの特定、各リソースを現在ホストしているノードの確認、リソース設定の検証が可能になる。

**画面へのアクセス方法**：PowerShellコンソールから以下のコマンドを実行する：
- `Get-DbaWsfcResource` - クラスターリソースの取得
- `Get-DbaWsfcResourceGroup` - リソースグループの取得
- `Get-DbaWsfcResourceType` - リソースタイプの取得

**主要な操作・処理内容**：
1. Get-DbaWsfcClusterでクラスター情報を取得
2. WMI名前空間からMSCluster_Resource/ResourceGroup/ResourceTypeを照会
3. 状態値を人間可読形式に変換
4. クラスター情報をプロパティに追加
5. 結果オブジェクトを出力

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

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

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 690 | Get-DbaWsfcResource | 主機能 | WSFCリソースの取得 |
| 691 | Get-DbaWsfcResourceGroup | 補助機能 | WSFCリソースグループの取得 |
| 692 | Get-DbaWsfcResourceType | 補助機能 | WSFCリソースタイプの取得 |

## 画面種別

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

## URL/ルーティング

PowerShellコマンド:
- `Get-DbaWsfcResource`
- `Get-DbaWsfcResourceGroup`
- `Get-DbaWsfcResourceType`

## 入出力項目

### Get-DbaWsfcResource パラメータ

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

### Get-DbaWsfcResourceGroup パラメータ

| パラメータ名 | 型 | 必須 | 説明 |
|-------------|-----|------|------|
| ComputerName | DbaInstanceParameter[] | No | 対象クラスターまたはノード名 |
| Credential | PSCredential | No | 代替認証用資格情報 |
| Name | string[] | No | 特定のリソースグループ名でフィルタ |
| EnableException | switch | No | 例外を有効にするフラグ |

### Get-DbaWsfcResourceType パラメータ

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

## 表示項目

### Get-DbaWsfcResource 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | クラスター名 |
| ClusterFqdn | string | クラスターFQDN |
| Name | string | リソース名 |
| State | string | 運用状態（Online/Offline/Failed等） |
| Type | string | リソースタイプ（Physical Disk、IP Address等） |
| OwnerGroup | string | 所属リソースグループ |
| OwnerNode | string | 現在ホストしているノード |
| PendingTimeout | uint32 | オンライン/オフライン待機タイムアウト |
| PersistentState | bool | 永続状態フラグ |
| QuorumCapable | bool | クオーラムリソース選択可能フラグ |
| RestartAction | int | 障害時アクション |
| RestartDelay | uint32 | 再起動遅延（ミリ秒） |
| RestartPeriod | uint32 | 再起動追跡間隔 |
| RestartThreshold | uint32 | 最大再起動試行回数 |
| RetryPeriodOnFailure | uint32 | 障害後リトライ間隔 |
| SeparateMonitor | bool | 分離リソースモニタフラグ |

### Get-DbaWsfcResourceGroup 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | クラスター名 |
| ClusterFqdn | string | クラスターFQDN |
| Name | string | リソースグループ名 |
| State | string | 状態（Online/Offline/Failed/Unknown） |
| PersistentState | string | 永続状態 |
| OwnerNode | string | 現在の所有者ノード |

### Get-DbaWsfcResourceType 出力

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | クラスター名 |
| ClusterFqdn | string | クラスターFQDN |
| Name | string | リソースタイプ名 |
| DisplayName | string | 表示名 |
| DllName | string | 実装DLLファイル名 |
| RequiredDependencyTypes | string[] | 必須依存リソースタイプ |

## イベント仕様

### 1-リソース情報取得（Get-DbaWsfcResource）

1. Get-DbaWsfcClusterでクラスター情報取得
2. Get-DbaCmObjectでMSCluster_Resourceを照会
3. 各リソースについてループ処理
4. Get-ResourceStateでState値を変換
5. ClusterName、ClusterFqdnをNotePropertyとして追加
6. Select-DefaultViewで出力

### 2-リソースグループ情報取得（Get-DbaWsfcResourceGroup）

1. Get-DbaWsfcClusterでクラスター情報取得
2. Get-DbaCmObjectでMSCluster_ResourceGroupを照会
3. Nameパラメータが指定された場合はフィルタリング
4. Get-ResourceGroupStateでState値を変換
5. クラスター情報を追加して出力

### 3-リソースタイプ情報取得（Get-DbaWsfcResourceType）

1. Get-DbaWsfcClusterでクラスター情報取得
2. Get-DbaCmObjectでMSCluster_ResourceTypeを照会
3. クラスター情報を追加して出力

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

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

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

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

## メッセージ仕様

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

## 例外処理

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

## 備考

- WMI名前空間: root\MSCluster
- WMIクラス: MSCluster_Resource、MSCluster_ResourceGroup、MSCluster_ResourceType
- State値は内部関数で変換: -1=Unknown, 0=Online, 1=Offline, 2=Failed等

---

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

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

### 推奨読解順序

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

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

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

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

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaWsfcResource.ps1 | `public/Get-DbaWsfcResource.ps1` | リソース取得と状態変換 |
| 2-2 | Get-DbaWsfcResourceGroup.ps1 | `public/Get-DbaWsfcResourceGroup.ps1` | リソースグループ取得とNameフィルタ |
| 2-3 | Get-DbaWsfcResourceType.ps1 | `public/Get-DbaWsfcResourceType.ps1` | リソースタイプ取得 |

**主要処理フロー（Get-DbaWsfcResource）**:
1. **行99-100**: processブロック開始、ComputerNameループ
2. **行101**: Get-DbaWsfcClusterでクラスター情報取得
3. **行102**: Get-DbaCmObjectでMSCluster_Resource照会
4. **行103-107**: ループでState変換とプロパティ追加
5. **行107**: Select-DefaultViewで出力

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

```
Get-DbaWsfcResource (public/Get-DbaWsfcResource.ps1)
    │
    ├─ Get-DbaWsfcCluster
    │
    ├─ Get-DbaCmObject
    │      └─ WMI Query (MSCluster_Resource)
    │
    ├─ Get-ResourceState (内部関数)
    │
    └─ Select-DefaultView

Get-DbaWsfcResourceGroup (public/Get-DbaWsfcResourceGroup.ps1)
    │
    ├─ Get-DbaWsfcCluster
    │
    ├─ Get-DbaCmObject
    │      └─ WMI Query (MSCluster_ResourceGroup)
    │
    ├─ Get-ResourceGroupState (内部関数)
    │
    └─ Select-DefaultView

Get-DbaWsfcResourceType (public/Get-DbaWsfcResourceType.ps1)
    │
    ├─ Get-DbaWsfcCluster
    │
    ├─ Get-DbaCmObject
    │      └─ WMI Query (MSCluster_ResourceType)
    │
    └─ Select-DefaultView
```

### データフロー図

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

ComputerName ────────────▶ Get-DbaWsfcCluster
                                    │
                                    ▼
                           Cluster情報取得
                                    │
                                    ▼
                           Get-DbaCmObject
                           ClassName: MSCluster_Resource/
                                     ResourceGroup/ResourceType
                                    │
                                    ▼
                           Get-ResourceState/Get-ResourceGroupState
                           (State数値→文字列変換)
                                    │
                                    ▼
                           Add-Member
                           (ClusterName, ClusterFqdn, State)
                                    │
                                    ▼
                           [CimInstance]
                           ├─ ClusterName
                           ├─ ClusterFqdn
                           ├─ Name
                           ├─ State
                           ├─ Type/OwnerNode/...
                           └─ (その他プロパティ)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaWsfcResource.ps1 | `public/Get-DbaWsfcResource.ps1` | ソース | リソース情報取得 |
| Get-DbaWsfcResourceGroup.ps1 | `public/Get-DbaWsfcResourceGroup.ps1` | ソース | リソースグループ情報取得 |
| Get-DbaWsfcResourceType.ps1 | `public/Get-DbaWsfcResourceType.ps1` | ソース | リソースタイプ情報取得 |
| Get-DbaWsfcCluster.ps1 | `public/Get-DbaWsfcCluster.ps1` | ソース | クラスター情報取得 |
| Get-DbaCmObject.ps1 | `public/Get-DbaCmObject.ps1` | ソース | WMIオブジェクト取得 |
