MSInfo32:Windowsシステムレポートの簡単な生成方法

お使いのコンピューターシステムのシステム情報レポートを作成するのに苦労したことはありますか? システムの詳細を収集することは難しく思えるかもしれませんが、Microsoft System Information Tool(MSInfo32)はその情報をすべて収集するのに便利です!

この記事では、システム情報レポートの生成と表示を短時間でマスターします。詳細を知りたい場合は、続けて読んでください。

前提条件

このチュートリアルでは、Windows 10のどのビルドでも使用できます。コマンドラインからシステムレポートを読み取るには、PowerShellが必要です。このチュートリアルでは、Windows 10バージョン21H1ビルド19043とPowerShell v7.1を使用しています。

システム情報レポートの表示

システムの詳細情報を取得する最初のステップは、MSInfo32ツールを開くことです。

ツールを見つけるには、スタートメニューMSInfo32を検索し、管理者として実行オプションをクリックしてください。

MSInfo32を管理者として実行しないと、MSInfo32は内部情報キャッシュを正しく更新できず、一部のドライバーが停止したと表示される場合があります。

ツールが開くとすぐに、自動的に生成されたレポートが表示されます。システムのハードウェアの概要がシステムの概要ビューで表示されます。このビューでは、システム構成の全体像が概説されています。左側には、各セクションをさらに細分化するカテゴリが表示されます。

Viewing the System Summary in MSInfo32.

MSInfo32レポートの保存

おそらく、システムにハードウェアの変更を加える予定であり、後で比較や報告のためにシステム情報レポートを保存したいと考えているのでしょう。MSInfo32を使用すると、その情報を保存するための2つのオプションがあります:保存とエクスポート。次にそれらについて学びます。

[ファイル]→[保存]をクリックして、情報をNFOファイルとして保存することができます。これはシステム情報ファイルとして知られています。 NFOファイルはXMLベースのファイルであり、後でMSInfo32ツールで同じ整理された形式で表示することができます。

Saving a System Information report as an NFO file.

以下にNFO XMLファイルの例を示します。

<?xml version="1.0"?>
<MsInfo>
  <Metadata>
    <Version>8.0</Version>
    <CreationUTC>08/12/21 02:09:47</CreationUTC>
  </Metadata>
  <Category name="System Summary">
    <Data>
      <Item><![CDATA[OS Name]]></Item>
      <Value><![CDATA[Microsoft Windows 10 Education]]></Value>
    </Data>
    <Data>
      <Item><![CDATA[Version]]></Item>
      <Value><![CDATA[10.0.19043 Build 19043]]></Value>
    </Data>
    <Data>
      <Item><![CDATA[Other OS Description ]]></Item>
      <Value><![CDATA[Not Available]]></Value>
    </Data>
    <Data>
      <Item><![CDATA[OS Manufacturer]]></Item>
      <Value><![CDATA[Microsoft Corporation]]></Value>
    </Data>
    <Data>
      <Item><![CDATA[System Name]]></Item>
      <Value><![CDATA[ASPIREBOX]]></Value>
    </Data>
    <Data>
      <Item><![CDATA[System Manufacturer]]></Item>
      <Value><![CDATA[Acer]]></Value>
...

[ファイル]→[エクスポート]をクリックして、情報をTXTプレーンテキストファイルとして保存することもできますが、これは読みやすいかもしれませんが、後でシステム情報ツールで開くことはできません。

Saving a Syst

以下に、MSInfo32がエクスポートするテキストファイル形式の例を示します。

System Information report written at: 08/11/21 23:33:55
System Name: ASPIREBOX
[System Summary]

Item	Value	
OS Name	Microsoft Windows 10 Education	
Version	10.0.19043 Build 19043	
Other OS Description 	Not Available	
OS Manufacturer	Microsoft Corporation	
System Name	ASPIREBOX	
System Manufacturer	Acer	
System Model	Aspire A514-54	
System Type	x64-based PC	
System SKU	0000000000000000	
Processor	11th Gen Intel(R) Core(TM) i5-1135G7 @ 2.40GHz, 2419 Mhz, 4 Core(s), 8 Logical Processor(s)	
BIOS Version/Date	Insyde Corp. V1.12, 5/26/2021	
SMBIOS Version	3.3	
Embedded Controller Version	1.12	
BIOS Mode	UEFI	
BaseBoard Manufacturer	TGL	
BaseBoard Product	Lily_TL	
BaseBoard Version	V1.12	
Platform Role	Mobile	
Secure Boot State	On	
PCR7 Configuration	Elevation Required to View	
Windows Directory	C:\WINDOWS	
System Directory	C:\WINDOWS\system32	
Boot Device	\Device\HarddiskVolume1	
Locale	Brazil

MSInfo32からエクスポートされたレポートのスクリプト化

MSInfo32からシステム情報レポートを生成する方法を知ったので、コマンドラインからNFOまたはTXTレポートを生成するにはどうすればよいですか?おそらくスクリプトを作成しており、ハードウェア情報を迅速に取得する必要があると考えているのでしょう。

以下に、コマンドラインを使用してNFOおよびTXTレポートの両方を生成するための2つの異なるオプションがあります。

古い記事では、MSInfo32に関する多くの古い記事があり、その中には/categories/category/pch/showcategoriesなどのオプションが表示されることがあります。これらはWindows XPでのみ利用可能であり、Windows 10では利用できません。

最初の例では、コマンドを実行する同じディレクトリにTXTレポートを生成する方法を示しています。次のスクリーンショットで確認できるように。

MSInfo32 /report report.txt

コマンドラインから実行しても、レポート生成前にシステム情報が更新されるウィンドウが表示されます。

Exporting a System Information report as a TXT file on the command line. Notice the window that pop

2番目の例では、レポートが保存されるディレクトリを指定してNFOレポートを生成する方法を示しています。コマンドを実行する前にディレクトリが存在している必要があることに注意してください。そうでない場合、コマンドは静かに失敗します。

MSInfo32 /nfo c:\ata\report.nfo

システム情報レポートのエクスポートがNFOファイルであるため、任意のファイル拡張子が機能しますが、/nfoオプション、規約により、レポート拡張子として.nfoを使用することが推奨されています。

PowerShellを介してNFOファイルを読み取る

このチュートリアル全体で、MSInfo32レポートの生成とエクスポート方法を学びました。しかし、Adam the Automatorに来た理由はあるはずですので、プロセスを自動化する方法を学ぶことになります。

保存されたNFOレポートは、MSInfo32でファイル → 開くメニューから開いて表示することができます。問題は、情報の取得を自動化する際には、グラフィカルインターフェースが理想的ではないことです。NFOファイルはXMLファイルとして保存されているため、PowerShellはXMLファイルを解析してその情報を取得できます。

XMLレポートファイルを読むには、PowerShellウィンドウを開いて、Get-Contentを実行します。以下のスクリーンショットに示すように、[XML]を使用すると、PowerShellがXMLテキストを読み取り、PowerShellオブジェクトに変換できます。最後に、結果を$Report変数に保存します。結果のコマンドは以下の通りです。

$Report = [XML](Get-Content -Path 'Report.nfo')
Output of the $Report variable.

おそらく、レポートが生成された時点で実行されていたサービスのリストを取得する必要があります。MSInfo32レポートにはそれが含まれているため、SelectNodes()メソッドを使用してリストを取得します。

SelectNodes()メソッドはXPathを使用します。XPathはXMLのクエリ言語です。複雑なXPathクエリの作成は、この記事の対象外です。

<Category name="Services">
        <Data>
          <Display_Name><![CDATA[ACC Service]]></Display_Name>
          <Name><![CDATA[ACCSvc]]></Name>
          <State><![CDATA[Running]]></State>
          <Start_Mode><![CDATA[Auto]]></Start_Mode>
          <Service_Type><![CDATA[Own Process]]></Service_Type>
          <Path><![CDATA["c:\\program files (x86)\\acer\\care center\\accsvc.exe"]]></Path>
          <Error_Control><![CDATA[Normal]]></Error_Control>
          <Start_Name><![CDATA[LocalSystem]]></Start_Name>
          <Tag_ID><![CDATA[0]]></Tag_ID>
        </Data>
        <Data>
          <Display_Name><![CDATA[AllJoyn Router Service]]></Display_Name>
          <Name><![CDATA[AJRouter]]></Name>
          <State><![CDATA[Stopped]]></State>
          <Start_Mode><![CDATA[Manual]]></Start_Mode>
          <Service_Type><![CDATA[Share Process]]></Service_Type>
          <Path><![CDATA[c:\\windows\\system32\\svchost.exe -k localservicenetworkrestricted -p]]></Path>
          <Error_Control><![CDATA[Normal]]></Error_Control>
          <Start_Name><![CDATA[NT AUTHORITY\\LocalService]]></Start_Name>
          <Tag_ID><![CDATA[0]]></Tag_ID>
        </Data>
</Category>

XPathクエリ'//Category[@name="Software Environment"]/Category[@name="Services"]/Data'は例として機能します。その部分は以下に示されているので、理解して複数のシナリオに適応させることができます。

  • //Category[@name="Software Environment"] – 全文書内の名前が「Software Environment」である任意のCategoryノードを返します。
  • /Category[@name="Services"] – 以前に返された「Software Environment」ノードの下にある名前が「Services」であるCategoryノードを返します。
  • /データ – 以前に返された「サービス」ノードの子データノードを返します。

上記の例の構造は、MSInfo32が実行されるときに表示される自動生成されたシステムレポートを示しています。これを、表示されるセクションに従って構築して適応することができます。

# 以下に示すXPathクエリは、抽出したいデータに基づいて変更されます。常にこの規則に従うわけではありません
$Report.SelectNodes('//Category[@name="Software Environment"]/Category[@name="Services"]/Data') | ForEach-Object {
  [PSCustomObject]@{
    "Name"    = $PSItem.Name.innerText
    "Display" = $PSItem.Display_Name.innerText
    "State"   = $PSItem.State.innerText
  }
} | Format-Table -AutoSize
Selecting XML data from an NFO file.

以下に、XPathクエリとPowerShellを使用してシステムレポートのディスプレイカテゴリに関する情報を見つける方法の追加の例が示されています。XPathクエリ自体は以前のものと非常に似ていますが、今回はコンポーネントと表示カテゴリを探しています。

次に示すXPathクエリは、抽出するデータに応じて変更されます。常にこの規則に従うわけではありません。
$Report.SelectNodes('//Category[@name="Components"]/Category[@name="Display"]/Data') | ForEach-Object -Begin {
	すべてのデバイスのコレクションを保持するためのオブジェクトコレクションを作成します。
	$Objects = [System.Collections.ArrayList]@()
	単一のデバイスの名前と値を保持するために使用される一時オブジェクトです。
	$Object = @()
} -Process {
	アイテム名が空でない場合、新しいデバイスが来ることを示しているので、名前と値を一時的な$Object配列に追加します。
  この理由で、カスタムハッシュテーブルにはできません。なぜなら、名前が重複する可能性があるためです。ハッシュテーブルでは許可されていません。
  If (-Not [String]::IsNullOrWhiteSpace($PSItem.Item.innerText)) {
    $Object += [PSCustomObject]@{
      "Name"  = $PSItem.Item.innerText
      "Value" = $PSItem.Value.innerText
    }
  } Else {
		空のアイテム名が出会ったら、これをデバイスの全体のオブジェクトリストに追加します。
    $Objects.Add($Object)
		単一のデバイスオブジェクトをリセットします。
    $Object = @()
  }
} -End {
	デバイスオブジェクトのコレクションのみをさらにパイプラインに送信します。
	$Objects
} | Format-Table -AutoSize
Results of the XML query against the Display Components list.

結論

この記事では、MSInfo32がローカルシステムの包括的なシステムレポートを生成する便利な方法を学びました。MSInfo32の保存およびエクスポート機能を使用して、システムの状態を時間をかけて分析し、PowerShellを使用して利用可能な情報を分析する方法を学びました。

複数のシステムでMSInfo32を自動化する方法はありますか?

Source:
https://adamtheautomator.com/msinfo32/