PowerShellでシステムのバージョンとアーキテクチャを確認する方法

Windows versionとarchitectureでは、表示名ではなくlocal OS・process bitness・system typeを最初の対象キーにします。変更や集計へ進む前にProductName・DisplayVersion・Build・OSArchitectureを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「registry・CIM・Environmentの三sourceが整合する状態」です。Microsoft Learn:Get-ComputerInfoのOS propertyとGet-CimInstanceのWin32_OperatingSystem照合が定義するGet-ComputerInfoのOS propertyとGet-CimInstanceのWin32_OperatingSystem照合を根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:build情報がsource間で矛盾する。該当するときは操作を進めず、読み取りだけなのでOS update状態を確認して再取得するを実行可能な形で確認してから再計画します。

目次

Windows versionとarchitecture|現状を時刻付きで記録する:ProductName・DisplayVersion・Build・OSArchitecture

次のGet-ComputerInfoを実行するときは、開始時刻と対象件数も記録します。モジュール未導入、非対応Edition、対象名違い、権限不足があるため、空結果だけで対象なしと結論づけません(Windowsバージョンとアーキテクチャでは「OSが64bitでも現在のPowerShellプロセスが32bitの場合がある」を満たさなければGet-CimInstanceを続けません)。

Get-ComputerInfo -Property WindowsProductName, WindowsVersion, OsName, OsVersion, OsBuildNumber, OsArchitecture, CsSystemType
[Environment]::Is64BitOperatingSystem
[Environment]::Is64BitProcess

OSが64bitでも現在のPowerShellプロセスが32bitの場合がある。表示名、Build、UBR、プロセスアーキテクチャを分ける。 そのため、Get-ComputerInfoの値は別の公式な取得経路またはGet-ItemPropertyと照合します。

Windows versionとarchitecture|最短の答えを実測へ落とす:registry・CIM・Environmentの三sourceが整合する状態

Windowsバージョンとアーキテクチャでは、空結果を正常扱いする前にモジュール未導入、非対応Edition、対象名違い、権限不足を除外します。Get-ItemPropertyでも対象が見つからず、関連エラーがなければゼロ件と判断します。

Get-ComputerInfoとGet-ItemPropertyの差分は、変更を意図した列だけである必要があります。対象を一意にできず、業務サービスや別ユーザーへ波及する場合は作業を中止し、読み取りのみなら復旧不要(WindowsバージョンとアーキテクチャではMicrosoft Learn:Get-ComputerInfoの適用範囲に照らし、Get-ComputerInfoとGet-ItemPropertyの差分だけを採用します)。結果を共有する場合はプロダクトIDや端末名を含めず、必要なバージョン列だけを出す。

判断要素Windowsバージョンとアーキテクチャで記録する内容
対象の識別対象名、モジュール、状態、版、固有識別子
最初の確認Get-ComputerInfo
変更または操作Get-CimInstance
再確認Get-ItemProperty
中止条件対象を一意にできず、業務サービスや別ユーザーへ波及する

Windows versionとarchitecture|対象を一件へ固定する:local OS・process bitness・system type

Windowsバージョンとアーキテクチャで使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-ComputerInfo で確認します。通常ユーザー。対象候補が複数なら対象名、モジュール、状態、版、固有識別子を使い、表示名の部分一致だけで選びません。

  • Windowsバージョンとアーキテクチャ: 実行端末と現在ユーザーを記録する
  • Get-ComputerInfo: Source、Version、利用可能なパラメーターを確認する
  • 対象名、モジュール、状態、版、固有識別子: 変更前の値を日時付きで保存する
  • 現在値、対象ID、関連設定、復旧に必要な正規パッケージ: 復旧に使えることを読み取り確認する
  • 対象を一意にできず、業務サービスや別ユーザーへ波及する: 該当すれば本番実行を見送る

Windows versionとarchitecture|空結果と取得失敗を分ける:32-bit processを32-bit OSと誤判定すること

Windowsバージョンとアーキテクチャで「はじめに」を扱うときは、はじめにの表示名だけでなく対象名、モジュール、状態、版、固有識別子を記録します。Get-ItemPropertyでも同じ対象が返ることを確かめます。

基本コードではGet-ComputerInfoからOsName、OsVersion、OsBuildNumber、OsArchitectureを同じ取得時刻で保存します。Environment.Is64BitProcessはPowerShellプロセスのビット数なので、32-bitプロセスという結果を32-bit Windowsの証拠として使いません。

コードの説明の確認結果はWindowsバージョンとアーキテクチャの変更可否に直結します。対象を一意にできず、業務サービスや別ユーザーへ波及するなら、コードの説明の調査記録を残して実行を見送ります。

「補足事項」の値が想定と違う場合、モジュール未導入、非対応Edition、対象名違い、権限不足を切り分けます。OSが64bitでも現在のPowerShellプロセスが32bitの場合がある。表示名、Build、UBR、プロセスアーキテクチャを分ける。 ため、補足事項を強制的に書き換えて症状を隠しません。

Windowsの版とarchitectureはGet-ComputerInfoのWindowsProductName、WindowsVersion、OsBuildNumber、OsArchitectureを同じ端末で保存します。32-bit PowerShellプロセスのbitnessをOS architectureと取り違えず、必要ならレジストリのCurrentBuildも照合します。

リモート確認ではCimSessionのComputerNameを結果へ含め、Win32_OperatingSystemのCaption、Version、BuildNumber、OSArchitectureを取得します。接続失敗時にローカル値へ自動フォールバックせず、対象ホスト、認証、WinRMエラーを失敗行として残します。

WindowsバージョンとアーキテクチャでGet-ComputerInfoが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。

Get-CimInstanceの空結果は成功とは限りません。Windowsバージョンとアーキテクチャではモジュール未導入、非対応Edition、対象名違い、権限不足を調べ、エラーを非表示にした場合も件数へ含めます。

WindowsバージョンとアーキテクチャでGet-ItemPropertyを使う前に、Get-Command Get-ItemPropertyでSourceとVersionを確認します。別モジュールの同名コマンドを実行しないためです。

Select-ObjectはWindowsバージョンとアーキテクチャの4番目の確認手段です。Get-Help Select-Object -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します(Windowsバージョンとアーキテクチャでは「OSが64bitでも現在のPowerShellプロセスが32bitの場合がある」を満たさなければGet-CimInstanceを続けません)。

Windows versionとarchitecture|原状回復の参照値を保存する:読み取りだけなのでOS update状態を確認して再取得する

Windowsバージョンとアーキテクチャは読み取り中心ですが、出力には端末名、SID、IP、メールアドレスなどが含まれる場合があります。保存先のACLと保管期限を決め、共有時は必要列だけに限定します。

Windowsバージョンとアーキテクチャの追加確認例です。システムを変更する命令ではなく、Get-ComputerInfoの結果を別の列や範囲で確かめる目的で使います(WindowsバージョンとアーキテクチャではMicrosoft Learn:Get-ComputerInfoの適用範囲に照らし、Get-ComputerInfoとGet-ItemPropertyの差分だけを採用します)。

$os = Get-CimInstance Win32_OperatingSystem
[pscustomobject]@{ Caption=$os.Caption; Version=$os.Version; Build=$os.BuildNumber; Architecture=$os.OSArchitecture }

Get-CimInstanceが何も返さなくても成功とは判断しません。Get-ItemPropertyと関連機能の利用テストを続けます。

Windows versionとarchitecture|利用側の結果まで確かめる:registry・CIM・Environmentの三sourceが整合する状態

Get-ItemPropertyでは、変更前に保存した対象名、モジュール、状態、版、固有識別子と同じ対象を選びます。対象オブジェクトの現在値と関連サービスまたはログを二経路で確認することで、別スコープの値を成功結果として採用しません(Windowsバージョンとアーキテクチャでは「OSが64bitでも現在のPowerShellプロセスが32bitの場合がある」を満たさなければGet-CimInstanceを続けません)。

Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' | Select-Object ProductName, DisplayVersion, CurrentBuild, UBR
  • Get-ItemProperty: 同じ対象IDを再取得できた
  • Windowsバージョンとアーキテクチャ: 意図した値または件数だけが変化した
  • 対象オブジェクトの現在値と関連サービスまたはログを二経路で確認する: 関連機能も異常がない
  • モジュール未導入、非対応Edition、対象名違い、権限不足: 取得失敗をゼロ件として扱っていない
  • OSが64bitでも現在のPowerShellプロセスが32bitの場合がある。表示名、Build、UBR、プロセスアーキテクチャを分ける。: 環境固有の制約に反していない

Windows versionとarchitecture|続行しない境界を明示する:build情報がsource間で矛盾する

Get-ComputerInfoが「見つからない」ときは、Get-CommandとGet-Module -ListAvailableで提供元を確認します。Windowsバージョンとアーキテクチャが非対応のEditionなら、名前が似たコマンドへ置き換えません。

Get-ItemPropertyで別の対象が返った場合、表示名の一致ではなく対象名、モジュール、状態、版、固有識別子で取り直します。誤対象への変更があれば追加操作を止めます。

OSが64bitでも現在のPowerShellプロセスが32bitの場合がある。表示名、Build、UBR、プロセスアーキテクチャを分ける。 この条件を満たさない結果は、コマンドの終了コードが0でも合格にしません。

Windows versionとarchitecture|定期実行へ渡す記録を決める:ProductName・DisplayVersion・Build・OSArchitecture

  • Get-ComputerInfoの実行時刻、対象件数、エラー件数を残した
  • 対象名、モジュール、状態、版、固有識別子で対象を一意に特定した
  • 現在値、対象ID、関連設定、復旧に必要な正規パッケージを変更前に保存して読めることを確認した
  • Get-CimInstanceの対象を一端末・一ユーザー・一設定に限定した
  • Get-ItemPropertyと実利用テストの両方を確認した
  • 対象を一意にできず、業務サービスや別ユーザーへ波及する場合は実行を中止した

断定できません。Windowsバージョンとアーキテクチャではモジュール未導入、非対応Edition、対象名違い、権限不足でも空になります。エラーを表示し、権限とスコープを確認してからGet-ItemPropertyまたは別の公式な取得方法で照合します(Windowsバージョンとアーキテクチャでは「OSが64bitでも現在のPowerShellプロセスが32bitの場合がある」を満たさなければGet-CimInstanceを続けません)。

Windows versionとarchitecture|作成物だけを切り離して戻す:読み取りだけなのでOS update状態を確認して再取得する

読み取りのみなら復旧不要。結果を共有する場合はプロダクトIDや端末名を含めず、必要なバージョン列だけを出す。

Windowsバージョンとアーキテクチャを戻した後はGet-ComputerInfoとGet-ItemPropertyを再実行し、対象名、モジュール、状態、版、固有識別子が変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存した現在値、対象ID、関連設定、復旧に必要な正規パッケージとログを担当者へ渡します(WindowsバージョンとアーキテクチャではMicrosoft Learn:Get-ComputerInfoの適用範囲に照らし、Get-ComputerInfoとGet-ItemPropertyの差分だけを採用します)。

Windows versionとarchitecture|例外条件を質問から整理する:x86 PowerShell on x64 Windowsを見分ける方法

権限だけが原因とは限りません。OSが64bitでも現在のPowerShellプロセスが32bitの場合がある。表示名、Build、UBR、プロセスアーキテクチャを分ける。 対象を一意にできず、業務サービスや別ユーザーへ波及するなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(WindowsバージョンとアーキテクチャではMicrosoft Learn:Get-ComputerInfoの適用範囲に照らし、Get-ComputerInfoとGet-ItemPropertyの差分だけを採用します)。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次