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

时间:2017-08-16 14:33:07

标签: powershell windows-update

以下是我用于搜索WSUS安装的Windows更新的代码,我想为reboot pending / done的状态添加一列。那是否有转换?

$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

1 个答案:

答案 0 :(得分:3)

简要介绍一下COM对象的属性和方法没有显示任何内容。 You can query update before to see if they might trigger a reboot但它不能保证客户的反应。

可能还有其他方法,但如果您想确切了解当前状态,建议您查看注册表。

If a patch was installed by WindowsUpdates that requires a reboot it should leave a registry entry in this location

  

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired

因此,您只需检查该密钥中是否有任何值,以了解其所涉及的待处理状态。

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

if($results){
    # Reboot is pending
}

根据文章

,使用-ErrorAction非常有用
  

注意   当机器重新启动时,会自动删除RebootRequired键   volatile(仅保存在内存中)。

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