AutoUpdate — 1

Сегодня решил почитать статью от Scripting Guy о работе с автоматическими обновлениями с помощью скриптов. Статья не новая, наткнулся благодаря записи в журнале у Denisio. Примеры в статье приводятся на vbscript, но перевести их на PowerShell не проблема🙂

Начнем🙂

Определение статуса сервиса автоматических обновлений — VBScript
strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colServices = objWMIService.ExecQuery _ ("Select * from Win32_Service Where DisplayName = 'Automatic Updates'") If colServices.Count = 0 Then Wscript.Echo "Automatic Updates is not installed." Else For Each objService in colServices Wscript.Echo "Automatic Updates: " & objService.State Next End If

Тут зачемто выбирается сервис по DisplayName, который отличается в разных языковых версиях ОС. Мы поступим умнее:

PS C:\PowerShell> get-service wuauserv Status Name DisplayName ------ ---- ----------- Running wuauserv Центр обновления Windows

Тут правда в отличии от VBScript версии нельзя выполнить эту команду на удаленном компьютере… Можно конечно дождатся PowerShell R2 с полноценным удаленным доступом и прочими вкусностями, а можно воспользоватся PsExec.exe (описано у Lee Holmes) или просто сделать так:

PS C:\PowerShell> Get-WmiObject win32_service -ComputerName ИмяКомпьютера | where {$_.name -eq "wuauserv"} ExitCode : 0 Name : wuauserv ProcessId : 1576 StartMode : Auto State : Running Status : OK

Или так:

PS C:\PowerShell> [System.serviceProcess.ServiceCOntroller]::GetServices("ИмяКомпьютера") | where {$_.name -eq "wuauserv"} Status Name DisplayName ------ ---- ----------- Running wuauserv Automatic Updates

Дальше определяем как настроены автоматические обновления:

Как настроены автоматические обновления — VBScript
Set objAutoUpdate = CreateObject("Microsoft.Update.AutoUpdate") Set objSettings = objAutoUpdate.Settings Select Case objSettings.NotificationLevel Case 0 Wscript.Echo "Notification level: Automatic Updates is not configured by the user " & _ "or by a Group Policy administrator." Case 1 Wscript.Echo "Notification level: Automatic Updates is disabled." Case 2 Wscript.Echo "Notification level: Automatic Updates prompts users to approve updates " & _ "before downloading or installing." Case 3 Wscript.Echo "Notification level: Automatic Updates automatically downloads " & _ "updates, but prompts users to approve them before installation." Case 4 Wscript.Echo "Notification level: Automatic Updates automatically installs " & _ "updates per the schedule specified by the user." Case Else Wscript.Echo "Notification level could not be determined." End Select

Ну и на PowerShell:

Get-AUSettings.ps1
$Settings = (New-Object -ComObject microsoft.update.autoupdate).settings switch ($Settings.NotificationLevel) { 0 {"Notification level: Automatic Updates is not configured by the user " + ` "or by a Group Policy administrator."} 1 {"Notification level: Automatic Updates is disabled."} 2 {"Notification level: Automatic Updates prompts users to approve updates " + ` "before downloading or installing."} 3 {"Notification level: Automatic Updates automatically downloads " + ` "updates, but prompts users to approve them before installation."} 4 {"Notification level: Automatic Updates automatically installs " + ` "updates per the schedule specified by the user."} default {"Notification level could not be determined."} }

Включение автоматических обновлений…

VBScript
Const SCHEDULED_INSTALLATION = 4 Set objAutoUpdate = CreateObject("Microsoft.Update.AutoUpdate") Set objSettings = objAutoUpdate.Settings objSettings.NotificationLevel = SCHEDULED_INSTALLATION objSettings.Save

и…

PowerShell
PS C:\PowerShell> $settings = (New-Object -comObject "Microsoft.Update.AutoUpdate").settings PS C:\PowerShell> $settings.NotificationLevel = 4 PS C:\PowerShell> $settings.Save()

Определение дня когда запланировано обновление… Цитировать VBScript не буду, много там🙂 Сразу PowerShell:

PS C:\PowerShell> $settings = (New-Object -comObject "Microsoft.Update.AutoUpdate").settings PS C:\PowerShell> $SheduledDay = $settings.ScheduledInstallationDay PS C:\PowerShell> $SheduledTime = $settings.ScheduledInstallationTime PS C:\PowerShell> if ($SheduledDay -ne 0){[System.DayOfWeek]($SheduledDay+1)} else {"Every Day"} Monday PS C:\PowerShell> "$($sheduledTime):00"

Описывать как изменить время и день тоже не буду, это делается так же как и изменение NotificationLevel. Не забудьте вызвать метод .Save() он необходим для сохранения изменений.

Определение того нуждается ли  компьютер в перезагрузке для завершения установки, тоже сразу PowerShell:

PS C:\PowerShell> if ((New-Object -ComObject "Microsoft.Update.SystemInfo").RebootRequired) >> {"This computer needs to be rebooted."} >> else {"This computer does not need to be rebooted."} >> This computer does not need to be rebooted.

Остальное тут

Опубликовано в PowerShell. 1 Comment »

Один ответ to “AutoUpdate — 1”

  1. AutoUpdate - 2 « PowerShell и другие скрипты Says:

    […] Ноябрь, 2007 Продолжаю этот […]


Обсуждение закрыто.

%d такие блоггеры, как: