Показаны сообщения с ярлыком script. Показать все сообщения
Показаны сообщения с ярлыком script. Показать все сообщения

10 мая 2011 г.

Скрипт для автоматической очистки ящиков в Exchange 2007/2010 от ненужных сообщений

У нас в компании есть служебные рассылки в которые приходят служебные сообщения с разного рода информацией: ошибки, предупреждения и т.д. Временами оттуда может прилететь “волна” в сотни мегабайт или того больше, т.к. и самих сообщений может быть десятки тысяч, да и их размер в особо неприятных случаях может достигать нескольких десятков мегабайт.

В былые времена это приводило к ступору сервера. Затем мы перешли на Exchange 2007 и сервера стали намного мощнее и падать сервер перестал. Зато получалась такая себе DOS атака, т.к. вся очередь была забита такими сообщениями, а все остальные проходили тяжело. Мы переформировали очереди, проставили приоритеты и все вроде бы исправилось … Но теперь возникла та проблема, что если такая “волна” проходит на праздниках или во время отпуска, то ящик пользователя может заблокироваться.

После некоторого количества проб было решено написать скрипт, который будет чистить папки пользователей от таких сообщений, в случае если эти сообщения старше одного дня. Срок выбран из эмпирических соображений, т.к. практика показала, что сообщения старше суток никому не нужны.

24 июня 2010 г.

Решение проблем с установкой и обновлением Adobe Flash Player

Adobe Flash Player – один из самых распространенных компонентов для браузеров. К сожалению, одновременно, он еще и самый проблемный из таковых. Большинство проблем с зависанием браузера, съедаемой памятью и “тормозами” – из за него. (Еще круче в смысле тормозов и памяти, конечно же Java, но она не так распространена на сайтах). Что еще печальнее, на долю Flash & Acrobat Reader приходится существенная часть уязвимостей в браузере, с помощью которых может быть проведена удаленная атака на компьютер.

Ну с Acrobat Reader все относительно просто, нужно наглухо закрыть показ pdf в браузере и отключить выполнение скриптов в pdf, и это позволит вам не так беспокоиться по этому поводу. С Flash все печальнее. К сожалению, тот же flash невозможно обновлять через WSUS. Конечно же, можно все отдать на откуп апдейтерам от Adobe и полагаться на то, что пользователь нажмет Yes в нужный момент. Но как показывает практика, именно в такие моменты юзер выбирает No :-)

Кроме того, время от времени, даже Yes не помогает, т.к. новый Flash не хочет устанавливаться или устанавливается с ошибкой. Что же делать в этом случае?

12 марта 2010 г.

Как починить WSUS agent на клиентской машине

Обновлено 12.03.2010 – добавлен скрипт для восстановление доступов к реестру и системным папкам

Ранее, я уже писал, как сверить список компьютеров, которые есть в AD с теми, которые есть во WSUS. Если эти списки не совпадают, то у вас проблема и часть компьютеров не обновляется.

В самом простом случае, вы забыли сделать групповую политику, которая настраивает клиентские компьютеры и серверы на обновление со WSUS, или сконфигурировали ее так, что она не применяется. Ручная настройка параметров через gpedit.msc тоже допустима, но только для тех компьютеров, которые не входят в домен.

Итак, политика применяется, но все равно компьютер не обновляется. Что делать и как лечить?

Для простоты, выкладываю все эти скрипты в уже готовом виде: Wsus-fix

1. Первый скрипт самый простой, и, на самом деле, даже не для лечения используется, а для того, чтобы принудительно запустить проверку на обновление, ну и, заодно, чистит папку, в которой накапливаются дистрибутивы уже установленных обновлений:

wsus_detect_manual.cmd

net stop wuauserv && net stop bits && net stop cryptsvc

del /f /s /q %windir%\SoftwareDistribution\download\*.*

net start wuauserv && net start bits && net start cryptsvc

wuauclt.exe /detectnow

exit

2. Второй скрипт нужен для того, чтобы “оживить” неработающий сервис WSUS. В нем идет чистка от старых обновлений, после чего папки SoftwareDistribution и Catroot2 переименовываются, что при перезапуске сервиса приведет к их пересозданию. Затем системные dll библиотеки перерегистрируются.

fix_wsus_service.cmd

net stop bits
net stop wuauserv
net stop cryptsvc

del /f /s /q %windir%\SoftwareDistribution\download\*.*

ren %systemroot%\System32\Catroot2 Catroot2.old
ren %systemroot%\SoftwareDistribution SoftwareDistribution.old

REM del /f /s /q %windir%\SoftwareDistribution\*.*

del /f /s /q %windir%\windowsupdate.log

%windir%\system32\regsvr32.exe /U /s %windir%\system32\vbscript.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\mshtml.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msjava.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msxml.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\actxprxy.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\shdocvw.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wintrust.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\initpki.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\dssenh.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\rsaenh.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\gpkcsp.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\sccbase.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\slbcsp.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\cryptdlg.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Urlmon.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Oleaut32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msxml2.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Browseui.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\shell32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\atl.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\jscript.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\msxml3.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\softpub.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuapi.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuaueng.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuaueng1.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wucltui.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wups.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wups2.dll
%windir%\system32\regsvr32.exe /U /s %windir%\system32\wuweb.dll

%windir%\system32\regsvr32.exe /s %windir%\system32\vbscript.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\mshtml.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msjava.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msxml.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\actxprxy.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\shdocvw.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wintrust.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\initpki.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\dssenh.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\rsaenh.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\gpkcsp.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\sccbase.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\slbcsp.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\cryptdlg.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Urlmon.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Oleaut32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msxml2.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Browseui.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\shell32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\Mssip32.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\atl.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\jscript.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\msxml3.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\softpub.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuapi.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuaueng.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuaueng1.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wucltui.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wups.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wups2.dll
%windir%\system32\regsvr32.exe /s %windir%\system32\wuweb.dll

net start bits
net start wuauserv
net start cryptsvc

wuauclt /detectnow

exit

3. Этот скрипт применяется в тех случаях, когда компьютер был недавно клонирован, или в тех, когда регистрации в WSUS у компьютера так и не произошло. Он отличается от предыдущего только предпоследней строчкой, в которой производится обнуление авторизации с перегенерацией идентификатора. Приведу только эту строчку:

wsus_resetaut_detect_manual.cmd

wuauclt.exe /resetauthorization /detectnow

4. Если нужно просто обнулить авторизацию, то можно воспользоваться конструкцией из предыдущего скрипта. Практика показала, что еще лучше удалять лишние ключи из реестра, для чего мы используем следующий скрипт

AU_Clean_SID.cmd

@echo on
net stop wuauserv
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v AccountDomainSid /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v PingID /f
REG DELETE "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate" /v SusClientId /f
net start wuauserv
wuauclt /resetauthorization /detectnow

5. Иногда, для того, чтобы все заработало нужно переустановить агента WSUS. Вначале нужно скачать latest Windows Update Agent, ну а затем установить соответствующую редакцию

для x32 версий Windows

windowsupdateagent30-x86.exe /wuforce

для x64 версий Windows

windowsupdateagent30-x64.exe  /wuforce

Если вы счастливый обладатель Itanium – догадаетесь сами :-)

После установки агента нужно обязательно перезагрузиться.

6. Для “лечения” ошибок 0x80070005, т.е. ошибок доступа может пригодиться нижеприведенный скрипт. Он восстанавливает доступы для администраторов и системы к реестру и системным папкам.

Для выполнения этого скрипта понадобится майкрософтовская утилита subinacl.exe. Она входит в resource kit для Windows Server 2003, но пользоваться той версией, что входит туда не стоит, т.к. там неприятные ошибки. Следует скачать subinacl.exe версии 5.2.3790.1180.

Restore_registry_and_system_permission.cmd

@echo off
REM Применять при ошибках 0x80070005 Windows Update
subinacl /subkeyreg HKEY_LOCAL_MACHINE /grant=administrators=f
subinacl /subkeyreg HKEY_CURRENT_USER /grant=administrators=f
subinacl /subkeyreg HKEY_CLASSES_ROOT /grant=administrators=f
subinacl /subdirectories %SystemDrive% /grant=administrators=f
subinacl /subkeyreg HKEY_LOCAL_MACHINE /grant=system=f
subinacl /subkeyreg HKEY_CURRENT_USER /grant=system=f
subinacl /subkeyreg HKEY_CLASSES_ROOT /grant=system=f
subinacl /subdirectories %SystemDrive% /grant=system=f

Скрипт был найден в статье базы знаний Microsoft

 

Все эти скрипты можно выполнять практически автоматически, в случае возникновения проблем. Если в результате проблема таки не решена, то приходится разбираться уже плотнее. И тут нам пригодится тот самый windowsupdate.log, который лежит в корне папки Windows. Если компьютер проблемный, то файл этот большого размера. Для простоты, желательно его удалить перед тем как запускать скрипты. Почти во всех скриптах предусмотрена команда его удаления, но не все так просто. Не смотря на остановку сервиса wuauserv, обычно, его продолжают держать открытые IE и т.п. Поэтому, есть хитрый способ. Запускаю

notepad.exe %windir%\windowsupdate.log

Выделяю весь текст, удаляю его и сохраняю вместо старого файла (не забыть в диалоге сохранения поменять тип файла на *.*, а то по умолчанию – *.txt)

Итак, вернемся к логу, коды ошибок WSUS 3 могут помочь в разбирательстве.

Одна из распространенных проблем со wsus клиентом на серверах может заключаться в том, что сам сервис может подключаться к WSUS через прокси, а этого не нужно и наоборот. Манипулировать этим поведением можно с помощью команды proxycfg

Доступ без прокси: proxycfg –d 
Доступ через прокси с опциональным указанием байпас листа: proxycfg –d
Проимпортировать пользовательские настройки: proxycfg –u

Стоит заметить, что есть случаи, когда заставить клиента обновляться со wsus так и не получается. У меня есть прецеденты с парочкой Windows Server 2003 R2, которые мне побороть так и не удалось. Поэтому я их обновляю через интернет :-)

Свежие операционные системы типа Windows 7, Windows 2008 иногда “заводятся” с трудом. Для таких случаев, эмпирическим путем, был найден алгоритм типа:
1. Обновляемся первый раз с сайта microsoft с обновлением агента
2. Потом обновляем агента уже локально
3. А потом все начинает работать

Надеюсь, что плоды наших трудов кому-нибудь помогут.

Для простоты, выкладываю все эти скрипты в уже готовом виде: Wsus-fix

8 февраля 2010 г.

WMI фильтры в групповой политике

Ни для кого не секрет, что групповые политики являются одной из самых полезных технологий Microsoft Active Directory. Если у вас компьютеров более 10 штук, то Active Directory и групповые политики помогут вам сэкономить массу сил и позволят избежать кучи ошибок.

Но, при все при этом,  параметры этих политик для разных операционных систем у Microsoft  могут сильно отличаться, кроме того, у вас может быть необходимость назначать эти параметры по разному. “На поверхности” лежит способ с отдельными контейнерами. Он прост, но не совсем удобен, кроме того, он слабо подходит для пользовательских политик.

Есть несколько решений этой задачи. Из новых, достаточно удобных решений – это Group Policy Preferences. У item-level targeting есть и такие параметры как операционная система, разрядность и т.д. Но, к сожалению, такой функционал есть только в разделе Preferences, а других разделов групповой политики это не касается.

Кроме того, есть такая чудная вещь, как WMI filtering. Что особенно удобно, фильтры готовятся заранее, а затем только выбираются в свойствах нужной вам политики.

Как именно это делается? Запускаю Group Policy Management, на панели навигации выбираю WMI Filters, там правая кнопка мышки и New. В поле Name набираю Windows 7 и нажимаю Add. В поле Query набираю:

select * from Win32_OperatingSystem where Version like "6.1" and ProductType = "1"

После этого нажимаю Ok, а затем Save.

Возможные значения для OperatingSystem и ProductType:

  1. Windows Server 2008 R2 или Windows 7 - 6.1%
  2. Windows Server 2008 или Windows Vista - 6.0%
  3. Windows Server 2003 - 5.2%
  4. Windows XP - 5.1%
  5. Windows 2000 - 5.0%
  1. Клиентские версии Windows – 1
  2. Серверные версии Windows, выступающие в роли контроллера домена – 2
  3. Серверные версии Windows, не выступающие в роли контроллера домена (отдельные серверы) - 3

Кстати, если есть желание отобрать Vista и Windows 7, то можно записать правило отбора так:

select * from Win32_OperatingSystem where Version like "6.%" and ProductType = "1"

Есть еще одно свойство, которое может выступать в качестве параметра отбора, это Caption. Ранее я использовал именно его, но, к сожалению, у меня с новыми версиями OS, почему-то, есть проблемы с его считыванием. Но его, по прежнему можно использовать с более ранними версиями:

Select * from Win32_OperatingSystem where Caption = "Microsoft Windows XP Professional"

Возможные значения:

  1. Microsoft Windows 2000 Professional
  2. Microsoft Windows 2000 Server
  3. Microsoft(R) Windows(R) Server 2003 Enterprise x64 Edition
  4. Microsoft(R) Windows(R) Server 2003, Standard Edition
  5. Microsoft(R) Windows(R) Server 2003 Standard x64 Edition
  6. Microsoft® Windows Server® 2008 Standard without Hyper-V
  7. Microsoft® Windows Vista™ Business
  8. Microsoft Windows XP Professional

Кстати, из этого списка видно, что при этом способе выборка может быть более подробной, т.к. в этом случае можно отобрать еще и разные редакции и разрядность операционной системы.