有没有办法 "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 >= 1033 and EventID <= 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 代替。
是否可以将'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 >= 1033 and EventID <= 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 代替。