• Антивирус для Windows Server - настраиваем список исключений. Обновлено 11.08.2016

    imageВ ходе настройки политик управления клиентами любого антивирусного ПО необходимо определять список каталогов, имён процессов или даже расширений фалов, которые должны исключаться из Real-Time сканирования. Постараюсь собрать в одном месте информацию о рекомендуемых параметрах исключений и по мере необходимости буду его корректировать.  Стоит отметить, что список составлен исходя из приложений, которые эксплуатируются в моём рабочем окружении. Список разделен по основным категориям сервисов и там где возможно есть ссылки на официальные рекомендации производителей ПО. Во всех случаях подразумевается что программное обеспечение установлено в каталоги «по умолчанию».

    Читать далее...

  • SCCM 2012 - Client Push Install для серверов Forefront TMG

    imageВ процессе автоматического развёртывания клиентов System Center 2012 Configuration Manager (SCCM) методом Push-installation мы можем обнаружить, что на сервера Forefront TMG клиент SCCM не устанавливается. Официальный список используемых для этой процедуры портов можно найти в документах Windows Firewall and Port Settings for Client Computers in Configuration Manager и Ports Used by Configuration Manager

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

    Читать далее...

  • Forefront TMG и кастомизированный wpad.dat

    imageПосле того как мы начали использовать для авто-настройки параметров прокси WPAD файл который генерируется Forefront TMG, заметили то, что попытка использовать в настройках сети Internal в списке исключений для обхода прокси комбинацию имён и IP диапазонов приводит к проблеме открытия некоторых локальных узлов. Похожая проблема была описана в статье KB920715, но не смотря на то, что речь там идёт про ISA 2004, схожие симптомы мы наблюдали и на TMG. Когда из списка исключений для обхода прокси убирались IP диапазоны – проблема устранялась. Ещё к большему желанию отказаться от использования генерируемого TMG файла wpad.dat привела статья Richard Hicks' Forefront TMG Blog - WPAD Considerations for Kerberos Authentication with NLB VIP on Forefront TMG 2010. По одной из ссылок в этой статье было найдено описание метода “скармливания” TMG самостоятельно сформированного кастомизированного файла wpad.dat -

    Дело осталось за малым, корректно создать собственный файл параметров авто-настройки WPAD. В изучении вопроса оказались полезными ресурсы Wikipedia - Proxy auto-config и Penguins Joys - Wpad.dat

    В итоге у меня получился такой вот файл wpad.dat:

    function FindProxyForURL(url, host) {

     

    if (shExpMatch(host, "127.0.0.1" ) ||

    shExpMatch(host, "localhost" ) ||

    isInNet(host, "10.0.0.0",  "255.0.0.0") ||

    dnsDomainIs(host, ".holding.com" )||

    dnsDomainIs(host, ".localdomain.ru" )||

    dnsDomainIs(host, ".my.domain.local" )||

    shExpMatch(url,"*.holding.com/*") ||

    shExpMatch(url, "*.holding.com:*/*") ||

    shExpMatch(url, "www.samedom1.ru") ||

    shExpMatch(url, "app.samedom2.com") ||

    isPlainHostName(host)) {return "DIRECT";}

     

    return "PROXY KOM-AD01-TMGCL.holding.com:8080; DIRECT";

     

    }

    Для того чтобы заставить TMG использовать созданный нами wpad.dat воспользуемся набором скриптов, которые можно загрузить по ссылке указанной в статье Forefront TMG (ISA Server) Product Team Blog > Use ISA/TMG to distribute your custom WPAD configuration file

    Распаковываем на TMG сервере архив KB953293.zip в отдельный каталог, например C:ToolsCustomWPADKB953293 и создаём два командных файла для установки кастомизированного файла wpad.dat и для удаления (возврату к генерируемому файлу TMG). В нашем случае соответственно файлы получились такие:

    wpad-file-install.cmd:

    cd /d C:ToolsCustomWPADKB953293

    cscript kb953293.wsf /array:. /net:internal /script:C:ToolsCustomWPADwpad.dat

    wpad-file-uninstall.cmd:

    cd /d C:ToolsCustomWPADKB953293

    cscript kb953293.wsf /array:. /net:internal /del

    Обратите внимание на то что в переменной array в качестве значения имени массива TMG можно указать точку, чтобы использовать текущий массив.

    Сама процедура установки первым командным файлом выглядит примерно так: 

    image

    В указанной статье обращается внимание на то, что в случае если в созданном нами файле wpad.dat будут найдены символы non-ASCII, то возможно процедура установки такого файла завершиться неуспешно.

    После того, как наш файл авто-настройки успешно установлен в TMG, - очищаем кэш браузера с проверяем то, что по ссылке http://wpad.holding.com/wpad.dat нам возвращается именно наш файл. Проверяем работу браузеров с заданными нами настройками и убеждаемся в том, что комбинирование правил исключений для имён и IP работает успешно. Дополнительно собственным файлом авто-настройки мы решаем ещё одну проблему описанную Ричардом Хиксом - теперь клиенты будут обращаются на виртуальный IP нашего NLB кластера, а не на какую-то конкретную ноду, как это происходит в случае с использованием генерируемого TMG файла wpad.dat.

    Установив кастомизированный файл авто-настройки следует помнить о том, что все последующие изменения, которые необходимо вносить в конфигурацию (например расширения списка обхода прокси) нужно производить путём корректировки созданного нами файла и повторной его установки командным файлом wpad-file-install.cmd. При этом изменения выполняемые на соответствующих закладках свойств сети Internal в консоли TMG будут игнорироваться, по крайней мере это показывают практические тесты.

  • Настраиваем Web Proxy Automatic Discovery (WPAD)

    imageЕсли вы настраиваете параметры прокси сервера в веб-браузере Internet Explorer (IE) с помощью групповых политик, и тем более делаете это с запретом изменений настроек для пользователя, то рано или поздно может возникнуть ситуация, когда пользователь выехавший в командировку не сможет воспользоваться на служебном ноутбуке браузером для доступа в интернет где-нибудь в гостинице или аэропорте из-за невозможности отключения этих самых жёстко заданных настроек прокси.

    Чтобы избежать подобной проблемы можно воспользоваться механизмом авто-настройки параметров прокси в браузере - Web Proxy Automatic Discovery (WPAD). С точки зрения клиентского браузера суть механизма WPAD в том, что при попытке доступа в интернет, браузер будет находить (через DNS/DHCP) сервер, на котором размещён настроечный файл http://wpad.holding.com/wpad.dat 

    Файл Wpad.dat это файл Java-script в котором задаются настройки параметров расположения имени и порта прокси сервера, а также список исключений для обхода прокси. В случае недоступности данного файла браузер будет выполнять попытку прямого подключения к Интернет-ресурсам через настроенный в свойствах сетевого адаптера шлюз по умолчанию. При этом в настройках самого браузера в явном виде параметры прокси не указываются, а включается соответствующая опция авто-обнаружения. Механизм WPAD поддерживают браузеры Internet Explorer, Mozilla Firefox, с некоторыми ограничениями Opera и др.

    Для того чтобы клиентский браузер узнал о том, где в локальной сети расположен сервер с опубликованным файлом wpad.dat, может использоваться механизм обращения в DNS или получения настроек с сервера DHCP. Эти оба метода можно применять как раздельно, так и совместно и каждый из этих методов имеет свои достоинства и недостатки.


    WPAD и DHCP

    Метод настройки сервера DHCP для использования WPAD можно найти здесь: TechNet Library - Creating a WPAD entry in DHCP

    Его основа сводится к добавлению на сервер DHCP дополнительной опции 252, в которой указывается URL файла авто-настройки. Эта опция назначается на сервер или отдельную область и передается клиентам DHCP вместе с основными настройками IP.

    Итак, для настройки сервера DHCP на Windows Server 2008 R2 откроем консоль управления этой ролью (Start -> Programs -> Administrator Tools -> DHCP) и в свойствах сервера выберем пункт управления опциями - Set Predefined Options.

    В окне опций, чтобы добавить новую опцию нажмём Add и затем укажем параметры опции:

    Name – WPAD
    Code – 252
    Data Type – String
    Description - 
    Web Proxy Automatic Discovery
    image

    После этого зададим в поле String значение URL по умолчанию и сохраним параметр.

    image

    В документации встречается отдельное замечание о том, что имя файла wpad.dat должно быть написано в данном случае в нижнем регистре.

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

    image Как видно, при задании URL размещения файла авто-настройки можно указывать нестандартный порт вместо 80, что является преимуществом в сравнении с методом настройки через DNS где при публикации файла может использоваться только 80 порт. С другой стороны метод настройки через DHCP не поможет нам на системах где используется статическая IP адресация (DHCP клиент не запущен) и при этом требуется настройка браузера, например на терминальных серверах. Более того, по имеющейся информации обрабатывать опцию с DHCP способен только Internet Explorer, то есть говорить об альтернативных браузерах в данном случае не приходится вообще. 

    WPAD и DNS

    В нашем практическом примере мы будем использовать метод с использованием DNS, так как, на мой взгляд, он является наиболее универсальным, хотя и не лишён некоторых недостатков (некритичных в нашей ситуации).

    Суть метода настройки клиентов WPAD с использованием DNS заключается в том, что в основной зоне DNS (DNS Suffix) создается запись формата wpad.domain.com которая ссылается на сервер где опубликован файл wpad.dat. Тип этой записи может быть как A так и CNAME.

    В нашем примере все клиенты находятся в DNS домене holding.com. В зоне прямого просмотра holding.com мы создаём запись CNAME - tmgcluster.holding.com. Эта запись ссылается на имя массива из двух серверов Forefront TMG находящихся в NLB кластере.

    Прежде чем начать использовать наш DNS сервер для WPAD, мы должны убедиться в том, что он не настроен на блокировку обновления/разрешения имён wpad. Такая блокировка по умолчанию защищает сервер от атак по регистрации фальшивых узлов wpad. Во времена Windows Server 2003 такая защита обеспечивалась тем, что в зонах DNS создавалась специальная запись-заглушка с типом TXT. Подробней об этом можно почитать в статье KB934864 - How to configure Microsoft DNS and WINS to reserve WPAD registration. С приходом Windows Server 2008 в роли DNS Server появился встроенный механизм глобальных листов блокировки. В нашем примере используется сервер DNS на базе Windows Server 2008 R2, и для того, чтобы посмотреть задействован ли в данный момент механизм глобальных блокировок выполним команду:

    dnscmd /info /enableglobalqueryblocklist

    Чтобы получить содержимое блок-листа выполним:

    dnscmd /info /globalqueryblocklist

    В конфигурации по умолчанию в блок-лист как раз таки включены записи wpad и isatap. Чтобы переписать содержимое блок-листа, исключив оттуда интересующий нас wpad, выполним команду:

    dnscmd /config /globalqueryblocklist isatap

    image

    По сути в данном случае утилита dnscmd оперирует с параметрами реестра описанными в статье TechNet Library - Remove ISATAP from the DNS Global Query Block List

    В ветке реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesDNSParameters

    блок-лист хранится в параметре GlobalQueryBlockList

    Если есть желание отключить использование блок-листа совсем, можно выполнить:

    dnscmd /config /enableglobalqueryblocklist 0

    или же в изменить соответствующий параметр реестра EnableGlobalQueryBlockList

    После сделанных изменений нужно перезапустить службу DNS

    net stop dns & net start dns


    WPAD сервер

    Используя TechNet Library - Configuring a WPAD server рассмотрим настройки на стороне сервера Forefront TMG, который будет у нас выполнять роль сервера WPAD с опубликованным файлом авто-конфигурации wpad.dat

    В консоли Forefront TMG Management в дереве навигации перейдём в ветку Networking на закладку Networks и выберем сеть, для которой нам нужно создать прослушиватель WPAD (обычно это внутренняя сеть – Internal). Откроем свойства этой сети

    image

    На закладке Auto Discovery включим опцию публикации файла wpad.dat -  Publish automatic discovery information for this network

    В поле где указан номер порта устанавливаем 80 порт. Как уже отмечалось ранее, в силу того, что мы используем связку WPAD/DNS, мы должны использовать именно этот порт.

    image

    Переключаемся на закладку Web Browser и настраиваем список исключений для узлов и доменов к которым клиенты должны ходить напрямую минуя прокси.

    image

    Сохраняем настройки конфигурации TMG и после этого через веб браузер TMG должен отдавать нам скрипт авто-настройки по адресу http://tmgcluster.holding.com/wpad.dat

    Открыв этот файл, мы сможем проверить попали ли в него данные списка обхода прокси. Изучив содержимое этого файла можно заметить то, что по умолчанию в этот файл адреса прокси-серверов попадают в виде IP адресов

    ...

    DirectNames=new MakeNames();

    cDirectNames = 10;

    HttpPort = "8080";

    cNodes = 2;

    function MakeProxies(){

    this[0] = new Node("192.168.0.11",2531460408,1.000000);

    this[1] = new Node("192.168.0.12",3457248957,1.000000);

    }

    Proxies = new MakeProxies();

    ...

    В некоторых случаях, например если требуется авторизация Kerberos, это может вызвать некоторые сложности. Есть хороший пост на эту тему Forefront TMG (ISA Server) Product Team Blog > Understanding By-Design Behavior of ISA Server 2006: Using Kerberos Authentication for Web Proxy Requests on ISA Server 2006 with NLB.

    Для того чтобы изменить адреса прокси попадающие в wpad с IP на FQDN можно воспользоваться подключением к COM-объекту TMG через Powershell и свойством CarpNameSystem. Чтобы получить текущее значение этого свойства, выполним скрипт:

    $ServerName = "TMGCLUSTER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.CarpNameSystem

    Установленное по умолчанию значение "2" нам нужно будет заменить на значение "0" следующим образом:

    $ServerName = "TMGCLUSTER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.CarpNameSystem = 0

    $TMGObj.ApplyChanges()

    Для вступления параметров в силу нужно перезапустить сервера TMG.

    После перезагрузки снова проверяем содержимое файла wpad.dat и убеждаемся в том, что адреса прокси указаны в виде FQDN серверов.

    ...

    function MakeProxies(){

    this[0] = new Node("TMG01.holding.com",2531460408,1.000000);

    this[1] = new Node("TMG02.holding.com",3457248957,1.000000);

    }

    ...

    WPAD клиенты

    Дело осталось за малым – включить настройку WPAD в свойствах клиентских веб-браузеров. В Internet Explorer эта опция включена по умолчанию, и если ранее вы использовали групповые политики для явного задания настроек прокси, то возможно имеет смысл их же использовать для стирания старых настроек и включения авто-определения. image

    В браузере Mozilla Firefox активация механизма WPAD делается аналогичным образом и работает без нареканий (проверено на текущей версии 12.0)

    image

    Дополнительная информация:

    TechNet Library - Automatic Discovery for Firewall and Web Proxy Clients

  • SCOM 2012 Discovery & Agent Push Install для серверов Forefront TMG

    imageВ процессе процедуры обнаружения (Discovery) для удалённой установки агента (Push-installation) SCOM 2012 на сервера с Forefront TMG мы получим ошибку по причине блокировки необходимых нам соединений. Официальный список используемых для этой процедуры портов можно найти в документе Supported Configurations for System Center 2012 - Operations Manager - Supported Firewall Scenarios

    image

     

    Руководствуясь представленным списком портов у меня так и не получилось добиться желаемого результата. И даже рецепты, предложенные в статьях Kevin Holman's System Center Blog > Agent discovery and push troubleshooting in OpsMgr 2007 и DefinIT > Remote Installation of SCOM 2007 R2 Agent on Threat Management Gateway Servers не помогли, хотя и стали в совокупности подспорьем в обнаружении работоспособного варианта решения проблемы. Рассмотрим его.

    В консоли Forefront TMG Management создадим набор компьютеров (Computer Set) с названием System Center Operations Manager Servers. Включим в этот набор наши сервера SCOM, с которых будет выполняться удалённая установка и последующие обновления агента SCOM

    image

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

    Описания протоколов которые есть в TMG по умолчанию:

    Описание Протокол Порты Направление
    System Center Operation Manager Agent TCP 5723 Outbound
    NetBios Datagram UDP 138 Send
    NetBios Name Service UDP 137 Send/Recieve
    NetBios Session TCP 139 Outbound
    Ping ICMP 0/8 Send/Recieve
    RPC (all interfaces) TCP 135 Outbound

    Описания протоколов, которые мы создадим дополнительно:

    Описание Протокол Порты Направление
    RPC/DCOM High Ports TCP 1024-65535 Outbound
    SMB over IP TCP 445 Outbound

     

    Создадим правило разрешающее обнаружение и удалённую установку, назовём его “SCOM Agent Push Install”:

    image

    В качестве разрешённых протоколов в этом правиле будут перечислены все протоколы перечисленные в таблицах, за исключением первой позиции.image

    После того как правило создано, откроем его свойства и на закладке настройки протоколов, используя кнопку Filtering > Configure PRC protocol выключим включенный по умолчанию режим Enforce strict RPC compilance 

    image

    Затем создадим ещё одно правило, разрешающее исходящий трафик от агента до сервера SCOM по порту TCP 5723 , назовём его, например “Allow remote monitoring (from TMG to SCOM)”:

    image

    Сохраняем конфигурацию TMG и проверяем результат.

  • TMG 2010 - Резервное копирование Array Configuration с PowerShell

    imageОзадачившись вопросом автоматизации регулярного выполнения резервного копирования настроек Forefront TMG 2010 нашёл ряд интересных материалов, в том числе статью, описывающую процедуру настройки взаимодействия DPM сервера и DPM агента, установленного на сервере TMG - The Microsoft MVP Award Program Blog > How DPM 2010 Could Protect Forefront TMG 2010 with a Minimum Opening of Feeds. Учитывая то что в моём случае сервера TMG являются виртуальными и периодически подвергаются резервному копированию в виде VM на сервер DPM, нет особого смысла в установке агента DPM непосредственно внутрь этих виртуальных машин. Поэтому я решил ограничиться созданием на регулярной основе резервных копий конфигурации массива TMG. Из консоли TMG эта процедура вызывается из меню действий или контекстного меню на конкретном массиве – Export (Back Up)

    <p>&#160;</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image33.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb33.png" width="392" height="230" /></font></a></p>    <p><font size="2"></font></p>    <p><font size="2">Мастер сохранения конфигурации довольно прост и в моём примере используется с включенными настройками сохранения опциональной информации о введённых в TMG учетных данных и настроек безопасности. </font></p>    <p><font size="2"></font></p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image34.png"><font size="2"><u></u><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb34.png" width="517" height="399" /></font></a></p>    <p><font size="2"></font></p>    <p><font size="2">После изучения примеров автоматизации этой процедуры экспорта настроек и некоторых экспериментов получился PowerShell скрипт, который регулярно запускается на одном из TMG серверов, являющихся членом массива и сохраняет с аналогичными настройками безопасности данные конфигурации на файловый сервер. Если в процессе выполнения экспорта происходит ошибка – скрипт отсылает администратору письмо-уведомление. Дополнительно скрипт отслеживает наличие устаревших файлов экспорта и удаляет их.&#160;&#160; </font></p>    <p><font size="2"></font></p>    <blockquote>     <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок переменных для экспорта</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvExportDir - Путь к каталогу на файловом сервере в котором будут создаваться экспортируемые файлы</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvExportOptData - Константа определяющая опции экспорта. Подробнее http://msdn.microsoft.com/en-us/library/ms826700.aspx</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvPassword - Пароль для криптования информации об учетных данных, сохранённых в TMG</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$gvExportDir</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;\FSTMG-Array-Config$&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span><font color="#800080">$gvExportOptData</font></span><span> </span><span><font color="#ff0000">=</font></span><span> 15</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span><font color="#800080">$gvPassword</font></span><span> </span><span><font color="#ff0000">=</font></span><span> </span><span><font color="#800000">&quot;12345678&quot;</font></span></font><span></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок переменных для уведомлений по электронной почте в случае проблем экспорта</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvEmailFrom - Email адрес отправителя</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvEmailTo - Email адрес получателя (например адрес группы рассылки для Администраторов TMG)</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvSMTPServer - FQDN имя почтового сервера</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$gvEmailFrom</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;TMG-Config-Backup@holding.com&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$gvEmailTo</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;DST-TMG-Administrators@holding.com&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span><font color="#800080">$gvSMTPServer</font></span><span> </span><span><font color="#ff0000">=</font></span><span> </span><span><font color="#800000">&quot;Mail.holding.com&quot;</font></span></font><span></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок переменных для удаления устаревших файлов экспорта</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvDelOldFiles - Признак необходимости удаления устаревших файлов</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># $gvDelPeriod - Период хранения файлов экспорта в днях.</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span><font color="#800080">$gvDelOldFiles</font></span><span> </span><span><font color="#ff0000">=</font></span><span> </span><span><font color="#800080">$True</font></span></font><span></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span><font color="#800080">$gvDelPeriod</font></span><span> </span><span><font color="#ff0000">=</font></span><span> 10</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок экспорта конфигураций всех обнаруженных массивов TMG</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><font color="#800080">$vFPC</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">New-Object</font></span></b><span lang="EN-US"> </span><i><span lang="EN-US"><font color="#5f9ea0">-comObject</font></span></i><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">FPC.root</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><font color="#800080">$vArrays</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vFPC</font></span><span lang="EN-US">.Arrays</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><font color="#0000ff">Foreach</font></span><span lang="EN-US"> (</span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#0000ff">in</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArrays</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font size="2" face="Courier New">{</font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Find array:&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vDate</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">Get-Date</font></span></b><span lang="EN-US"><span> </span></span><i><span lang="EN-US"><font color="#5f9ea0">-uformat</font></span></i><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;%Y_%m_%d_%H_%M_%S&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160; </span><span>&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vFName</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;_&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vDate</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;.xml&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vFPath</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$gvExportDir</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vFName</font></span><span lang="EN-US"> </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vComment</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Exported by PowerShell&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Export configuration for array:&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Path:&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$vFPath</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.ExportToFile(</span><span lang="EN-US"><font color="#800080">$vFPath</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$gvExportOptData</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$gvPassword</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$vComment</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">If</font></span><span lang="EN-US"> (</span><span lang="EN-US"><font color="#800080">$Error</font></span><span lang="EN-US">){</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160; </span><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Export failed, send e-mail to Administrators...&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vEmailSubj</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Error exporting TMG Configuration&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160; </span><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vEmailBody</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#000000' size='2'&gt;Error exporting configuration for array: &lt;/font&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#0000A0' size='2'&gt;&lt;strong&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vArray</font></span><span lang="EN-US">.Name </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;/strong&gt;&lt;/font&gt;&lt;/br&gt;&lt;/br&gt;&quot;</font></span><span lang="EN-US"><span>&#160; </span></span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#000000' size='2'&gt;File for exporting: &lt;/font&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#A52A2A' size='2'&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vFPath</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;/font&gt;&lt;/br&gt;&lt;/br&gt;&quot;</font></span><span lang="EN-US"><span>&#160; </span></span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#000000' size='2'&gt;Error data: &lt;/font&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800000">&quot;&lt;font face='Tahoma' color='#800000' size='2'&gt;&quot;</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">`</font></span></b></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$Error</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">+</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;&lt;/font&gt;&quot;</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160;&#160;&#160;&#160; </span><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vSMTP</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">New-Object</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">Net.Mail.SMTPClient</font></span><span lang="EN-US">(</span><span lang="EN-US"><font color="#800080">$gvSMTPServer</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vMsg</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><b><span lang="EN-US"><font color="#5f9ea0">New-Object</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">Net.Mail.MailMessage</font></span><span lang="EN-US">(</span><span lang="EN-US"><font color="#800080">$gvEmailFrom</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$gvEmailTo</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$vEmailSubj</font></span><span lang="EN-US">, </span><span lang="EN-US"><font color="#800080">$vEmailBody</font></span><span lang="EN-US">)</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vMsg</font></span><span lang="EN-US">.IsBodyHTML </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$True</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#800080">$vSMTP</font></span><span lang="EN-US">.Send(</span><span lang="EN-US"><font color="#800080">$vMsg</font></span><span lang="EN-US">)<span>&#160;&#160;&#160; </span></span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>}</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">Else</font></span><span lang="EN-US">{</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">write-host</font></span></b><span lang="EN-US"> </span><span lang="EN-US"><font color="#800000">&quot;Export Succeeded&quot;</font></span><span lang="EN-US">} </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font size="2" face="Courier New">}</font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2"># Блок удаления устаревших экспортных файлов</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span><font face="Courier New"><font color="#008000" size="2">#</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><font color="#0000ff">If</font></span><span lang="EN-US"> (</span><span lang="EN-US"><font color="#800080">$gvDelOldFiles</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#ff0000">=</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$True</font></span><span lang="EN-US">) </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font size="2" face="Courier New">{</font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">Filter</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#5f9ea0">Get-OldFiles</font></span></font><span lang="EN-US"></span></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160; </span>{</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></span><span lang="EN-US"><font color="#0000ff">if</font></span><span lang="EN-US">(([</span><span lang="EN-US"><font color="#008080">DateTime</font></span><span lang="EN-US">]::</span><span lang="EN-US"><font color="#8b4513">Now</font></span><span lang="EN-US">.</span><span lang="EN-US"><font color="#8b4513">Subtract</font></span><span lang="EN-US">(</span><span lang="EN-US"><font color="#800080">$_</font></span><span lang="EN-US">.CreationTime)).Days </span><span lang="EN-US"><font color="#ff0000">-gt</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$gvDelPeriod</font></span><span lang="EN-US">) </span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font face="Courier New"><font size="2"><span lang="EN-US"><span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span>{</span><span lang="EN-US"><font color="#0000ff">return</font></span><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$_</font></span><span lang="EN-US"> }</span></font></font></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><span lang="EN-US"><font face="Courier New"><font size="2"><span>&#160;&#160;&#160; </span>}</font></font></span></p>      <p style="line-height:normal;margin:0;" class="MsoNormal"><font size="2"><font face="Courier New"><span lang="EN-US"><span>&#160;&#160;&#160; </span></span><b><span lang="EN-US"><font color="#5f9ea0">dir</font></span></b><span lang="EN-US"> </span><i><span lang="EN-US"><font color="#5f9ea0">-path</font></span></i><span lang="EN-US"> </span><span lang="EN-US"><font color="#800080">$gvExportDir</font></span><span lang="EN-US"> | Get-OldFiles -Period </span><span lang="EN-US"><font color="#800080">$gvDelPeriod</font></span><span lang="EN-US"> | </span><b><span lang="EN-US"><font color="#5f9ea0">Remove-Item</font></span></b><span lang="EN-US"> </span><i><span lang="EN-US"><font color="#5f9ea0">-force</font></span></i></font><span lang="EN-US"></span></font></p>      <p style="margin:0 0 10pt;" class="MsoNormal"><span style="line-height:12pt;"><font size="2" face="Courier New">}</font></span></p>   </blockquote>    <p><font size="2">На сервере TMG в планировщике задач создана задача, которая через определённые интервалы времени запускает PowerShell и выполняет данный скрипт.</font></p>    <p><font size="2">Триггер</font> выполнения при желании можно сделать не на периодической основе а например привязать к событию перезапуска служб TMG и таким образом получить автоматическое сохранение резервной копии конфигурации после каждого её более или менее серьёзного изменения.</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image35.png"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb35.png" width="544" height="405" /></a><font size="2"></font></p>    <p>&#160;</p>    <p>В моём примере данная задача выполняется от имени системы с высоким уровнем привилегий</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image36.png"><u></u><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb36.png" width="544" height="220" /></a><font size="2"></font></p>    <p><font size="2">И в силу того что попытка записи создаваемого файла экспортированной конфигурации будет выполняться в контексте SYSTEM сервера TMG, на файловом сервере в свойствах соответствующего сетевого каталога нужно выставить разрешения для учетной записи компьютера – сервера TMG</font></p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image37.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb37.png" width="372" height="320" /></font></a></p>    <p><font size="2">Ну и разумеется нужно не забыть добавить данное разрешение на уровне NTFS</font></p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image38.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb38.png" width="374" height="418" /></font></a></p>    <p>После этого, настроенное нами задание должно заработать и дать желаемый результат.</p>    <p><a href="http://blog.it-kb.ru/wp-content/uploads/2012/02/image39.png"><font size="2"><img style="display:block;float:none;margin:0 auto;" title="image" alt="image" src="http://blog.it-kb.ru/wp-content/uploads/2012/02/image_thumb39.png" width="550" height="110" /></font></a></p>    <p><font size="2">Источники информации:</font></p>    <ul>     <li><a href="https://msdn.microsoft.com/en-us/library/ff825679(v=vs.85).aspx"><font size="2">MSDN Library &gt; COM Objects &gt; FPC &gt; ExportToFile Method</font></a></li>      <li><a href="http://msdn.microsoft.com/en-us/library/dd435786.aspx"><font size="2">MSDN Library - Exporting and Importing a Forefront TMG Configuration</font></a></li>      <li><a href="http://social.technet.microsoft.com/Forums/en-US/Forefrontedgegeneral/thread/f42ae1ba-2db5-4319-9b65-22a25201088a/"><font size="2">Microsoft Forefront TechCenter Forums - powershell scripting for Forefront TMG</font></a></li>      <li><a href="http://www.ldap389.info/en/2012/01/04/powershell-export-firewall-rules-on-your-tmg-servers/"><font size="2">ldap389 AD Blog - Powershell: Export firewall rules on your TMG servers</font></a></li>   </ul>    <li><a href="http://fixmyitsystem.com/2012/01/tmg-configuration-backup-automation_13.html">Blog FixMyITSystem - TMG configuration backup automation - Part II</a></li> </font>
    
  • TMG 2010 - Локализация и кастомизация сообщений об ошибках

    imageОдним из улучшений недавно вышедшего Service Pack 2 для Forefront TMG 2010 стало появление нового механизма управления страницами сообщений об ошибках. Конечно и до установки SP2 можно было кастомизировать страницы сообщений об ошибках, которые находились в подкаталоге .\ErrorHtmls каталога установки TMG (путь по умолчанию C:\Program Files\Microsoft Forefront Threat Management Gateway). Но ранее могли возникнуть определённые сложности, если вы, желая придать этим веб-страницам корпоративный стиль, например, пытались вставить в эти страницы какие-то графические элементы. В обновлённой версии TMG в каталоге установки появляется подкаталог .Templates\WebObjectsTemplates\ISA в котором можно найти страницы ошибок в формате htm и подкаталог HTML который подразумевается использовать для хранения графических элементов.

    Читать далее...

  • TMG 2010 - Установка Service Pack 2 в массиве NLB

    imageРассмотрим пример установки последнего пакета обновлений и исправлений Service Pack 2 для Forefront TMG 2010 в конфигурации с двумя серверами находящимися в отдельном массиве TMG (Standalone Array) и объединёнными в NLB-кластер.

    Список обновлений и исправлений вошедших в состав пакета можно найти по ссылке: KB2555840 - Microsoft Forefront Threat Management Gateway 2010 Service Pack 2

    Загрузить сам пакет: Microsoft Download Center -  Forefront TMG 2010 Service Pack 2

    В нашем случае нам понадобиться файл TMG-KB2555840-amd64-ENU.exe, который после установки изменит версию TMG с 7.0.9027.441 до 7.0.9193.500

    Версия 7.0.9027.441 соответствует Forefront TMG 2010 SP1 с установленным обновлением Software update 1 и является необходимым минимумом для установки Service Pack 2.

    В инструкции по установке Service Pack обозначен следующий обязательный порядок обновления серверов являющихся членами массива:

    1) Enterprise Management Servers (master and replicas);
    2)
    Array managers;
    3)
    Array members.

    В нашем примере массив является отдельным и не использует EMS и поэтому сначала мы должны обновить управляющий сервер массива (Array Manager) а затем остальные управляемые сервера – члены массива (Array Managed). Для того чтобы посмотреть текущие роли серверов в консоли Forefront TMG Management выберем ветку System > закладка Servers

     

    image

     

    В нашем случае управляющим сервером массива является сервер KOM-AD01-TMG01 и поэтому процесс установки SP2 мы должны начать на нём в первую очередь.

    Также следует обратить внимание на то, что в инструкции по установке Service Pack есть ещё одно требование, которое говорит о том, что первым в массиве должен обновляться сервер отчетности (Report Server). Чтобы определить какой сервер отвечает в нашем массиве за данную роль и при необходимости переопределить его, – в консоли выберем ветку Log & Reports и на закладке Reporting выберем задачу Configure Reporting Settings

     

    image

     

    Перед началом процедуры установки важно выполнить резервное копирование конфигурации массива и отдельных его членов. Сделать это с помощью задачи консоли Export (Back up) в корне дерева консоли

     

    image

     

    Выполнить операцию экспорта настроек необходимо отдельно на каждом сервере – члене массива. Также неплохо иметь традицию отдельного документирования всех выполненных настроек серверов TMG. Дополнительную информацию о резервном копировании и восстановлении конфигурации TMG можно найти в статье Microsoft Forefront TechCenter - Backing up and restoring the Forefront TMG configuration

    Есть еще одно предварительное требование, которое может показаться странным, но тем не менее оно есть в документации и про него не стоит забывать. Для того чтобы процесс обновления Forefront TMG Enterprise Edition (EMS) прошёл успешно, его необходимо выполнять из под учетной записи того пользователя, который производил развертывание сервера EMS.

    Итак, общий процесс обновления всего массива в нашем случае будет так:

    1) На сервере Array Manager (KOM-AD01-TMG01)

    • Останавливаем службу NLB (Drain and Stop)
    • Блокируем службу NLB (Suspend)
    • Устанавливаем SP2. При необходимости перезагружаем сервер.
    • Восстанавливаем состояние службы NLB (Resume)
    • Запускаем службу NLB (Start)

    2) Повторяем указанные действия на всех остальных серверах - членах массива (Array Managed).

    Поехали…

    Открываем консоль TMG на сервере управления, в ветке Monitoring на закладке Services выбираем службу Network Load Balancing для обновляемого сервера (KOM-AD01-TMG01) и выполняем задачу Drain and stop

     

    image

     

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

    Дожидаемся пока статус службы не изменится на соответствующий:

     

    image

     

    После этого закрываем консоль TMG и из под прав Администратора запускаем инсталлятор пакета обновлений. При запуске инсталлятор определит сервер управления конфигурацией массива

     

    image

     

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

     

    image

     

    В моём случае таким процессом оказался MonitoringHost.exe. Это один их процессов агента SCOM запускаемых службой System Center Management (HealthService). И поэтому перед продолжением установки обновления я зашёл в оснастку управления службами (services.msc) и остановил соответствующую службу, что привело к закрытию указанно процесса.

     

    image

     

    Дожидаемся успешного окончания процесса установки.

     

    image

     

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

     

    image

     

    Открываем обновлённую консоль TMG и в ветке System > закладка Servers проверяем версию обновлённого члена массива.

     

    image

     

    Обратите внимание на то, что после обновления управляемого сервера в консоли появляется предупреждение о том, что в нашем массиве есть не обновлённые члены.

    Переходим в консоли на ветку Monitoring и на закладке Services выбираем службу Network Load Balancing для уже обновлённого сервера (KOM-AD01-TMG01) и выполняем задачу восстановления службы Resume

     

    image

     

     

     

    В своём случае я обратил внимание на то, что операция Resume поменяла статус состояния службы на Stopped только со второй попытки.

     

    image

     

    Теперь запускаем службу задачей Start и ждём пока статус не измениться на Running. После этого удостоверимся в том, что все другие службы на обновлённом сервере находятся в запущенном состоянии и теперь можно приступать к обновлению второго сервера, являющегося рядовым управляемым членом массива. Для этого сразу выполним задачи Drain and stop и затем Suspend для его службы NLB.

     

    image

     

     

    После этого войдём на второй сервер и в оснастке управления службами остановим службу System Center Management  чтобы избежать предупреждений инсталлятора.

    Теперь можно запускать сам процесс установки обновления на втором сервере и после его успешного завершения, открыв обновлённую консоль TMG, проверяем версию и убеждаемся в том, что предупреждение о не обновлённых серверах из консоли исчезло.

     

    image

     

    Не забываем на втором сервере восстановить состояние службы агента SCOM а консоли TMG восстановить состояние службы NLB для обновлённого сервера

     

    image

     

    Затем запускаем службу NLB.

     

    image

     

    На этом общий процесс обновления массива можно считать законченным. А для того, чтобы убедиться в том, что все службы TMG на обоих обновлённых серверах самостоятельно адекватно стартуют при запуске системы, - можно по очереди перезагрузить оба сервера, если этого не делалось в процессе установки.

    Несмотря на то, что установка SP2 доступна и через клиента WSUS, я предпочёл мануальный способ инсталляции, так как он на мой взгляд является более осязаемым и в случае возможных проблем даёт понять на каком этапе процесса установки возникают эти проблемы.

    Источники информации:

  • Forefront TMG 2010 – Разрешение нестандартных туннелируемых портов

    Возникла необходимость использовать через TMG 2010 подключение к HTTPS узлу в интернете, использующему нестандартный порт (не 443). В настройке по умолчанию вэб-прокси TMG разрешает доступ только по порту 443. Для того чтобы изменить перечень разрешенных портов воспользуемся подключением к COM-объекту TMG с помощью PowerShell.

    Для того чтобы получить текущий список открытых туннелируемых портов, непосредственно на TMG сервере выполним PS скрипт:

    $ServerName = "MY-PROXY-SERVER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.TunnelPortRanges

    В первой строчке в переменной $ServerName укажите имя своего сервера TMG или имя массива TMG, если сервер является членом массива.


    Для того чтобы расширить список открытых туннелируемых портов, например 444 портом, выполним PS скрипт:

    $ServerName = "MY-PROXY-SERVER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.TunnelPortRanges.AddRange("SSL 444", 444, 444)

    $TMGObj.ApplyChanges()


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

    $ServerName = "MY-PROXY-SERVER"

    $FPCRoot = New-Object -comObject "FPC.Root"

    $TMGObj = $FPCRoot.Arrays.Connect($ServerName)

    $TMGObj.ArrayPolicy.WebProxy.TunnelPortRanges.Remove("SSL 444")

    $TMGObj.ApplyChanges()

    Дополнительные источники информации:

  • Forefront TMG 2010 - Отказ работы консоли после установки IE9

    После установки рекомендуемых обновлений с WSUS, которые включают в себя новую версию браузера IE9 может перестать корректно работать консоль управления Forefront TMG 2010 на базе MMC - Forefront TMG Management. При попытке перехода к любому разделу управления TMG консоль будет порождать ошибку типа:

    image

    Есть жёсткий метод решения проблемы – редактирование файла C:Program FilesMicrosoft Forefront Threat Management GatewayUI_HTMLsTabsHandlerTabsHandler.htc как это описано например здесь: Технический блог Евгения Протопопова - TMG 2010 Console Error

    Но можно избавиться от этой ошибки и более простым способом – изменением региональных настроек ОС. Открываем апплет изменения региональных настроек intl.cpl и на вкладке Formats сменить Format на English (United States)

    image

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