Windowsパフォーマンスモニタのリストと意味の取得方法

以下のPowerShellを実行してCSVに取得しています。

<#
.SYNOPSIS
    Windows のパフォーマンスカウンター名と説明(ヘルプ文)を一覧化し、CSVに出力します。

.DESCRIPTION
    レジストリ HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib
    配下の Counter / Help (REG_MULTI_SZ) を読み取り、CSV化します。

    【重要な仕様1: Help側のIDオフセット】
    - Counter配列: [偶数ID, カウンター名, 偶数ID, カウンター名, ...] のペア
    - Help配列   : [ID, 説明文, ID, 説明文, ...] のペア
      あるカウンター名のID が N の場合、対応する説明文の ID は "N + 1" です。

    【重要な仕様2: 言語キーの名前】
    Perflibのサブキー名は、4桁の完全LCID(例: 日本語=0411)ではなく
    "3桁のプライマリ言語ID" で付けられています。
        英語 = 009
        日本語 = 011   ← "0411" ではない点に注意
    さらに、現在のOSの実行言語のデータを自動的にミラーしている
    "CurrentLanguage" という固定名のキーが存在するため、
    環境ごとのLCID名を気にせずこちらを既定で使用します。

.PARAMETER OutputPath
    出力するCSVファイルのパス(既定: カレントフォルダの PerfCounters.csv)

.PARAMETER Lcid
    使用する言語キー名を明示的に指定したい場合に指定(例: "011", "009")。
    省略時は "CurrentLanguage" (現在のOS言語) を自動使用します。

.EXAMPLE
    .\Export-PerfCounters.ps1 -OutputPath C:\temp\PerfCounters.csv

.EXAMPLE
    .\Export-PerfCounters.ps1 -Lcid 009 -OutputPath C:\temp\PerfCounters_EN.csv
#>

[CmdletBinding()]
param(
    [string]$OutputPath = ".\PerfCounters.csv",
    [string]$Lcid = "CurrentLanguage"
)

$ErrorActionPreference = "Stop"

Write-Host "=== Windows パフォーマンスカウンター一覧 CSV出力 ===" -ForegroundColor Cyan

# ---------------------------------------------------------
# 1. レジストリから Counter / Help の生データを取得
#    既定は CurrentLanguage → 無ければ 011(日本語) → 009(英語) の順にフォールバック
# ---------------------------------------------------------
$candidateKeys = if ($PSBoundParameters.ContainsKey('Lcid')) {
    @($Lcid)
} else {
    @("CurrentLanguage", "011", "009")
}

$perflibKey = $null
foreach ($candidate in $candidateKeys) {
    $testKey = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\$candidate"
    if (Test-Path $testKey) {
        $perflibKey = $testKey
        $Lcid = $candidate
        break
    }
}

関連記事

TOP