Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Установка через GPO определённой KB (943729). WSUS нет.

Ответить
Настройки темы
VBS/WSH/JS - Установка через GPO определённой KB (943729). WSUS нет.

Пользователь


Сообщения: 87
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


Доброго времени суток, коллеги.
Необходимо через GPO развернуть KB943729. WSUS в сети нет. В теории хотелось бы какой-нибудь скриптик, который бы запускался из GPO в startup-скрипте и проверял на наличие этого KB в системе. Если ОНО уже есть - ничего бы не делал дальше, а если его нет на каком-то компьютере - устанавливал бы эту KB'шку.

Или может кто подскажет какие-то другие варианты, как разворачивать в сети эту KB?

-------
С Уважением,
Пётр Ластенко.


Отправлено: 21:41, 29-06-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


1. Проверьте как определяется это KB, будучи установленным.

Так:
Код: Выделить весь код
wmic.exe QFE WHERE "HotFixID='File 1' AND ServicePackInEffect = 'KB943729'"
определяется?

2. Приведите имена файлов отсюда: Information about new Group Policy preferences in Windows Server 2008 в зависимости от Вашего перечня ОС и языков.

Отправлено: 23:26, 29-06-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 87
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


1. Определяется так:



2. Это немного не понял - извините. В сети используются Windows XP, Vista, Windows Server 2003. Все 32-bit, все Русские.

Разворачивать этот KB через GPO я уже научился: стартап-скриптом с ключём /quiet. Для каждой ОС будет (в теории) свой WMI фильтр. Сейчас такой фильтр есть пока только для Windows XP. Вот бы ещё проверочку сделать, чтобы при каждой загрузке не устанавливать :-)

На самом деле, наверное, было бы классно иметь возможность обойтись без WMI фильров - только одним скриптом для всех. Чтобы скрипт сам проверял наличие и в случае отсутствия - сам ставил бы нужную KB в соответствии с ОС, платформой, языком :-) Но это я губу раскатал уже :-)

-------
С Уважением,
Пётр Ластенко.


Последний раз редактировалось PIL123, 30-06-2012 в 16:51.


Отправлено: 16:33, 30-06-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Incognitus:
возможность обойтись без WMI фильров - только одним скриптом для всех. Чтобы скрипт сам проверял наличие и в случае отсутствия - сам ставил бы нужную KB в соответствии с ОС, платформой, языком »
Ну, так, в общем-то, и планируется.

P.S. Зачем задаваться излишними платформами и языками, ежели:
Цитата Incognitus:
В сети используются Windows XP, Vista, Windows Server 2003. Все 32-bit, все Русские. »
и только?

Отправлено: 17:48, 30-06-2012 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Incognitus, вот, с учётом вышеизложенного Вами, примерный шаблон:
читать дальше »
Код: Выделить весь код
Option Explicit

Dim objDictionary

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
	.Add "5.1.2600", "WindowsXP-KB943729-x86-RUS.exe"
	.Add "5.2.3790", "WindowsServer2003-KB943729-x86-RUS.exe"
	.Add "6.0.6000", "Windows6.0-KB943729-x86.msu"
	.Add "6.0.6001", "Windows6.0-KB943729-x86.msu"
	.Add "6.0.6002", "Windows6.0-KB943729-x86.msu"
End With


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery( _
	"SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID='File 1' AND ServicePackInEffect = 'KB943729'")

If collSWbemObjectSet.Count = 0 Then
	For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_OperatingSystem")
		With objSWbemServicesEx.Get("Win32_Process")
			If .Create("""\\Server\Share$\" & objDictionary.Item(objSWbemObjectEx.Version) & _
				""" /passive /norestart /log:""\\Server\Logs$\KB2647516_" & WScript.CreateObject("WScript.Network").ComputerName & ".log""") = 0 Then
				
			Else
				'Error
			End If
		End With
		
		Exit For
	Next
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

objDictionary.RemoveAll
Set objDictionary      = Nothing

WScript.Quit 0

У компьютеров домена должен быть доступ на чтение к ресурсу «\\Server\Share$» и на запись — к ресурсу «\\Server\Logs$». Корректные имена файлов обновления подставьте сами. Скрипт задавать для исполнения с параметром «//b»:
Код: Выделить весь код
wscript.exe //b "\\server\gpo…\Script.vbs"
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:08, 30-06-2012 | #5


Пользователь


Сообщения: 87
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


Спасибо огромное! Скрипт офигенный, правда его работоспособность я ещё не проверил. Сейчас этим займусь. Подскажите, пожалуйста, если я буду использовать этот скрипт как стартап - аргумент "//b" надо указывать?



Ещё вопрос уже не относящийся к моей конкретной проблеме, но по Вашему скрипту: возможна его реализация с учётом платформы (x86, x64), языка (Rus, Eng), ОС (Windows XP, Vista, 7, Windows Server 2003, 2003 R2, 2008, 2008 R2 и т.д.)? "И т.д." - в том плане, что я с удовольствием подписался бы на обновления и актуализацию этого замечательного скрипта.

Ещё раз спасибо!

-------
С Уважением,
Пётр Ластенко.


Последний раз редактировалось PIL123, 01-07-2012 в 12:24.


Отправлено: 11:24, 01-07-2012 | #6


Пользователь


Сообщения: 87
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


Что-то не захотел работать у меня скрипт. Для простоты отладки выполнял тестирование локально на новой Windows XP Eng 32-bit.

Код выглядит
так:

Код: Выделить весь код
Option Explicit

Dim objDictionary

Dim strComputer

Dim objSWbemLocator
Dim objSWbemServicesEx
Dim collSWbemObjectSet
Dim objSWbemObjectEx


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
	.Add "5.1.2600", "WindowsXP-KB943729-x86-ENU.exe"
	.Add "5.2.3790", "WindowsServer2003-KB943729-x86-RUS.exe"
	.Add "6.0.6000", "Windows6.0-KB943729-x86.msu"
	.Add "6.0.6001", "Windows6.0-KB943729-x86.msu"
	.Add "6.0.6002", "Windows6.0-KB943729-x86.msu"
End With


strComputer = "."

Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery( _
	"SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID='File 1' AND ServicePackInEffect = 'KB943729'")

If collSWbemObjectSet.Count = 0 Then
	For Each objSWbemObjectEx In objSWbemServicesEx.InstancesOf("Win32_OperatingSystem")
		With objSWbemServicesEx.Get("Win32_Process")
			If .Create("""C:\KB\" & objDictionary.Item(objSWbemObjectEx.Version) & _
				""" /passive /norestart /log:""C:\Logs" & WScript.CreateObject("WScript.Network").ComputerName & ".log""") = 0 Then
				
			Else
				'Error
			End If
		End With
		
		Exit For
	Next
End If

Set collSWbemObjectSet = Nothing
Set objSWbemServicesEx = Nothing
Set objSWbemLocator    = Nothing

objDictionary.RemoveAll
Set objDictionary      = Nothing

WScript.Quit 0


Расположение файлов на компьютере и отображение запуска и проверки работы скрипта выглядит так:



При этом лог выполнения запуска KB'шки упал в корень C:\, а не C:\Logs, куда должен был бы по идее и выглядит
так:

Код: Выделить весь код
[LogsTESTCLIENTXP2.log]
0.156: ================================================================================
0.156: 2012/07/01 14:42:36.938 (local)
0.156: c:\0fa018c457c1f8431be21b0e09e8b2e2\update\update.exe (version 6.3.4.1)
0.156: Failed To Enable SE_BACKUP_PRIVILEGE
0.156: Setup encountered an error: You do not have permission to update Windows XP. Please contact your system administrator.
0.156: You do not have permission to update Windows XP. Please contact your system administrator.
0.156: Update.exe extended error code = 0xf004 0.156: Update.exe return code was masked to 0x643 for MSI custom action compliance.




Все манипуляции выполнялись под локальным администратором.

Прошу Вашей помощи в восстановлении работоспособности скрипта!

-------
С Уважением,
Пётр Ластенко.


Отправлено: 15:11, 01-07-2012 | #7


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата PIL123:
если я буду использовать этот скрипт как стартап - аргумент "//b" надо указывать? »
Желательно. Дабы подавить любые сообщения, в том числе и об ошибках времени исполнения. Т.е., «Script name» [кстати, а говорили, что все машины — «RUS»?!]:
Код: Выделить весь код
wscript.exe //b "Install GPP Extension.vbs"
Цитата PIL123:
возможна его реализация с учётом платформы (x86, x64), языка (Rus, Eng), ОС (Windows XP, Vista, 7, Windows Server 2003, 2003 R2, 2008, 2008 R2 и т.д.)? »
Реализация не представляет собой каких-то сложностей. Могу попробовать. Не в том дело. Было бы кому проверять — у меня в ниличии весьма ограниченный круг вариантов ОС, платформ и языков.

Цитата PIL123:
…этого замечательного скрипта. »
Не вижу в нём ничего замечательного. Лога нет, обработки ошибок нет, работоспособность ограничена малым перечнем платформ и языков.

Отправлено: 15:18, 01-07-2012 | #8


Пользователь


Сообщения: 87
Благодарности: 4

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
[кстати, а говорили, что все машины — «RUS»?!]: »
Так и есть - все русские в рабочей среде. В моей тестовой среде - все английские. Но по идее, для данного скрипта это неважно, если правильно прописать соответствие в objDictionary - насколько я понимаю. В моём скрипте для тестовой среды я указал, что для "5.1.2600" надо брать "WindowsXP-KB943729-x86-ENU.exe", который как раз и лежит в папке C:\KB.

Цитата Iska:
Желательно. Дабы подавить любые сообщения, в том числе и об ошибках времени исполнения. »
В окошке добавления скрипта для GPO (см. это окошко выше в топике) это значит что в поле "Script Parameters" надо прописать "//b" - верно?

-------
С Уважением,
Пётр Ластенко.


Отправлено: 15:26, 01-07-2012 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата PIL123:
Что-то не захотел работать у меня скрипт. »
Я посмотрю.


Цитата PIL123:
При этом лог выполнения запуска KB'шки упал в корень C:\, а не C:\Logs, куда должен был бы по идее »
Не должен. Вы пропустили завершающий слэш в:
Код: Выделить весь код
… /log:""C:\Logs\" & WScript.CreateObject("WScript.Network").ComputerName & ".log""") = 0 …
Цитата:
Failed To Enable SE_BACKUP_PRIVILEGE
Учтём, попробуем запросить привилегию:
Код: Выделить весь код
…
Set objSWbemLocator    = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
objSWbemServicesEx.Security_.Privileges.AddAsString "SeBackupPrivilege", True

Set collSWbemObjectSet = objSWbemServicesEx.ExecQuery( _
  "SELECT * FROM Win32_QuickFixEngineering WHERE HotFixID='File 1' AND ServicePackInEffect = 'KB943729'")
…
Цитата PIL123:
Так и есть - все русские в рабочей среде. В моей тестовой среде - все английские. »
Спасибо, ясно.

Цитата PIL123:
Но по идее, для данного скрипта это неважно, если правильно прописать соответствие в objDictionary - насколько я понимаю. В моём скрипте для тестовой среды я указал, что для "5.1.2600" надо брать "WindowsXP-KB943729-x86-ENU.exe", который как раз и лежит в папке C:\KB. »
Да. Вы совершенно правы.

Цитата PIL123:
В окошке добавления скрипта для GPO (см. это окошко выше в топике) это значит что в поле "Script Parameters" надо прописать "//b" - верно? »
Можно и так. Двойной слэш перед параметром указывает на то, что он не будет обрабатываться самим сценарием, а будет передан серверу сценариев («cscript.exe» или «wscript.exe»).
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:33, 01-07-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Установка через GPO определённой KB (943729). WSUS нет.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] WSUS через GP в AD yurban WSUS 6 25-04-2012 08:30
2008 - [решено] установка WSUS Afon WSUS 1 14-02-2011 20:07
SCCM - Установка sccm и wsus AntiZero Другие серверные продукты 1 17-08-2010 12:45
Принудительная установка обновлений wsus win2k WSUS 1 19-10-2009 09:27
WSUS, Windows XP установка SP3 ss777 WSUS 10 25-06-2008 18:28




 
Переход