Анализ поля RelayAgentInformation в логе DHCP сервиса. Часть 2


Update: скрипт опубликован в Script Senter Decode DHCP 82 Option (RelayAgentInformation)

В продолжении темы Анализ поля RelayAgentInformation в логе DHCP сервиса. В той статье была сформулирована задача и приведена заготовка для её решения путём расшифровки поля DHCP Option 82, которое содержится в журналах Windows DHCP серверов в столбце RelayAgentInformation.

В этой статье публикую полный скрипт, который считывает журналы со всех DHCP серверов зарегистрированных в Active Directory и помещает в файл DHCPHistory.txt полный отчёт содержащий сведения о точке подключения клиента: коммутатор, слот, порт, VLAN. Читать далее

Реклама

Анализатор скриптов Powershell


Появилась предварительная версия 2.0 анализатора скриптов PowerShell Script Analyzer: Static Code analysis for Windows PowerShell scripts & modules.

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

Receive connectors: Hub transport или Frontend Transport?


Сразу скажу, что речь идёт исключительно про Exchange Server 2013 (и раздельных CAS и Mailbox ролях). Недавно на форумах TechNet-RU увидел рекомендацию одного из участников по созданию анонимного коннектора получения (receive connector) с привязкой к сервису Hub transport – фактически к серверу MailBox. Эту рекомендацию следом повторил другой участник форума. Это меня озадачило (почему опишу ниже) и я решил посмотреть, что по этому поводу рекомендуетTechNet. К моему огромному удивлению на TechNet действительно обнаружилось описание процедуры создания коннектора с привязкой к сервису Hub transport. Читать далее

Exchange Server и обновления безопасности MS15-011 и MS15-014


Только что выпущены обновления безопасности MS15-011 & MS15-014
и возникает вопрос о том, какое влияние они могут оказать на Exchange Server 2010/2013. Читать далее

Powershell – превратности производительности


Не так давно я публиковал скрипт для расшифровки опции 82 из DHCP лога Windows Server 2012/R2. Эта заготовка требовала обертки для полноценного использования на практике. Такой скрипт был написан, и в процессе его отладки и оптимизации выяснились некоторые интересные факты о производительности Powershell.

Лог файл DHCP в лога Windows Server 2012/R2 имеет оригинальный формат: в начале идет текст с описанием опций и только потом основная часть лога почти в формате CSV. (Почему «почти» — об этом в другой раз.)

Поэтому для считывания файла журнала первоначально была использована конструкция, которая пропускала первые 33 описательные строки:

    
    $content = Get-Content $logfileName | Select-Object -Skip 33 | 
            # Convert from CSV to PSObject
            ConvertFrom-Csv -Header $Header | 
            # Filter only "Renew" rows and "Assign" rows
            ? {$_.Id -eq "11" -or $_.Id -eq "10"} |
            % { $_.sortDateTime = ([datetime]"$($_.Date) $($_.Time)").ToString("yyyyMMddHHmmss"); $_ } |
            % { if ( $_.sortDateTime -gt $script:UnuqueRows[$_.'MAC Address'].sortDateTime ) 
       { … }
}

Эта конструкция в моём примере выполнялась за 22 секунды для всего набора журналов (14 штук).

Только на само считывание

    $content = Get-Content $logfileName | Select-Object -Skip 33 | 

затрачивалось 8 секунд! Учитывая очень скромный размер журналов, участвующих в тесте, это было явно расточительно.

Тут появилась идея попробовать командлет Select-String, чтобы убить сразу трёх зайцев: во-первых, избавиться от явно медленной конструкции Select -Skip 33, во-вторых, сразу отфильтровать только нужные строки (ID=10 и ID=11) и как следствие этого избавиться от лишних вызовов ConvertFrom-Csv и в-третьих, всё вместе уменьшало длину конвейера на три шага.

В результате только считывание:

    $content = Select-String -Path $logfileName -Pattern "^(10|11)," | 

стало занимать 2 секунды вместо 8 – в четыре раза увеличилось быстродействие!

Вся конструкция стала выглядеть так:

    $content = Select-String -Path $logfileName -Pattern "^(10|11)," | Select -ExpandProperty Line |
            # Convert from CSV to PSObject
            ConvertFrom-Csv -Header $Header | 
            % { $_.sortDateTime = ([datetime]"$($_.Date) $($_.Time)").ToString("yyyyMMddHHmmss"); $_ } |
            % { if ( $_.sortDateTime -gt $script:UnuqueRows[$_.'MAC Address'].sortDateTime ) 
       { … }
}

Оказалось, что последние для шага конвейера можно заменить одним. Финальный вариант:

    $content = Select-String -Path $logfileName -Pattern "^(10|11)," | Select -ExpandProperty Line |
            # Convert from CSV to PSObject
        ConvertFrom-Csv -Header $Header | 
         % { $_.sortDateTime = ([datetime]"$($_.Date) $($_.Time)").ToString("yyyyMMddHHmmss")
               if ( $_.sortDateTime -gt $script:UnuqueRows[$_.'MAC Address'].sortDateTime ) 
   { … }
}

показал прекрасное быстродействие: 7 секунд вместо первоначальных 22-х – почти в три раза возросла производительность скрипта даже без оптимизации основной функции расшифровки DHCP опции 82!

Эффект оптимизации будет ещё более ощутим на DHCP журналах большого размера.

Office 2010 Filter pack SP2 для Exchange Server 2010


В отличие от Exchange Server 2013 индексация в предыдущей версии зависит от Office Filter Pack. Это необходимый компонент для установки Exchange Server 2010. Кроме того что его надо обязательно поставить, очень желательно его обновлять. Так на текущий момент нужно поставить Office 2010 Filter pack SP2. В частности это увеличивает производительность индексации почтовых баз.

Exchange Server 2013 – управление нагрузкой только через техническую поддержку


Exchange Server 2013 изначально спроектирован под обеспечение высокой нагрузки – для обслуживания запросов большого количество пользователей. Для равномерного распределения ресурсов между пользователями, а также для выделения достаточных ресурсов системным процессам, Exchange Server 2013 базируется на специальной подсистеме управления нагрузкой – Workload Management (WLM). Читать далее