# 機能設計書 692-Get-DbaWsfcResourceType

## 概要

本ドキュメントは、Windows Server Failover Cluster (WSFC) で利用可能なリソースタイプ情報を取得するdbatools PowerShellコマンド `Get-DbaWsfcResourceType` の機能設計書です。

### 本機能の処理概要

`Get-DbaWsfcResourceType` は、Windows Server Failover Cluster で利用可能なすべてのリソースタイプの詳細情報を取得する機能です。リソースタイプは、SQL Serverインスタンス、ネットワーク名、IPアドレス、共有ストレージなど、作成可能なクラスターリソースの種類を定義しています。

**業務上の目的・背景**：SQL Server フェイルオーバークラスターインスタンス (FCI) の構成やトラブルシューティングにおいて、クラスターでどのリソースタイプが利用可能かを把握することは不可欠です。この情報により、クラスター化されたSQL Serverリソースを作成するために必要なビルディングブロックを理解し、構成上の問題を診断できます。

**機能の利用シーン**：
- SQL Server FCI導入前のリソースタイプ確認
- クラスター構成のドキュメント化
- リソースタイプの依存関係調査
- クラスター構成トラブルシューティング

**主要な処理内容**：
1. 指定されたコンピューター名からクラスター情報を取得 (Get-DbaWsfcCluster呼び出し)
2. WMI/CIM経由でMSCluster_ResourceTypeクラスを照会
3. クラスター名とFQDN情報をオブジェクトに追加
4. 既定の表示プロパティでフォーマットして出力

**関連システム・外部連携**：Windows Server Failover Clustering (WSFC) サービス、WMI/CIM (root\MSCluster名前空間)

**権限による制御**：各メンバーノードでのローカル管理者権限が必要

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| N/A | コマンドライン | 主画面 | PowerShellコンソールからの直接実行 |

## 機能種別

データ取得 / クラスター監視

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| ComputerName | DbaInstanceParameter[] | No | クエリ対象のWSFCクラスターまたはノード名。パイプライン入力対応 | 指定なしの場合は$env:COMPUTERNAME |
| Credential | PSCredential | No | 代替資格情報でクラスターにログイン | なし |
| EnableException | switch | No | 例外を有効にし、try/catchでのキャッチを可能にする | なし |

### 入力データソース

- Windows Server Failover Cluster WMI名前空間 (root\MSCluster)
- MSCluster_ResourceType WMIクラス

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ClusterName | string | Windows Server Failover Clusterの名前 |
| ClusterFqdn | string | クラスターの完全修飾ドメイン名 |
| Name | string | リソースタイプの名前（キープロパティ） |
| DisplayName | string | ユーザーインターフェースで表示されるリソースタイプ名 |
| DllName | string | リソースタイプを実装するDLLファイル名 |
| RequiredDependencyTypes | string[] | このタイプのリソースが依存する必要があるリソースタイプ名の配列 (Windows Server 2012+) |

### 出力先

PowerShellパイプライン (Microsoft.Management.Infrastructure.CimInstance#root/MSCluster/MSCluster_ResourceType)

## 処理フロー

### 処理シーケンス

```
1. process ブロック
   └─ ComputerName パラメータの各コンピューターに対してループ
      ├─ Get-DbaWsfcCluster を呼び出してクラスター情報を取得
      ├─ Get-DbaCmObject でMSCluster_ResourceTypeクラスを照会
      ├─ ClusterName プロパティを追加
      ├─ ClusterFqdn プロパティを追加
      └─ Select-DefaultView で既定表示プロパティを設定して出力
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{ComputerNameループ}
    B --> C[Get-DbaWsfcCluster呼び出し]
    C --> D[Get-DbaCmObject でMSCluster_ResourceType取得]
    D --> E[ClusterName追加]
    E --> F[ClusterFqdn追加]
    F --> G[Select-DefaultViewで出力]
    G --> H{次のコンピューター?}
    H -->|Yes| B
    H -->|No| I[終了]
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | 権限要件 | ローカル管理者権限が必要 | 常時 |
| BR-002 | 全タイプ取得 | フィルタリングなしで全リソースタイプを取得 | 常時 |

### 計算ロジック

特別な計算ロジックはありません。

## データベース操作仕様

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

本機能はデータベースを直接操作せず、WMI/CIM経由でWindows Server Failover Clusterのメタデータを読み取り専用で取得します。

| 操作 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| N/A | N/A | SELECT (WMI) | MSCluster_ResourceType WMIクラスからの読み取り |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| N/A | 接続エラー | 対象コンピューターに接続できない場合 | コンピューター名の確認、ネットワーク接続確認 |
| N/A | 権限エラー | ローカル管理者権限がない場合 | 適切な資格情報でCredentialパラメータを使用 |
| N/A | WMIエラー | WSFCサービスが実行されていない場合 | クラスターサービスの起動状態を確認 |

### リトライ仕様

明示的なリトライ機能は実装されていません。Get-DbaCmObjectの接続フォールバック機能に依存しています。

## トランザクション仕様

読み取り専用操作のため、トランザクション制御は適用されません。

## パフォーマンス要件

特定のパフォーマンス要件は定義されていません。WMIクエリのレスポンス時間はネットワーク状況とクラスターの負荷状態に依存します。

## セキュリティ考慮事項

- 各メンバーノードでのローカル管理者権限が必要
- Credentialパラメータによる代替資格情報のサポート
- WMI/CIM経由の安全な通信

## 備考

- RequiredDependencyTypesプロパティはWindows Server 2012以降で利用可能
- SQL Server関連のリソースタイプには "SQL Server" や "SQL Server Agent" などが含まれます
- 全プロパティを表示するには `Select-Object *` をパイプで連結

---

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

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

### 推奨読解順序

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

WSFCリソースタイプの情報は、WMI MSCluster_ResourceType クラスから取得されます。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | MSCluster_ResourceType WMIクラス | (Windows WMI) | Name, DisplayName, DllName, RequiredDependencyTypes などのプロパティ構造 |

**読解のコツ**: WMI MSCluster_ResourceType クラスのプロパティは Microsoft ドキュメントで確認できます。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaWsfcResourceType.ps1 | `public/Get-DbaWsfcResourceType.ps1` | メイン関数の構造、パラメータ定義 |

**主要処理フロー**:
1. **71-77行目**: パラメータ定義 (ComputerName, Credential, EnableException)
2. **78-86行目**: process ブロックでメイン処理を実行

#### Step 3: 依存関数を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaWsfcCluster.ps1 | `public/Get-DbaWsfcCluster.ps1` | クラスター情報取得の仕組み |
| 3-2 | Get-DbaCmObject.ps1 | `public/Get-DbaCmObject.ps1` | WMI/CIMクエリの実行方法 |

**主要処理フロー**:
- **Get-DbaWsfcCluster**: クラスター名とFQDNを取得
- **Get-DbaCmObject**: WMI名前空間からオブジェクトを取得

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

```
Get-DbaWsfcResourceType
    │
    ├─ Get-DbaWsfcCluster (80行目)
    │      └─ Get-DbaCmObject (クラスター情報取得)
    │
    ├─ Get-DbaCmObject (81行目)
    │      └─ MSCluster_ResourceType WMIクラス照会
    │
    └─ Select-DefaultView (84行目)
           └─ 既定表示プロパティの設定
```

### データフロー図

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

ComputerName ───▶ Get-DbaWsfcCluster ───▶ ClusterName, Fqdn
                         │
                         ▼
                  Get-DbaCmObject
                  (MSCluster_ResourceType) ───▶ リソースタイプ一覧
                         │
                         ▼
                  プロパティ追加 ───▶ CimInstance オブジェクト
                         │           (ClusterName, ClusterFqdn,
                         ▼            Name, DisplayName,
                  Select-DefaultView  DllName, RequiredDependencyTypes)
                         │
                         ▼
                  パイプライン出力
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaWsfcResourceType.ps1 | `public/Get-DbaWsfcResourceType.ps1` | ソース | メイン機能実装 |
| Get-DbaWsfcCluster.ps1 | `public/Get-DbaWsfcCluster.ps1` | ソース | クラスター情報取得 |
| Get-DbaCmObject.ps1 | `public/Get-DbaCmObject.ps1` | ソース | WMI/CIMオブジェクト取得 |
