# 画面設計書 122-コンピュータシステム

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおけるコンピュータシステム情報取得機能の設計仕様を定義する。SQL Serverホストマシンのハードウェア情報、プロセッサ詳細、メモリ構成、ドメインメンバーシップ等を包括的に収集する。

### 本画面の処理概要

**業務上の目的・背景**：SQL Serverのキャパシティプランニング、インストール前のシステム要件確認、パフォーマンス問題のトラブルシューティングには、ホストマシンの詳細なハードウェア情報が不可欠である。本機能は、WMIクラス（Win32_ComputerSystemおよびWin32_Processor）を照会してCPU詳細、ハイパースレッディング状態、物理メモリ総量、ドメインロールを収集し、再起動保留状態の検出やAWS EC2メタデータの取得もオプションで提供する。これにより、手動でのシステム情報収集を自動化し、複数サーバーの一括インベントリ取得が可能になる。

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

**主要な操作・処理内容**：
1. ターゲットコンピュータのネットワーク名解決
2. Win32_ComputerSystemクラスからシステム情報を取得（製造元、モデル、メモリ、プロセッサ数等）
3. Win32_Processorクラスからプロセッサ詳細を取得（名前、クロック速度等）
4. 論理プロセッサ数と物理プロセッサ数の比較によるハイパースレッディング判定
5. AWS EC2インスタンスの場合、メタデータエンドポイントからクラウド固有情報を取得（-IncludeAws指定時）
6. 再起動保留状態の検出
7. 結果をカスタムオブジェクトとして出力

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

**権限による表示制御**：
- ローカルコンピュータの情報取得には管理者権限を推奨
- リモートコンピュータの操作にはWMIアクセス権限とリモート管理権限が必要
- AWS EC2メタデータの取得にはインスタンスメタデータサービス（IMDS）へのアクセスが必要

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 95 | Get-DbaComputerSystem | 主機能 | コンピュータシステム情報の取得 |

## 画面種別

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

## URL/ルーティング

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

## 入出力項目

### Get-DbaComputerSystem パラメータ

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

## 表示項目

### デフォルト表示プロパティ

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| ComputerName | string | 解決されたコンピュータ名 |
| Domain | string | 所属ドメイン名 |
| DomainRole | string | ドメインロール（Standalone Workstation/Member Server等） |
| Manufacturer | string | ハードウェア製造元 |
| Model | string | ハードウェアモデル名 |
| SystemFamily | string | システムファミリ分類 |
| SystemType | string | システムタイプ（例：x64-based PC） |
| ProcessorName | string | プロセッサ名 |
| ProcessorCaption | string | プロセッサの説明 |
| ProcessorMaxClockSpeed | int | 最大クロック速度（MHz） |
| NumberLogicalProcessors | int | 論理プロセッサ数（ハイパースレッディング含む） |
| NumberProcessors | int | 物理プロセッサ数 |
| IsHyperThreading | bool | ハイパースレッディング有効フラグ |
| TotalPhysicalMemory | DbaSize | 物理メモリ総量 |
| IsSystemManagedPageFile | bool | ページファイル自動管理フラグ |
| PendingReboot | bool/null | 再起動保留状態 |

### 追加プロパティ（Select-Object *で表示）

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| SystemSkuNumber | string | システムSKU番号 |
| IsDaylightSavingsTime | bool | 夏時間有効フラグ |
| DaylightInEffect | bool | 夏時間適用中フラグ |
| DnsHostName | string | DNSホスト名 |
| AdminPasswordStatus | string | 管理者パスワード状態 |

### AWS EC2追加プロパティ（-IncludeAws指定時）

| プロパティ名 | 型 | 説明 |
|-------------|-----|------|
| AwsAmiId | string | AMI ID |
| AwsIamRoleArn | string | IAMインスタンスプロファイルARN |
| AwsEc2InstanceId | string | EC2インスタンスID |
| AwsEc2InstanceType | string | EC2インスタンスタイプ |
| AwsAvailabilityZone | string | アベイラビリティゾーン |
| AwsPublicHostName | string | パブリックホスト名 |

## イベント仕様

### 1-コンピュータシステム情報取得（Get-DbaComputerSystem）

指定されたコンピュータのハードウェア・システム情報を取得する。

**処理フロー**:
1. `Resolve-DbaNetworkName`でコンピュータ名を解決
2. 名前解決失敗時はStop-Functionで警告を出力しスキップ
3. `Get-DbaCmObject -ClassName Win32_ComputerSystem`でシステム情報取得
4. `Get-DbaCmObject -ClassName Win32_Processor`でプロセッサ情報取得
5. AdminPasswordStatusの数値を文字列に変換（0=Disabled, 1=Enabled, 2=Not Implemented, 3=Unknown）
6. DomainRoleの数値を文字列に変換（0-5のロール名）
7. NumberOfLogicalProcessors > NumberofProcessorsでハイパースレッディング判定
8. IncludeAwsが指定された場合、169.254.169.254へのアクセスでEC2判定
9. EC2の場合、メタデータAPIからAMI ID、インスタンスタイプ等を取得
10. `Test-PendingReboot`で再起動保留状態を確認
11. PSCustomObjectを構築して出力

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

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

### 操作別影響一覧

| 操作（イベント） | 対象リソース | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| Get-DbaComputerSystem | Win32_ComputerSystem | READ | システム情報の読み取り |
| Get-DbaComputerSystem | Win32_Processor | READ | プロセッサ情報の読み取り |
| Get-DbaComputerSystem | AWS IMDS | READ | EC2メタデータの読み取り |

## メッセージ仕様

| メッセージID | 種別 | メッセージ | 発生条件 |
|-------------|------|---------|---------|
| - | Warning | "Unable to resolve hostname of $computer. Skipping." | 名前解決に失敗 |
| - | Warning | "$computerResolved was not found to be an EC2 instance." | AWSメタデータサービスにアクセス不可 |
| - | Verbose | "Not able to get information about pending reboots." | 再起動保留状態の取得に失敗 |
| - | Error | "Failure" | 全般的なエラー発生時 |

## 例外処理

| 例外条件 | 処理内容 |
|---------|---------|
| 名前解決失敗 | 警告メッセージを出力し、次のコンピュータの処理を継続 |
| WMI接続失敗 | Stop-Functionでエラーを出力し処理を中断 |
| AWS IMDS接続失敗 | 警告を出力しAWS情報なしで続行 |
| 再起動状態取得失敗 | PendingRebootをnullに設定して続行 |

## 備考

- DomainRoleの値:
  - 0: Standalone Workstation
  - 1: Member Workstation
  - 2: Standalone Server
  - 3: Member Server
  - 4: Backup Domain Controller
  - 5: Primary Domain Controller
- ハイパースレッディングの判定は論理プロセッサ数と物理プロセッサ数の比較で行われる
- AWS EC2インスタンスの場合、メタデータサービス（169.254.169.254）へのアクセスが可能である必要がある
- TotalPhysicalMemoryはDbaSizeオブジェクトで返され、KB/MB/GB単位での自動変換が可能

---

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

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

### 推奨読解順序

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

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Get-DbaComputerSystem.ps1 | `public/Get-DbaComputerSystem.ps1` | 行184-206のPSCustomObjectでプロパティ構造を確認 |

**読解のコツ**: Win32_ComputerSystemとWin32_Processorクラスのプロパティがどのようにマッピングされているかを確認する。

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

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

**主要処理フロー**:
1. **105行**: `Resolve-DbaNetworkName`でコンピュータ名を解決
2. **113-119行**: Credential有無で分岐し`Get-DbaCmObject`を呼び出し
3. **121-128行**: AdminPasswordStatusの数値→文字列変換
4. **130-138行**: DomainRoleの数値→文字列変換
5. **140-143行**: ハイパースレッディング判定
6. **145-174行**: IncludeAws処理 - EC2判定とメタデータ取得
7. **176-182行**: 再起動保留状態の確認
8. **184-206行**: 出力オブジェクト構築
9. **207-214行**: AWS情報の追加（該当時）
10. **215-216行**: デフォルト表示プロパティの選択

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Get-DbaCmObject | `internal/functions/Get-DbaCmObject.ps1` | WMIオブジェクト取得ユーティリティ |
| 3-2 | Resolve-DbaNetworkName | `internal/functions/Resolve-DbaNetworkName.ps1` | コンピュータ名解決 |
| 3-3 | Test-PendingReboot | `internal/functions/Test-PendingReboot.ps1` | 再起動保留状態チェック |

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

```
Get-DbaComputerSystem
    |
    +-- Resolve-DbaNetworkName
    |      +-- DNS解決 / NetBIOS解決
    |
    +-- Get-DbaCmObject -ClassName Win32_ComputerSystem
    |      +-- Get-CimInstance または Get-WmiObject
    |
    +-- Get-DbaCmObject -ClassName Win32_Processor
    |      +-- Get-CimInstance または Get-WmiObject
    |
    +-- [IncludeAws時] Invoke-Command2
    |      +-- Invoke-TlsRestMethod (169.254.169.254)
    |
    +-- Test-PendingReboot
    |      +-- レジストリチェック
    |
    +-- [PSCustomObject] 出力オブジェクト構築
    |
    +-- Select-DefaultView (表示プロパティ選択)
```

### データフロー図

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

ComputerName ──────────> Resolve-DbaNetworkName ─────────>
                                |
                                v
                        Get-DbaCmObject ─────────────>
                        (Win32_ComputerSystem)
                                |
                                v
                        Get-DbaCmObject ─────────────>
                        (Win32_Processor)
                                |
                                v
[IncludeAws] ──────────> AWS IMDS API ───────────────>
                                |
                                v
                        Test-PendingReboot ──────────>
                                |
                                v
                        PSCustomObject ──────────────> 出力

[出力オブジェクト]
    ComputerName, Domain, DomainRole, Manufacturer, Model,
    ProcessorName, NumberLogicalProcessors, TotalPhysicalMemory,
    IsHyperThreading, PendingReboot, [AWS情報]
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Get-DbaComputerSystem.ps1 | `public/Get-DbaComputerSystem.ps1` | ソース | コンピュータシステム情報取得コマンド |
| Get-DbaCmObject.ps1 | `internal/functions/Get-DbaCmObject.ps1` | 内部関数 | WMI/CIMオブジェクト取得ユーティリティ |
| Resolve-DbaNetworkName.ps1 | `internal/functions/Resolve-DbaNetworkName.ps1` | 内部関数 | ネットワーク名解決 |
| Test-PendingReboot.ps1 | `internal/functions/Test-PendingReboot.ps1` | 内部関数 | 再起動保留状態チェック |
| Invoke-Command2.ps1 | `internal/functions/Invoke-Command2.ps1` | 内部関数 | リモートコマンド実行ユーティリティ |
| Invoke-TlsRestMethod.ps1 | `internal/functions/Invoke-TlsRestMethod.ps1` | 内部関数 | TLS対応RESTメソッド |
