Установка патчей через логон-скрипты
Возвращаясь к вопросу о необходимости установки обновлений на рабочие станции допустим следующие сценарии:
- Патч только вышел
- Сервер обновлений не сконфигурирован или отсутствует
- Патч вышел давно, но никто его не потрудился одобрить на сервере обновлений.
Допускаю так же что сервер обновлений довольно инертный инструмент и довольно часто требуется установить ту или иную заплатку как можно быстрее.
В данном случае поможет простой скрипт который приведен ниже.
Итак. В данном примере рассматриваем установку патча KB958644.
Дано:
- Рабочие станции под управлением Windows XP на двух языках EN и RU
- Серверы Windows 2003 только на английском языке.
В переменной strHotfix задается имя патча.
В переменной strPatchPath путь до папки где лежат нужные патчи.
В переменной strWinXpEN - имя файла для Windows XP EN
В переменной strWinXpRU – имя файла для Windows XP RU
В переменной strWinServer2003 – имя файла для серверной версии
Создаем скрипт, помещаем его на SYSVOL, например в папку Scripts и создаем необходимые настройки помещая этот скрипт в секцию автологина для компьютера.
strComputer = "."
strHotfix = "KB958644"
strPatchPath = "SRV-01\deploy\System\Patchs\KB958644"
strWinXpEN = "\WindowsXP-KB958644-x86-ENU.exe"
strWinXpRU = "\WindowsXP-KB958644-x86-RUS.exe"
strWinServer2003 = "\WindowsServer2003-KB958644-x86-ENU.exe"
strSwitches = " /u /z"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
If (InStr(1,objOperatingSystem.Caption, "XP", 1)) Then
If isinstalled(strcomputer, strHotfix) Then
‘Wscript.Echo "Patch is already installed!"
ElseIF (objOperatingSystem.OSLanguage = 1033) Then
strCmd = chr(34) & "\\" & strPatchPath & strWinXPEN & Chr(34) & strSwitches
‘Wscript.Echo "Patch (EN) is not installed! Press OK to continue installing."
installPatch strCmd
ElseIF (objOperatingSystem.OSLanguage = 1049) Then
strCmd = chr(34) & "\\" & strPatchPath & strWinXPRU & Chr(34) & strSwitches
‘Wscript.Echo "Patch (RU) is not installed! Press OK to continue installing."
installPatch strCmd
End If
ElseIf (InStr(1,objOperatingSystem.Caption, "2003", 1)) Then
If isinstalled(strcomputer, strHotfix) Then
‘Wscript.Echo "Patch is already installed!"
Else
strCmd = chr(34) & "\\" & strPatchPath & strWinServer2003 & Chr(34) & strSwitches
‘MsgBox "Patch is not installed! Press OK to continue installing."
installPatch strCmd
End If
Else
‘Wscript.Echo "Unknown OS type"
End If
Next
Function isInstalled(strComputer,srtHotfix)
isinstalled = false
Set objWMI = GetObject("WinMGMTS://" & strComputer & "/Root/CIMv2")
strWQL = "SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID = ‘" & strHotfix & "’"
Set colResults = objWMI.ExecQuery(strWQL)
For Each objItem In colResults
isinstalled = true
Next
If isinstalled = true then isinstalled = true
If IsObject(objItem) Then Set objItem = Nothing
If IsObject(objWMI) Then Set objWMI = Nothing
End Function
Function installPatch (strCmd)
Set oShell = CreateObject("WScript.Shell")
‘WScript.echo strCmd
Command = "cmd.exe /c " & strCmd
RetCode = oShell.Run(Command,1,True)
‘Wscript.Echo "Finished. return code- " & RetCode
End Function
wscript.quit(0)
PS при необходимости можно ставить любые заплатки, достаточно только поменять путь и имена файлов.
Похожие статьи
Приглашаю присоединиться ко мне в следующих сервисах:
Вы можете оставить комментарий.