有没有办法 "listen" 改变 Windows' "Program and Features"?

Is there a way to "listen" to changes in Windows' "Program and Features"?

是否可以将'Programs and Features'视为基于事件的系统并监听变化?例如,我想“听”一个特定的应用程序,例如Notepad++,版本设置为x.x.x。但是,一旦这个Notepad++的版本更改为y.y.y(例如正在更新),我希望收到更改通知。我知道我可以使用 PowerShell 获取当前安装的应用程序及其版本,但最好能够在发生变化时立即“采取行动”,而不是定期扫描应用程序并检查是否有任何变化.

从技术上讲,定期扫描是您的最佳选择 - 有些软件根本无法“安装”。对于这类事情,请使用 众多 可用的库存管理软件之一。


Windows 确实使用 MsiInstaller 跟踪软件 installation/uninstallation 事件(我发现大多数软件要么已经是 MSI,通常只是被 exe 包装)。

您可以通过 Powershell 获取这些事件,这比通过文件系统扫描要快得多。如果您正在寻找,您还可以从某些事件日志创建警报:

$MsiEvents = Get-WinEvent -Computername RemoteServer -LogName Application -MaxEvents 5 -FilterXPath @'
<QueryList>
  <Query Id="0" Path="Application">
    <Select Path="Application">
      *[System[Provider[@Name='MsiInstaller'] and 
      ( (EventID &gt;= 1033 and EventID &lt;= 1036) )]]
    </Select>
  </Query>
</QueryList>
'@ 

# Format as xml to use named eventData properties 
# you can filter on these - otherwise you only get the whole event text
[xml[]]$xml=$MsiEvents|Foreach{$_.ToXml()}

# Generate usable field names from xml
$report = $xml.Event | Select @{l='ID';e={$_.System.EventID.'#text'}},
  @{l='TimeCreated';e={$_.System.TimeCreated.systemTime | get-date -f 'yyyy-MM-dd HH:mm:ss'}},
  @{l='Name';e={
    Switch ($_.System.EventID.'#text') {
      1033 {'Install'}
      1034 {'Uninstall'}
      1035 {'Reconfigure'}
      1036 {'Update'}}}},
  @{l='Version';e={$_.EventData.Data[1]}},
  @{l='Vendor';e={$_.EventData.Data[4]}},
  @{l='Product';e={$_.EventData.Data[0]}}
$report | FT 

这会生成一个合理的报告,您可以使用它来查看要监视的事件:

ID   TimeCreated         Name        Version          Vendor                     Product                               
--   -----------         ----        -------          ------                     -------
1035 2021-06-10 18:11:59 Reconfigure 21.005.20048     Adobe Systems Incorporated Adobe Acrobat Reader DC               
1036 2021-06-10 18:11:59 Update      21.005.20048     0                          Adobe Acrobat Reader DC               
1033 2021-06-09 11:31:06 Install     4.10.00093       Cisco Systems, Inc.        Cisco AnyConnect Diagnostics and Re...
1033 2021-05-28 12:13:23 Install     16.0.14026.20246 Microsoft Corporation      Office 16 Click-to-Run Licensing Co...
1034 2021-05-28 12:13:11 Uninstall   16.0.13929.20386 Microsoft Corporation      Office 16 Click-to-Run Licensing Co...

您可以在任务计划程序中创建一个任务来执行发送电子邮件或 运行 由特定事件触发的脚本等操作。最简单的方法是在事件查看器中右键单击一个事件 > 将任务附加到该事件。

或者,您可以修改此脚本,以便在某些软件更新等情况下向您发送电子邮件,并使用计划任务 运行 此 daily/hourly 代替。