用于在安装windows更新后检查重新启动状态的Powershell

用于在安装windows更新后检查重新启动状态的Powershell,powershell,windows-update,Powershell,Windows Update,这是我用来搜索WSUS安装的Windows更新的代码,我想再添加一列,说明重新启动挂起/完成的状态。有开关吗 $Session = New-Object -ComObject "Microsoft.Update.Session" $Searcher = $Session.CreateUpdateSearcher() $historyCount = $Searcher.GetTotalHistoryCount() $Searcher.QueryHistory(0, $historyCount

这是我用来搜索WSUS安装的Windows更新的代码,我想再添加一列,说明重新启动挂起/完成的状态。有开关吗

$Session = New-Object -ComObject "Microsoft.Update.Session"

$Searcher = $Session.CreateUpdateSearcher()

$historyCount = $Searcher.GetTotalHistoryCount()

$Searcher.QueryHistory(0, $historyCount) | Select-Object Date,

   @{name="Operation"; expression={switch($_.operation){

       1 {"Installation"}; 2 {"Uninstallation"}; 3 {"Other"}}}},

   @{name="Status"; expression={switch($_.resultcode){

       1 {"In Progress"}; 2 {"Succeeded"}; 3 {"Succeeded With Errors"};

       4 {"Failed"}; 5 {"Aborted"}

}}}, Title | Out-GridView

简单地看一下COM对象属性和方法并没有说明这方面的任何内容。但这并不能保证客户会做出怎样的反应

可能还有其他方法,但如果您想确定当前状态,一个建议是查看注册表

:

HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequested

因此,您只需检查该键中是否有任何值,就WU而言,就可以了解其挂起状态

$pendingRebootKey = "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
$results = (Get-Item $pendingRebootKey -ErrorAction SilentlyContinue).Property

if($results){
    # Reboot is pending
}
使用
-ErrorAction
很有用,因为根据文章:

请注意 当机器按正常方式重新启动时,RebootRequired密钥将自动删除 易失性(仅保存在内存中)


这可能会隐藏其他潜在问题,因此您可能需要将逻辑更改为try/catch,并查看诸如
ItemNotFoundException
之类的特定错误(如果存在问题)。

我认为我们没有用于检查重新启动状态的特定开关。我想我们必须明确地检查一下,我怎样才能将它作为一个新列添加到我当前的输出中?新对象?这是在主机上执行的,对吗?您可以更新当前的输出列表。虽然您可以将更新连接到注册表数据,但我不确定如何以令人满意的方式添加这些数据。您可以添加另一个计算属性,但它是正在运行的计算机的属性,而不是您正在查询的更新。