MSInfo32:生成 Windows 系統報告的簡便方法

你是否曾经为在计算机系统上创建系统信息报告而苦恼?收集系统详细信息可能看起来很困难,但是微软系统信息工具(MSInfo32)可以快速收集所有信息!

在本文中,您将迅速掌握生成和查看系统信息报告的技巧。继续阅读以了解更多信息!

先决条件

对于本教程,您可以使用任何版本的Windows 10。从命令行读取系统报告需要PowerShell。本教程使用的是Windows 10 21H1版本19043构建和PowerShell v7.1。

查看系统信息报告

检索有关您的系统的详细信息的第一步是打开MSInfo32工具。

要找到该工具,请在开始菜单上搜索MSInfo32,并确保点击以管理员身份运行选项。

如果MSInfo32未以管理员身份运行,则无法正确更新其内部信息缓存,某些驱动程序可能会显示为已停止,而实际上并非如此。

工具打开后,它会呈现给您一个报告,这是一个自动生成的报告。在系统摘要视图中,您将看到计算机的硬件摘要。该视图概述了系统配置的整体情况。在左侧,您将看到各个部分的分类。

Viewing the System Summary in MSInfo32.

保存MSInfo32报告

也許您正準備對系統進行硬體更改,並希望保存系統信息報告以供以後比較或報告。使用 MSInfo32,您有兩個選項可以保存該信息:保存和匯出。接下來您將了解有關它們的信息。

您可以點擊文件 → 儲存將信息保存為 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 報告的兩種不同選項。

您可以找到許多關於 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

這第二個範例演示生成NFO報告,這次是通過指定報告將被保存的目錄。請注意,在運行命令之前,該目錄必須存在。否則,它將默默失敗。

MSInfo32 /nfo c:\ata\report.nfo

儘管任何文件擴展名都可以工作,因為系統信息報告導出是一個NFO文件,/nfo選項,慣例上使用.nfo作為報告的擴展名。

通過PowerShell閱讀NFO文件

在本教程中,你已經學會了如何生成和導出MSInfo32報告。但你來找亞當自動製作者是有原因的,所以你將學會自動化這個過程。

保存的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 查詢 //Category[@name="Software Environment"]/Category[@name="Services"]/Data 傳遞給下面顯示的 $Report 物件上的 SelectNodes() 方法,將返回所有 Window 服務作為 XML 節點。由於 XML 節點未顯示預期的輸出(服務 NameDisplayNameState),下面的代碼創建一個 PSCustomObject,並使用 Format-Table 將輸出格式化以適應屏幕。

# 下面顯示的 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/