使用 PowerShell 匯出完整的已安裝軟體清單

在系統管理工作中,經常需要匯出電腦上已安裝的軟體清單。不過單純使用 Win32_Product 類別往往會漏掉許多軟體,因為現代軟體經常使用自己的安裝程式而非 Windows Installer。本文將介紹如何使用更全面的方法來取得完整的軟體清單。

為什麼需要掃描登錄檔

Windows 系統中,已安裝的軟體資訊主要儲存在以下登錄檔位置:

  • HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall (32 位元軟體)

這些位置包含了所有透過各種方式安裝的軟體資訊,比 Win32_Product 類別更完整。

完整的 PowerShell 腳本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 設定輸出編碼為 UTF8,避免中文亂碼
$OutputEncoding = [System.Text.Encoding]::UTF8

# 定義要掃描的登錄檔路徑
$RegPaths = @(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
)

# 取得已安裝的軟體清單
$InstalledSoftware = @()
foreach ($Path in $RegPaths) {
# 從登錄檔讀取軟體資訊
$Software = Get-ItemProperty $Path |
# 選擇需要的欄位
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
# 過濾掉沒有名稱的項目(通常是更新檔)
Where-Object { $_.DisplayName }

$InstalledSoftware += $Software
}

# 依照軟體名稱排序並移除重複項目
$InstalledSoftware = $InstalledSoftware |
Sort-Object DisplayName -Unique

# 設定輸出檔案路徑,存在桌面
$DesktopPath = [Environment]::GetFolderPath("Desktop")
$OutputFile = Join-Path $DesktopPath "installed_software_complete.csv"

# 匯出成 CSV 檔案
$InstalledSoftware |
Select-Object @{N='名稱';E={$_.DisplayName}},
@{N='版本';E={$_.DisplayVersion}},
@{N='發布者';E={$_.Publisher}},
@{N='安裝日期';E={$_.InstallDate}} |
Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8

Write-Host "軟體清單已匯出至: $OutputFile"

腳本說明

讓我們逐步解釋這個腳本的功能:

  1. 設定編碼

    • 使用 UTF8 編碼確保中文字能正確顯示
    • 避免輸出的 CSV 檔案開啟時出現亂碼
  2. 定義登錄檔路徑

    • 設定兩個需要掃描的登錄檔位置
    • 包含 64 位元和 32 位元的軟體資訊
  3. 讀取軟體資訊

    • 使用 Get-ItemProperty 讀取登錄檔內容
    • 選擇重要欄位:名稱、版本、發布者、安裝日期
    • 過濾掉沒有名稱的項目(通常是更新檔或系統元件)
  4. 資料處理

    • 合併兩個登錄檔路徑的資料
    • 依照軟體名稱排序
    • 移除重複的項目
  5. 匯出資料

    • 將欄位名稱改為中文,方便閱讀
    • 匯出成 CSV 格式,存放在桌面

執行結果

執行後會在桌面產生 installed_software_complete.csv 檔案,打開後可以看到類似以下的內容:

名稱 版本 發布者 安裝日期
Adobe Creative Cloud 5.11.0.522 Adobe Inc. 20231201
Google Chrome 120.0.6099.130 Google LLC 20231215
Microsoft Office 16.0.17201.20290 Microsoft Corporation 20230601
PyCharm 2023.3 233.11799.298 JetBrains s.r.o. 20231220
Visual Studio Code 1.85.1 Microsoft Corporation 20231218

注意事項

  1. 此腳本需要以系統管理員權限執行
  2. 某些軟體可能沒有完整的安裝資訊
  3. 安裝日期格式可能因軟體而異

進階使用

如果需要更多資訊,可以修改 Select-Object 的欄位,例如:

1
2
Select-Object DisplayName, DisplayVersion, Publisher, InstallDate, 
InstallLocation, UninstallString, EstimatedSize

這樣就能同時匯出:

  • 安裝路徑 (InstallLocation)
  • 解除安裝指令 (UninstallString)
  • 預估大小 (EstimatedSize)

參考資料