PowerShellでWindowsのバージョンを調べるときは、製品名、表示バージョン、内部Version、ビルド番号、エディション、32/64ビット、クライアントかServerかを分けて取得します。「Windows 11」だけでは更新適用状況を判断できず、「10.0」という内部Versionだけでも製品名を特定できません。本記事ではGet-ComputerInfoとWin32_OperatingSystemを使い、資産管理や問い合わせへ使える情報を正確に整理します。
何を確認したいかを先に決める
ヘルプデスクなら表示名とビルド、アプリ互換性ならOSアーキテクチャと版、更新管理ならビルドと更新履歴、サーバー棚卸しならCaption、Version、BuildNumber、InstallDateなどが必要です。目的なくGet-ComputerInfoの全項目を保存すると、不要な端末情報まで収集し、比較もしにくくなります。必要列を先に定義します。
実行結果にはコンピューター名、実行時刻、取得方法、PowerShellの版を付けます。仮想デスクトップ、コンテナー、互換モード、リモートセッションでは、実行している環境と利用者が見ている端末が一致しない場合があります。どのOSを調べたのか、ローカル、接続先、ホスト、ゲストを明記します。
Get-ComputerInfoでWindows情報を選んで取得する
Get-ComputerInfo -Property WindowsProductName,WindowsVersion,OsVersion,OsBuildNumber,OsArchitectureは、必要な項目をまとめて取得する例です。利用できるプロパティは環境により異なる可能性があるため、Get-ComputerInfo | Get-Memberで確認できます。全項目を実行すると時間と出力量が増えるため、通常はPropertyで絞ります。
WindowsProductNameは製品表示、WindowsVersionは表示バージョンに相当する情報、OsVersionとOsBuildNumberは内部版とビルド、OsArchitectureはOSアーキテクチャの確認に使えます。値の意味を混ぜず、レポート列名を「OS名」「表示バージョン」「ビルド」「アーキテクチャ」のように利用者へ分かる名前へ変えます。
Win32_OperatingSystemをCIMで取得する
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption,Version,BuildNumber,OSArchitecture,InstallDate,LastBootUpTimeで、OSのCaption、Version、BuildNumberなどを取得できます。MicrosoftのWin32_OperatingSystem資料で各プロパティの意味を確認し、Nullや予期しない値を扱えるようにします。
InstallDateはOSが現在の形でインストールされた日時の手掛かりですが、機能更新やイメージ展開、復元で期待と異なる場合があります。LastBootUpTimeは最終起動時刻であり、OSの導入日ではありません。稼働時間を求めるなら現在時刻との差を計算しますが、時計変更や休止状態の影響も考慮します。
内部Version 10.0だけでWindows 10と11を判定しない
Windows 10とWindows 11は、内部Versionがどちらも10.0として報告される場合があります。そのためVersion文字列だけで製品名を決めず、Caption、ProductName、BuildNumber、公式のリリース情報を組み合わせます。将来の製品更新で境界が変わる可能性があるため、ビルド番号の固定表をコードへ永久に埋め込まないようにします。
資産管理では生のCaption、Version、BuildNumberを保存し、表示用分類は別の変換テーブルで管理します。こうするとMicrosoftのサポート情報が更新されたとき、過去データを再取得せず分類だけ直せます。言語によりCaption表記が変わる場合もあるため、文字列の完全一致だけに依存しない設計にします。
32ビット・64ビットとプロセス側を区別する
OSArchitectureはOS自体のアーキテクチャを示します。PowerShellプロセスが32ビットで動いているかは別問題で、[Environment]::Is64BitOperatingSystemと[Environment]::Is64BitProcessを比較できます。64ビットOS上で32ビットPowerShellを使うと、レジストリやSystem32へのアクセスがリダイレクトされる場合があります。
アプリの互換性確認では、OS、PowerShell、アプリの三つのアーキテクチャを記録します。ARM64端末ではエミュレーションも関係します。「64ビット」とだけ記録せず、x64、ARM64など取得できる値を保持します。ドライバーやシェル拡張などOSと密接な製品は、ベンダーの対応表を確認します。
GUIのwinverと結果を照合する
利用者が画面で確認する場合、winverを実行するとWindowsのバージョンとOSビルドを表示できます。PowerShellレポートとwinverの表示を一台で照合し、ヘルプデスク向け手順にどの値を伝えるかを統一します。スクリーンショットにはユーザー名や組織情報が含まれる場合があるため、共有前に確認します。
設定アプリの「システム」「バージョン情報」ではエディション、バージョン、OSビルド、システムの種類などを確認できます。PowerShellが実行できない端末の代替になります。自動収集結果と利用者申告が違う場合は、取得時刻、再起動前後、接続先端末の取り違え、VDIの再展開を確認します。
複数端末を収集するときの注意
リモート端末ではCIMセッションを作り、Get-CimInstanceへ渡します。対象端末名、成功、アクセス拒否、オフライン、タイムアウトを別列で記録し、取得失敗を古いOSや空欄として扱いません。資格情報をCSVやスクリプトへ保存せず、管理基盤と最小権限のアカウントを使います。多数端末へは負荷とネットワークを考慮して段階的に実行します。
収集結果には端末名だけでなく、一意な資産IDや管理IDを付けます。端末名再利用や再イメージで同名の別個体になる場合があります。個人利用端末の情報収集はプライバシーと組織規程を確認します。不要なシリアル、ユーザー、ソフト一覧まで同時に集めず、OS版確認の目的に必要な項目へ限定します。
サポート期限の判定は公式一覧と分離する
取得したバージョンとビルドだけでは、エディション、チャネル、契約、延長更新などを含むサポート状態を完全には判定できません。MicrosoftのライフサイクルとWindowsリリース情報を最新状態で参照し、収集データと突き合わせます。スクリプトへ固定した終了日を入れる場合は、更新責任者と見直し日を設定します。
OS情報取得は棚卸しの入口です。サポート外と判定した端末を自動的に更新・再起動する処理とは分離します。業務アプリ、暗号化、空き容量、ドライバー、バックアップ、利用者連絡を確認して更新計画を作ります。レポートでは「取得値」「参照した公式表の版」「判定日」を残すと監査しやすくなります。
実務での確認チェックリスト
- 目的に必要なOS名、表示バージョン、ビルド、アーキテクチャを定義する
- Get-ComputerInfoはPropertyで必要項目へ絞る
- Win32_OperatingSystemのCaption、Version、BuildNumberを併記する
- Version 10.0だけでWindows 10/11を断定しない
- OSとPowerShellプロセスのアーキテクチャを区別する
- リモート取得失敗を空欄や旧版として扱わない

コメント