# 画面設計書 95-インスタンスプロパティ

## 概要

本ドキュメントはdbatools PowerShellモジュールにおけるインスタンスプロパティ取得機能（Get-DbaInstanceProperty）の画面設計書です。

### 本画面の処理概要

**業務上の目的・背景**：
SQL Serverインスタンスの構成監査、コンプライアンスレポート、複数インスタンス間の比較において、インスタンスレベルの構成プロパティを一覧取得することは重要な作業です。本機能は、SMOを通じてSQL ServerのInformation、UserOptions、Settingsコレクションからすべての構成プロパティを取得し、デフォルトファイルパス、メモリ構成、セキュリティオプション、ユーザーデフォルトなどの完全なインベントリを標準化された形式で提供します。これにより、構成監査、コンプライアンスレポート、環境比較、構成関連の問題トラブルシューティングが効率的に行えます。

**画面へのアクセス方法**：
PowerShellコンソールまたはスクリプトから以下のコマンドを実行してアクセスします。
- `Get-DbaInstanceProperty -SqlInstance <インスタンス名>`

**主要な操作・処理内容**：
1. **Informationプロパティ取得**：サーバー情報（バージョン、エディション、照合順序等）
2. **UserOptionsプロパティ取得**：ユーザーオプション設定
3. **Settingsプロパティ取得**：サーバー設定（デフォルトパス、認証モード等）
4. **プロパティフィルタリング**：特定プロパティの包含・除外指定

**画面遷移**：
本機能は主に監査やレポート生成の起点として使用される。出力結果はエクスポート、比較、他のdbatools機能への入力などに活用される。

**権限による表示制御**：
- SQL Serverインスタンスへの接続権限が必要
- 特定のプロパティは追加の権限を必要とする場合がある

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 337 | Get-DbaInstanceProperty | 主機能 | インスタンスプロパティの取得 |

## 画面種別

CLI（コマンドラインインターフェース）/ 参照・監査

## URL/ルーティング

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

## 入出力項目

### Get-DbaInstanceProperty パラメータ

| パラメータ名 | 型 | 必須 | 説明 |
|-------------|-----|------|------|
| SqlInstance | DbaInstanceParameter[] | はい | 対象のSQL Serverインスタンス |
| SqlCredential | PSCredential | いいえ | SQL Server接続用の資格情報 |
| InstanceProperty | object[] | いいえ | 取得するプロパティ名（ワイルドカード対応） |
| ExcludeInstanceProperty | object[] | いいえ | 除外するプロパティ名（ワイルドカード対応） |
| EnableException | switch | いいえ | 例外を有効化 |

## 表示項目

### 出力プロパティ

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| ComputerName | string | SQL Serverをホストするコンピュータ名 |
| InstanceName | string | SQL Serverインスタンス名 |
| SqlInstance | string | 完全なSQL Serverインスタンス名（コンピュータ\インスタンス形式） |
| Name | string | プロパティ名（例：DefaultFile, MaxWorkerThreads, LoginMode） |
| Value | object | プロパティの現在値（文字列または混合型） |
| PropertyType | string | プロパティコレクションタイプ（Information/UserOption/Setting） |

### PropertyTypeの種類

| PropertyType | 説明 | 含まれるプロパティ例 |
|--------------|------|---------------------|
| Information | サーバー情報 | Edition, Version, Collation, Language, Platform |
| UserOption | ユーザーオプション | AnsiNulls, AnsiPadding, QuotedIdentifier |
| Setting | サーバー設定 | DefaultFile, DefaultLog, BackupDirectory, LoginMode |

## イベント仕様

### 1-プロパティ取得処理

1. Connect-DbaInstanceでSQL Server接続を確立
2. $server.Information.Propertiesからインフォメーションプロパティを取得
3. InstancePropertyパラメータでフィルタリング（指定時）
4. ExcludeInstancePropertyパラメータで除外（指定時）
5. 各プロパティにメタ情報（ComputerName, InstanceName, SqlInstance, PropertyType）を追加
6. Select-DefaultViewでデフォルト表示プロパティを設定して出力

### 2-UserOptionsプロパティ取得

1. $server.UserOptions.Propertiesからユーザーオプションプロパティを取得
2. InstancePropertyパラメータでフィルタリング（指定時）
3. ExcludeInstancePropertyパラメータで除外（指定時）
4. 各プロパティにメタ情報を追加して出力

### 3-Settingsプロパティ取得

1. $server.Settings.Propertiesから設定プロパティを取得
2. InstancePropertyパラメータでフィルタリング（指定時）
3. ExcludeInstancePropertyパラメータで除外（指定時）
4. 各プロパティにメタ情報を追加して出力

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

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

| 操作（イベント） | 対象 | 操作種別 | 概要 |
|----------------|------|---------|------|
| プロパティ取得 | SMOオブジェクト | READ | Information/UserOptions/Settingsコレクションの読み取り |

本コマンドは参照専用のため、データベースへの書き込みは発生しません。

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 |
|-------------|------|---------------|
| MSG001 | エラー | Failure（接続エラー時） |
| MSG002 | エラー | Issue gathering information properties for {instance} |
| MSG003 | エラー | Issue gathering user options for {instance} |
| MSG004 | エラー | Issue gathering settings for {instance} |

## 例外処理

| 例外状況 | 処理内容 |
|---------|---------|
| 接続失敗 | Stop-Functionでエラー出力し、処理を継続（Continue） |
| Informationプロパティ取得失敗 | Stop-Functionでエラー出力し、処理を継続 |
| UserOptionsプロパティ取得失敗 | Stop-Functionでエラー出力し、処理を継続 |
| Settingsプロパティ取得失敗 | Stop-Functionでエラー出力し、処理を継続 |

## 備考

- 3つのSMOコレクション（Information, UserOptions, Settings）から統合的にプロパティを取得
- ワイルドカードを使用したプロパティ名フィルタリングが可能
- パイプライン入力に対応し、複数インスタンスを一括処理可能
- 出力は即座にパイプラインに出力される（コレクションに蓄積しない）

---

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

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

### 推奨読解順序

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

出力されるPSCustomObjectの構造とSMOプロパティコレクションを理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaInstanceProperty.ps1 | `public/Get-DbaInstanceProperty.ps1` | 40-54行目の.OUTPUTSセクション |

**読解のコツ**: 3つのプロパティコレクション（Information, UserOptions, Settings）がどのようにPropertyTypeで区別されるかを把握する。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaInstanceProperty.ps1 | `public/Get-DbaInstanceProperty.ps1` | 91-98行目のparamブロック |

**主要処理フロー**:
1. **92-93行目**: SqlInstanceは必須でパイプライン入力対応
2. **95-96行目**: InstanceProperty/ExcludeInstancePropertyでフィルタリング

#### Step 3: Informationプロパティ取得を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaInstanceProperty.ps1 | `public/Get-DbaInstanceProperty.ps1` | 107-125行目 |

**主要処理フロー**:
- **108行目**: $server.Information.Propertiesでプロパティ取得
- **110-112行目**: InstancePropertyでフィルタリング
- **113-115行目**: ExcludeInstancePropertyで除外
- **116-122行目**: メタ情報追加と出力

#### Step 4: UserOptionsプロパティ取得を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 4-1 | Get-DbaInstanceProperty.ps1 | `public/Get-DbaInstanceProperty.ps1` | 127-145行目 |

**主要処理フロー**:
- **128行目**: $server.UserOptions.Propertiesでプロパティ取得
- **140行目**: PropertyType = 'UserOption'として出力

#### Step 5: Settingsプロパティ取得を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 5-1 | Get-DbaInstanceProperty.ps1 | `public/Get-DbaInstanceProperty.ps1` | 147-165行目 |

**主要処理フロー**:
- **148行目**: $server.Settings.Propertiesでプロパティ取得
- **160行目**: PropertyType = 'Setting'として出力

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

```
Get-DbaInstanceProperty
    │
    ├─ Connect-DbaInstance
    │      └─ SQL Server接続確立
    │
    ├─ $server.Information.Properties
    │      ├─ フィルタリング（InstanceProperty/ExcludeInstanceProperty）
    │      ├─ Add-Member（メタ情報追加）
    │      └─ Select-DefaultView（出力）
    │
    ├─ $server.UserOptions.Properties
    │      ├─ フィルタリング（InstanceProperty/ExcludeInstanceProperty）
    │      ├─ Add-Member（メタ情報追加）
    │      └─ Select-DefaultView（出力）
    │
    └─ $server.Settings.Properties
           ├─ フィルタリング（InstanceProperty/ExcludeInstanceProperty）
           ├─ Add-Member（メタ情報追加）
           └─ Select-DefaultView（出力）
```

### データフロー図

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

SqlInstance ─────────────▶ Connect-DbaInstance
                                  │
                          ┌───────▼───────┐
                          │ $server取得   │
                          └───────────────┘
                                  │
        ┌─────────────────────────┼─────────────────────────┐
        ▼                         ▼                         ▼
  Information.            UserOptions.              Settings.
   Properties              Properties              Properties
        │                         │                         │
        ▼                         ▼                         ▼
   フィルタリング            フィルタリング            フィルタリング
(InstanceProperty/     (InstanceProperty/     (InstanceProperty/
ExcludeInstanceProperty) ExcludeInstanceProperty) ExcludeInstanceProperty)
        │                         │                         │
        ▼                         ▼                         ▼
   Add-Member              Add-Member              Add-Member
(ComputerName,        (ComputerName,        (ComputerName,
 InstanceName,         InstanceName,         InstanceName,
 SqlInstance,          SqlInstance,          SqlInstance,
 PropertyType=         PropertyType=         PropertyType=
 'Information')        'UserOption')         'Setting')
        │                         │                         │
        └─────────────────────────┼─────────────────────────┘
                                  ▼
                          Select-DefaultView
                                  │
                                  ▼
                      [PSCustomObject[] 出力]
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaInstanceProperty.ps1 | `public/Get-DbaInstanceProperty.ps1` | ソース | インスタンスプロパティ取得 |
| Connect-DbaInstance.ps1 | `public/Connect-DbaInstance.ps1` | ソース | SQL Server接続確立 |
