以下是我用于搜索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
答案 0 :(得分:3)
简要介绍一下COM对象的属性和方法没有显示任何内容。 You can query update before to see if they might trigger a reboot但它不能保证客户的反应。
可能还有其他方法,但如果您想确切了解当前状态,建议您查看注册表。
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
之类的特定错误。