配置Windows Update更新下载及安装方式:

 1 #NotificationLevel说明:
 2 # 0:未配置,不会对当前设置进行更改
 3 # 1:从不检查更新
 4 # 2:检查更新,但是让我选择是否下载和安装更新
 5 # 3:下载更新,但是让我选择是否安装更新
 6 # 4:自动安装更新
 7 
 8 $AutoUpdateSettings = (New-Object -com "Microsoft.Update.AutoUpdate").Settings
 9 $AutoUpdateSettings.NotificationLevel =3
10 #$AutoUpdateSettings.ScheduledInstallationDay =1   # 0表示每天;1表示每周日;2表示每周一......
11 #$AutoUpdateSettings.ScheduledInstallationTime =2  # 0表示0:00;1表示1:00;2表示2:00......,仅当.NotificationLevel =4时有效
12 $AutoUpdateSettings.Save()
13 (New-Object -com "Microsoft.Update.AutoUpdate").Settings

 

#检索、下载、安装更新

 1 #检索更新
 2 $updatesession = New-Object -com Microsoft.Update.Session
 3 $updatesession.ClientApplicationID = "CAID"
 4 $searcher = $updatesession.CreateUpdateSearcher()
 5 #查找未安装的更新(从 已经从Microsoft Update检索到的更新中 进行检索,包含下载或未被下载的更新)
 6 $updates_search = $searcher.search("IsInstalled= 0")  
 7 #查找未安装并且未被隐藏的更新( IsInstalled = 0 and IsHidden = 0 )
 8 #$updates_search = $searcher.search("IsInstalled = 0 and IsHidden = 0") ###("Type='Software'")
 9 #并不是所有的属性都可以被搜索,有关详细信息参考MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/aa387101(v=vs.85).aspx
10 $updates = $updates_search.updates
11 #查找已下载的更新
12 $updates_downloaded = $updates |? {$_.IsDownloaded -eq $true}
13 #查找已下载的更新的标题、重要级别
14 $updates_downloaded | % {$_ |Select Title,MsrcSeverity}   #可选更新的MsrcSeverity值为空
15 
16 #下载更新:
17 #查找未下载的更新
18 $updates_undownloaded = $updates |? {$_.IsDownloaded -eq $false}
19 $updates_undownloaded[0].title ##kb2506928
20 $updates_undownloaded.count
21 
22 #把未下载的更新加入下载列表
23 $updatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
24 $updatesToDownload.Add($updates_undownloaded[0])
25 
26 #下载所需要的更新
27 $downloader = $updatesession.CreateUpdateDownloader() 
28 $downloader.Updates = $updatesToDownload
29 $downloadResult = $downloader.Download()
30 $downloadResult |select isdownloaded
31 
32 
33 
34 #安装更新
35 #把需要进行安装的更新加入安装列表
36 $updatestoinstall = New-Object -Com Microsoft.Update.UpdateColl
37 Foreach ($update in $updates_downloaded)
38     {
39      $updatestoinstall.Add($update)
40     }
41 $updatestoinstall.count
42     
43 #开始安装更新
44 $installer = $updatesession.CreateUpdateInstaller()
45 $installer.Updates = $updatestoinstall
46 $installer.Install()
47 $installationResults = $installer.Install()
48 
49 #查看更新安装结果
50 $results=$null
51 $results=@()
52 For ($i=0;$i -lt $updatestoinstall.count;$i++)
53     {
54      $result = ""|Select Title,ResultCode,RebootRequired
55      $result.title = $updatestoinstall.item($i).Title 
56      $result.ResultCode = $installationResults.GetUpdateResult($i).ResultCode
57      $result.RebootRequired = $installationResults.GetUpdateResult($i).RebootRequired
58      $results += $result
59     }
60 $results    

 

 自动下载安装重要更新:

 1 #该脚本用来检索重要更新并下载、安装
 2 $updatesession = New-Object -com Microsoft.Update.Session
 3 $updatesession.ClientApplicationID = "CAID"
 4 $searcher = $updatesession.CreateUpdateSearcher()
 5 #查找未安装的更新(从 已经从Microsoft Update检索到的更新中 进行检索,包含下载或未被下载的更新)
 6 $updates_search = $searcher.search("IsInstalled= 0")  
 7 $updates = $updates_search.updates
 8 
 9 #过滤重要的更新
10 $updates_important = $updates| ? {$_.MsrcSeverity -ne $null}
11 $updatesToDownload = New-Object -Com Microsoft.Update.UpdateColl
12 Foreach ($updated in $updates_important)
13     {
14      If ($updated.IsDownloaded -eq $false)
15         {
16         #把未下载的更新加入下载列表
17         $updatesToDownload.Add($updated)
18         }
19     }
20 #下载所需要的更新,在更新下载过程中脚本会停止
21 If ($updatesToDownload.count -ne 0)
22     {
23     $downloader = $updatesession.CreateUpdateDownloader() 
24     $downloader.Updates = $updatesToDownload
25     $downloadResult = $downloader.Download()
26     }
27 Write-Host "Update is downloading,Please wait..."
28 
29 #把需要进行安装的更新加入安装列表
30 $updatestoinstall = New-Object -Com Microsoft.Update.UpdateColl
31 Foreach ($update in $updates_important)
32     {
33      $updatestoinstall.Add($update)
34     }
35     
36 #开始安装更新
37 $installer = $updatesession.CreateUpdateInstaller()
38 $installer.Updates = $updatestoinstall
39 $installer.Install()
40 $installationResults = $installer.Install()
41 
42 #查看更新安装结果
43 $results=$null
44 $results=@()
45 For ($i=0;$i -lt $updatestoinstall.count;$i++)
46     {
47     $i
48      $result = ""|Select Title,ResultCode,RebootRequired
49      $result.title = $updatestoinstall.item($i).Title 
50      $result.ResultCode = $installationResults.GetUpdateResult($i).ResultCode
51      $result.RebootRequired = $installationResults.GetUpdateResult($i).RebootRequired
52      $results += $result
53     }
54 $results    

 

 

Windows Update相关COM组件:

Microsoft.Update.AutoUpdate :提供了对Microsoft Update自动更新计划的管理

Microsoft.Update.UpdateColl:提供了Microsoft Update更新的下载、安装 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa386107(v=vs.85).aspx)

Microsoft.Update.Installer: 允许从Microsoft Update安装更新 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa386491(v=vs.85).aspx)

Microsoft.Update.Searcher:从Microsoft Update更新提供搜索功能

Microsoft.Update.Session:提供对有关Microsoft Update本地历史记录的信息的访问 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa386854(v=vs.85).aspx)

Microsoft.Update.SystemInfo:提供对当前系统与Microsoft Update有关的信息的访问

参考:http://msdn.microsoft.com/en-us/library/windows/desktop/aa387102(v=vs.85).aspx (VBS_WUA)