# 機能設計書 398-Remove-DbaPfDataCollectorSet

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける `Remove-DbaPfDataCollectorSet` 関数の機能設計を記述する。この関数は、ローカルまたはリモートコンピューターからWindows Performance Monitor Data Collector Setsを削除するための機能を提供する。

### 本機能の処理概要

`Remove-DbaPfDataCollectorSet` は、不要になったPerformance Monitor Data Collector Setsを削除する機能である。古いモニタリング構成のクリーンアップ、ディスク容量の解放、SQL Server環境全体でのパフォーマンスモニタリング設定の標準化に使用される。Collector Setは削除前に停止している必要があり、実行中のCollector Setはエラーを生成するため、先にStop-DbaPfDataCollectorSetで停止する必要がある。

**業務上の目的・背景**：パフォーマンスモニタリング環境では、テスト用や一時的なCollector Setsが蓄積されることがある。本機能により、DBAは不要になったCollector Setsを効率的に削除し、システムリソースを解放できる。

**機能の利用シーン**：
- 不要なモニタリング構成のクリーンアップ
- テスト用Collector Setsの削除
- 複数サーバー間でのモニタリング構成の標準化
- ディスク容量解放のための古いCollector Set削除

**主要な処理内容**：
1. Get-DbaPfDataCollectorSetでCollector Set情報を取得
2. Collector Setの状態確認（実行中は削除不可）
3. Pla.DataCollectorSet.Delete()で削除実行

**関連システム・外部連携**：Windows Performance Logs and Alerts (Pla.DataCollectorSet COM) サービスと連携する。

**権限による制御**：ローカルコンピューターでの削除には管理者権限が必要。リモートコンピューターへのアクセスにはWMI/CIM権限が必要。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| N/A | PowerShellコンソール | 主画面 | コマンドライン実行 |
| N/A | Windows Performance Monitor | 参照画面 | 削除結果確認 |

## 機能種別

データ削除処理

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| ComputerName | DbaInstance[] | No | Data Collector Setsを削除するコンピューター名 | デフォルト: $env:COMPUTERNAME |
| Credential | PSCredential | No | 代替資格情報 | - |
| CollectorSet | string[] | No | 削除対象のData Collector Set名 | エイリアス: DataCollectorSet |
| InputObject | object[] | No | Get-DbaPfDataCollectorSetからのパイプライン入力 | ValueFromPipeline |
| WhatIf | switch | No | 実行シミュレーション | - |
| Confirm | switch | No | 確認プロンプト | ConfirmImpact: High |
| EnableException | switch | No | 例外処理の有効化 | - |

### 入力データソース

- Get-DbaPfDataCollectorSetからのパイプライン入力
- 直接指定のCollector Set名

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| ComputerName | string | コンピューター名 |
| Name | string | 削除されたData Collector Set名 |
| Status | string | 操作状態（"Removed"） |

### 出力先

PowerShellパイプライン（PSCustomObject）

## 処理フロー

### 処理シーケンス

```
1. InputObject/Collector Set情報の取得
   └─ InputObject未指定時はGet-DbaPfDataCollectorSetを呼び出し

2. InputObject型の検証
   └─ DataCollectorSetObjectプロパティの存在確認

3. Collector Setごとの処理
   ├─ 管理者権限チェック
   ├─ 状態確認（Runningは削除不可）
   └─ ShouldProcess確認

4. 削除実行
   ├─ Pla.DataCollectorSet.Query()
   └─ Pla.DataCollectorSet.Delete()

5. 結果出力
   └─ PSCustomObjectで操作結果を返す
```

### フローチャート

```mermaid
flowchart TD
    A[開始] --> B{InputObject指定?}
    B -->|No| C[Get-DbaPfDataCollectorSet呼び出し]
    B -->|Yes| D{型チェック}
    C --> D
    D -->|不正| E[Stop-Function]
    D -->|正常| F[Collector Setループ]
    F --> G[Test-ElevationRequirement]
    G --> H{State ==<br>Running?}
    H -->|Yes| I[Stop-Function: 先に停止必要]
    H -->|No| J{ShouldProcess<br>確認?}
    I --> F
    J -->|Yes| K[Query + Delete実行]
    J -->|No| L[スキップ]
    K --> M[PSCustomObject生成]
    M --> N[パイプライン出力]
    L --> N
    N --> F
    F -->|完了| O[終了]
    E --> O
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-001 | 実行中Set削除禁止 | StateがRunningのCollector Setは削除不可 | State == "Running" |
| BR-002 | 型検証 | InputObjectはGet-DbaPfDataCollectorSetからの出力であること | InputObject指定時 |
| BR-003 | 存在確認 | QueryでCollector Set名が一致しない場合は警告 | Delete実行前 |
| BR-004 | 高確認レベル | ConfirmImpact: Highで削除前に確認 | ShouldProcess有効時 |

### 計算ロジック

特になし

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

本機能はデータベース操作を行わない。Windows Performance Monitor構成を削除する。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 型エラー | InputObjectがGet-DbaPfDataCollectorSetからの出力でない | Stop-Functionでエラー |
| - | 状態エラー | Collector SetがRunning状態 | Stop-Function -Continue、Stop-DbaPfDataCollectorSetを使用するよう案内 |
| - | 存在エラー | 指定されたCollector Setが存在しない | Write-Warningで警告 |
| - | 権限エラー | 管理者権限不足 | Test-ElevationRequirementで確認 |

### リトライ仕様

リトライ機能なし

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

トランザクション管理なし。Pla.DataCollectorSet.Delete()で即座に反映。

## パフォーマンス要件

特定の要件なし

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

- ターゲットコンピューターへの管理者権限が必要
- Test-ElevationRequirementで権限チェックを実施
- ShouldProcess対応で誤削除を防止

## 備考

- SupportsShouldProcess対応（-WhatIf, -Confirm）
- ConfirmImpact: Highで高確認レベル
- 実行中のCollector Setは先にStop-DbaPfDataCollectorSetで停止が必要
- `Get-DbaPfDataCollectorSet | Stop-DbaPfDataCollectorSet | Remove-DbaPfDataCollectorSet` のワークフローで使用可能

---

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

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

### 推奨読解順序

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

出力オブジェクトの構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Remove-DbaPfDataCollectorSet.ps1 | `public/Remove-DbaPfDataCollectorSet.ps1` | 140-143行目のPSCustomObject構造を確認 |

**読解のコツ**: 出力は3つのプロパティのみを持つシンプルなオブジェクト。Statusは常に"Removed"。

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

パラメーター定義を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Remove-DbaPfDataCollectorSet.ps1 | `public/Remove-DbaPfDataCollectorSet.ps1` | 84-93行目のパラメーター定義 |

**主要処理フロー**:
1. **84行目**: SupportsShouldProcess, ConfirmImpact: Highの定義
2. **88-89行目**: CollectorSetエイリアスはDataCollectorSet

#### Step 3: 状態チェック処理を理解する

Running状態のCollector Set削除禁止ロジックを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Remove-DbaPfDataCollectorSet.ps1 | `public/Remove-DbaPfDataCollectorSet.ps1` | 124-135行目の状態チェック |

**主要処理フロー**:
- **127行目**: Stateプロパティを取得
- **133-135行目**: Running状態の場合はStop-Functionでエラー

#### Step 4: 削除処理を理解する

COMオブジェクトを使用した削除処理を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | Remove-DbaPfDataCollectorSet.ps1 | `public/Remove-DbaPfDataCollectorSet.ps1` | 95-105行目のsetscript、137-148行目の実行処理 |

**主要処理フロー**:
- **97行目**: Pla.DataCollectorSet COMオブジェクト作成
- **98行目**: Queryで存在確認
- **99-100行目**: 名前一致の場合Delete実行、不一致の場合Warning

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

```
Remove-DbaPfDataCollectorSet
    │
    ├─ Get-DbaPfDataCollectorSet (InputObject未指定時)
    │
    ├─ Test-ElevationRequirement (権限チェック)
    │
    └─ Invoke-Command2 (リモート実行)
           └─ COM: Pla.DataCollectorSet
                  ├─ Query()
                  └─ Delete()
```

### データフロー図

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

CollectorSet ─────▶ Get-DbaPfDataCollectorSet ─▶ PSCustomObject
ComputerName                   │                    - ComputerName
Credential                     ▼                    - Name
InputObject         状態チェック (Running?)         - Status ("Removed")
                               │
                               ▼
                    Pla.DataCollectorSet.Delete()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Remove-DbaPfDataCollectorSet.ps1 | `public/Remove-DbaPfDataCollectorSet.ps1` | ソース | 本機能のメイン実装 |
| Get-DbaPfDataCollectorSet.ps1 | `public/Get-DbaPfDataCollectorSet.ps1` | ソース | Collector Set情報取得 |
| Stop-DbaPfDataCollectorSet.ps1 | `public/Stop-DbaPfDataCollectorSet.ps1` | ソース | 削除前に停止が必要 |
