# 画面設計書 128-ページファイル設定

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおけるページファイル設定取得機能の設計仕様を定義する。SQL Serverホストマシンのページファイル構成を取得し、キャパシティプランニングとパフォーマンス分析を支援する。

### 本画面の処理概要

**業務上の目的・背景**：Windowsのページファイル設定は、メモリ圧迫時のSQL Serverパフォーマンスに直接影響する。不適切なページファイル構成は、メモリ不足時のパフォーマンス低下やシステム不安定の原因となる。本機能は、CIMを通じてWin32_ComputerSystem、Win32_PageFile、Win32_PageFileUsage、Win32_PageFileSettingを照会し、ページファイルの現在の使用状況、ピーク使用量、初期サイズ、最大サイズ、自動管理設定を取得する。

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

**主要な操作・処理内容**：
1. Win32_ComputerSystemから自動管理設定（AutomaticManagedPageFile）を確認
2. 自動管理でない場合、Win32_PageFile、Win32_PageFileUsage、Win32_PageFileSettingを照会
3. 各ページファイルの設定と使用状況をPageFileSettingオブジェクトとして出力
4. 自動管理の場合は、ファイル固有のプロパティをnullに設定して出力

**画面遷移**：本機能はCLIコマンドであり、GUI画面遷移は存在しない。関連コマンドとしてGet-DbaComputerSystemでシステム情報を取得できる。

**権限による表示制御**：
- ローカル管理者権限を推奨
- リモートコンピュータの操作にはWMIアクセス権限が必要

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 641 | Get-DbaPageFileSetting | 主機能 | ページファイル設定の取得 |

## 画面種別

CLI（コマンドラインインターフェース） - 単一コマンドレット

## URL/ルーティング

PowerShellコマンドレット:
- `Get-DbaPageFileSetting`

## 入出力項目

### Get-DbaPageFileSetting パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|------|-------------|------|
| ComputerName | DbaInstance[] | No | $env:COMPUTERNAME | 情報を取得するコンピュータ名 |
| Credential | PSCredential | No | - | 代替Windows資格情報 |
| EnableException | switch | No | $false | 例外を有効化 |

## 表示項目

### Get-DbaPageFileSetting 出力プロパティ

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| ComputerName | string | コンピュータ名 |
| AutoPageFile | bool | ページファイルがWindows自動管理かどうか |
| FileName | string | ページファイルの論理名（自動管理時はnull） |
| Status | string | ページファイルの状態（通常"OK"、自動管理時はnull） |
| SystemManaged | bool | InitialSizeとMaximumSizeが両方0かどうか（自動管理時はnull） |
| LastModified | DateTime | 最終変更日時（自動管理時はnull） |
| LastAccessed | DateTime | 最終アクセス日時（自動管理時はnull） |
| AllocatedBaseSize | int | 現在の割り当てサイズ（MB、自動管理時はnull） |
| InitialSize | int | 初期サイズ（MB、自動管理時はnull） |
| MaximumSize | int | 最大サイズ（MB、自動管理時はnull） |
| PeakUsage | int | システム起動後のピーク使用量（MB、自動管理時はnull） |
| CurrentUsage | int | 現在の使用量（MB、自動管理時はnull） |

## イベント仕様

### 1-ページファイル設定取得（Get-DbaPageFileSetting）

指定されたコンピュータのページファイル設定を取得する。

**処理フロー**:
1. Get-DbaCmObjectのsplatパラメータを構築
2. Credentialがある場合はsplatに追加
3. `Get-DbaCmObject -Query "SELECT * FROM win32_computersystem"`でコンピュータシステム情報を取得
4. AutomaticManagedPageFileプロパティをチェック
5. 自動管理でない場合:
   - `Win32_PageFile`からページファイル情報を取得
   - `Win32_PageFileUsage`から使用状況を取得
   - `Win32_PageFileSetting`から設定情報を取得
   - 各ページファイルについてPageFileSettingオブジェクトを作成
   - ファイル名でマッチングして設定と使用状況を関連付け
   - SystemManagedはInitialSizeとMaximumSizeが両方0の場合True
6. 自動管理の場合:
   - AutoPageFile=Trueを設定
   - その他のファイル固有プロパティはすべてnull
7. Dataplat.Dbatools.Computer.PageFileSettingオブジェクトを出力

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

本機能はSQL Serverデータベースにはアクセスしない。WMI経由でWindowsシステム情報を取得する。

### 操作別影響一覧

| 操作（イベント） | 対象リソース | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| Get-DbaPageFileSetting | Win32_ComputerSystem | READ | コンピュータシステム情報の読み取り |
| Get-DbaPageFileSetting | Win32_PageFile | READ | ページファイル情報の読み取り |
| Get-DbaPageFileSetting | Win32_PageFileUsage | READ | ページファイル使用状況の読み取り |
| Get-DbaPageFileSetting | Win32_PageFileSetting | READ | ページファイル設定の読み取り |

## メッセージ仕様

| メッセージID | 種別 | メッセージ | 発生条件 |
|-------------|------|---------|---------|
| - | Error | "Failed to retrieve information from $($computer.ComputerName)" | WMI取得失敗 |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| WMI接続失敗 | Stop-Functionでエラーを出力し、次のコンピュータの処理を継続 |

## 備考

- ページファイルが自動管理の場合、Win32_PageFile等のWMIクラスには情報がないため、ファイル固有のプロパティはすべてnullになる
- サイズ情報（AllocatedBaseSize、InitialSize、MaximumSize、PeakUsage、CurrentUsage）はすべてMB単位
- SystemManagedプロパティは、InitialSizeとMaximumSizeが両方0の場合にTrueとなる（システム管理のページファイル）
- 出力はDataplat.Dbatools.Computer.PageFileSetting型のカスタムクラスオブジェクト

---

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

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

### 推奨読解順序

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

出力オブジェクトのプロパティ構造を理解する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaPageFileSetting.ps1 | `public/Get-DbaPageFileSetting.ps1` | 行99-112, 116-129のNew-ObjectでPageFileSettingオブジェクトの構造を確認 |

**読解のコツ**: 自動管理の場合と手動設定の場合で出力オブジェクトの内容が異なる点に注意。

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Get-DbaPageFileSetting.ps1 | `public/Get-DbaPageFileSetting.ps1` | processブロック（行74-131） |

**主要処理フロー**:
1. **76-80行**: Get-DbaCmObject用のsplatパラメータ構築
2. **83行**: Win32_ComputerSystemの取得
3. **84行**: AutomaticManagedPageFileプロパティのチェック
4. **85-87行**: 自動管理でない場合、Win32_PageFile/PageFileUsage/PageFileSettingを取得
5. **93-113行**: 自動管理でない場合のオブジェクト構築
6. **95-96行**: ファイル名でマッチングして設定と使用状況を関連付け
7. **104行**: SystemManagedの判定ロジック
8. **114-130行**: 自動管理の場合のオブジェクト構築（プロパティはnull）

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

```
Get-DbaPageFileSetting
    |
    +-- Get-DbaCmObject -Query "SELECT * FROM win32_computersystem"
    |      +-- AutomaticManagedPageFile確認
    |
    +-- [自動管理でない場合]
    |      |
    |      +-- Get-DbaCmObject -Query "SELECT * FROM win32_pagefile"
    |      |
    |      +-- Get-DbaCmObject -Query "SELECT * FROM win32_pagefileUsage"
    |      |
    |      +-- Get-DbaCmObject -Query "SELECT * FROM win32_pagefileSetting"
    |      |
    |      +-- Where-Object (ファイル名でマッチング)
    |
    +-- New-Object Dataplat.Dbatools.Computer.PageFileSetting
    |
    +-- 出力
```

### データフロー図

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

ComputerName ──────────> Get-DbaCmObject ──────────────────>
                        (Win32_ComputerSystem)
                                |
                                v
                        AutomaticManagedPageFile判定
                                |
                        +-------+-------+
                        |               |
                        v               v
                    False           True
                (手動設定)        (自動管理)
                        |               |
                        v               |
                Win32_PageFile ─────>   |
                        |               |
                        v               |
                Win32_PageFileUsage ─>  |
                        |               |
                        v               |
                Win32_PageFileSetting > |
                        |               |
                        v               v
                ファイル名マッチング    null設定
                        |               |
                        v               v
                PageFileSetting ────> PageFileSetting
                (詳細情報あり)        (AutoPageFile=Trueのみ)
                        |               |
                        +-------+-------+
                                |
                                v
                            出力

[出力オブジェクト]
    ComputerName, AutoPageFile, FileName, Status,
    SystemManaged, LastModified, LastAccessed,
    AllocatedBaseSize, InitialSize, MaximumSize,
    PeakUsage, CurrentUsage
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaPageFileSetting.ps1 | `public/Get-DbaPageFileSetting.ps1` | ソース | ページファイル設定取得 |
| Get-DbaCmObject.ps1 | `internal/functions/Get-DbaCmObject.ps1` | 内部関数 | WMI/CIMオブジェクト取得 |
