我找到了一个脚本来下载我一直在调整以适应我的需要的windows更新。它似乎工作得很好,除了我不知道如何在下载之前删除可选的更新。我发现"关键"、"重要"one_answers"中等"更新的MsrcSeverity值是这3个词中的一个,其中可选项为空。如何在下载之前从列表中删除没有msrcseverity值的更新??
这是整个代码…
$global:scriptpath = $MyInvocation.MyCommand.Path
$global:dir = Split-Path $scriptpath
$global:logfile = "$dirupdatelog.txt"
write-host " Searching for updates..."
$session = New-Object -ComObject Microsoft.Update.Session
$searcher = $session.CreateUpdateSearcher()
$result = $searcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")
if ($result.Updates.Count -eq 0) {
Write-Host "No updates to install"
}
else {
$result.Updates | Select Title
$result.Title >> $logfile
}
$downloads = New-Object -ComObject Microsoft.Update.UpdateColl
foreach ($update in $result){
$downloads.Add($update)
}
$count = $result.Updates.Count
write-host ""
write-host "There are $($count) updates available."
write-host ""
read-host "Press Enter to downloadinstall updates"
$downloader = $session.CreateUpdateDownLoader()
$downloader.Updates = $downloads
$downloader.Download()
$installs = New-Object -ComObject Microsoft.Update.UpdateColl
foreach ($update in $result.Updates){
if ($update.IsDownloaded){
$installs.Add($update)
}
}
$installer = $session.CreateUpdateInstaller()
$installer.Updates = $installs
$installresult = $installer.Install()
$installresult
我现在有"read-host"来阻止它下载,直到我弄清楚这个。我试过在$result.updates | Select Title | where {$result.Updates.MsrcSeverity -ne $null}
放一个额外的管道,我也试过只用$result.MsrcSeverity
,没有去。我在几个不同的地方尝试过"where"管道。我还尝试在几个地方做一个If语句,说如果MsrcSeverity不等于null,然后将其添加到列表中。我也试过用and MsrcSeverity = 'Important'")
添加到$searcher.Search(
行,只是为了测试,没有做任何事情。
到目前为止,它仍然列出所有的更新,无论是否有在MsrcSeverity列的东西。我找错地方了吗?这是我能看到的唯一能区分重要更新和可选更新的东西。
谢谢。
搜索条件记录在IUpdateSearcher::Search方法
不幸的是,BrowseOnly=0
不排除Windows更新程序中看到的可选更新。但AutoSelectOnWebSites=1
有。
"BrowseOnly = 1,查找可选的更新。
"BrowseOnly = 0,查找非可选的更新。
"AutoSelectOnWebSites = 1,查找标记为由Windows Update自动选择的更新。
"AutoSelectOnWebSites = 0,查找未标记为自动更新的更新。
$session1 = New-Object -ComObject Microsoft.Update.Session -ErrorAction silentlycontinue
$searcher = $session1.CreateUpdateSearcher()
#Do not search for optional updates and exclude hidden
$result = $searcher.Search("IsInstalled=0 AND AutoSelectOnWebSites=1 AND IsHidden=0")
谢谢大家的帮助。我得到了那么多有用的建议,我不知道从哪里开始……
我明白了,谢谢。