sergey vasin

The IT blog

Используем PowerShell-модуль Best Practices для конфигурации серверов – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об использовании PowerShell-модуля для аудита конфигурации серверов.

Исследуем модуль Best Practices

Сегодня я решил поиграться с модулем Best Practices на моем контроллере домена, работающем на Windows Server 2012. Для определения доступных командлетов я использовал команду Get-Command с указанием модуля Best Practices.

PS C:\> Get-Command -Module bestpractices

CommandType Name ModuleName

———— —- ———-

Cmdlet Get-BpaModel BestPractices

Cmdlet Get-BpaResult BestPractices

Cmdlet Invoke-BpaModel BestPractices

Cmdlet Set-BpaResult BestPractices

Сначала определим доступные модели

Первое, что нужно сделать – это определить доступные модели Best Practices. Это можно сделать, запустив командлет Get-BPFModel без каких-либо параметров. Он возвращает всю информацию, которую может найти.

PS C:\> Get-BpaModel

Id : Microsoft/Windows/ADRMS

Company : Microsoft Corporation

Name : RightsManagementServices

Version : 1.0

LastScanTime : Never

LastScanTimeUtcOffset :

SubModels :

Parameters :

ModelType : SingleMachine

SupportedConfiguration :

Id : Microsoft/Windows/CertificateServices

Company : Microsoft Corporation

Name : CertificateServices

Version : 1.0

LastScanTime : Never

LastScanTimeUtcOffset :

SubModels :

Parameters :

ModelType : SingleMachine

SupportedConfiguration : Win8

Для меня наибольшую ценность представляют поля ID и LastScanTime. Они так важны потому, что командлет Invoke-BPAModel требует указания ID, и кроме того я хочу знать, когда последний раз (если вообще) запускалась определенная модель.

PS C:\> Get-BpaModel | select id, lastscantime

Id                                         LastScanTime

—                                         ————

Microsoft/Windows/ADRMS                    Never

Microsoft/Windows/CertificateServices      Never

Microsoft/Windows/DHCPServer               Never

Microsoft/Windows/DirectoryServices        11/18/2012 11:57:12 AM

Microsoft/Windows/DNSServer                Never

Microsoft/Windows/FileServices             Never

Microsoft/Windows/Hyper-V                  Never

Microsoft/Windows/LightweightDirectoryS… Never

Microsoft/Windows/NPAS                     Never

Microsoft/Windows/RemoteAccessServer       Never

Microsoft/Windows/TerminalServices         Never

Microsoft/Windows/UpdateServices           Never

Microsoft/Windows/VolumeActivation         Never

Microsoft/Windows/WebServer                Never

Чтобы сконцентрироваться на какой-то одной модели, используете ее ID из вывода выше. Чтобы избежать долгого ввода, я воспользовался буфером обмена. Как видно из примера ниже, командлет Invoke-BPAModel не поддерживает использование символов подстановки.

PS C:\> Invoke-BpaModel -Id *dir*

Invoke-BpaModel: There has been a Best Practice Analyzer error for Model Id ‘*dir*’. The Model is not installed.

At line:1 char:1

+ Invoke-BpaModel -Id *dir*

+ ~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : ResourceUnavailable: (:) [Invoke-BpaModel], CommandLetException

+ FullyQualifiedErrorId : ModelNotFound,Microsoft.BestPractices.Cmdlets.RunScan Command

Итак, я воспользовался буфером обмена для указания ID BPA-модели Directory Services в командлете Invoke-BPAModel.

PS C:\> Invoke-BpaModel -Id Microsoft/Windows/DirectoryServices

ModelId : Microsoft/Windows/DirectoryServices

SubModelId :

Success : True

ScanTime : 11/18/2012 12:28:33 PM

ScanTimeUtcOffset : -05:00:00

Detail : {DC1, DC1}

Получаем данные из Анализатора соответствия рекомендациям (Best Practices Analyzer)

Для получения результатов после запуска командлета Invoke-BPAModel нужно воспользоваться командой Get-BPAResults.

Get-BpaResult -Id Microsoft/Windows/DirectoryServices

Получаемая информация довольно обширная, и если ее не фильтровать, она может выходить страница за страницей. Это потому, что командлет предоставляет множество информации о каждой проверке. Результаты команды и два первых теста приведены на рисунке.

01

Ну, я может и не эксперт по анализатору соответствия рекомендациям, но я знаю PowerShell. И я могу привести вывод в более читаемый вид. Для начала я передам результаты командлету Group-Object и отсортирую по количеству. Таким образом я получу общее представление об результатых проверки.

PS C:\> Get-BpaResult -Id Microsoft/Windows/DirectoryServices | group severity -NoElement | sort count

Count Name

—— —-

1 Error

8 Warning

34 Information

Все не так уж и плохо. Пожалуй, сначала я посмотрю на ошибки. Я отфильтрую их посредством командлета Where-Object. Так как я работаю на Windows Server 2012, я использую Windows PowerShell 3.0 и могу воспользоваться новым синтаксисом этой команды.

Get-BpaResult -Id Microsoft/Windows/DirectoryServices | where severity -eq error

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

02

После просмотра его содержимого, я пришел к выводу, что больше всего меня интересуют поля Title, Impact и Resolution. Исправленный вывод приведен на рисунке.

03

Из результатов прошлой команды, в которой я группировал результаты по полю severity, я знаю, что кроме ошибки у меня есть еще 8 предупреждений (warning). Теперь я хочу просмотреть их. Я нажимаю кнопку со стрелкой вверх и заменяю слово error на warning.

Get-BpaResult -Id Microsoft/Windows/DirectoryServices | where severity -eq warning | fl title, impact, Resolution

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

PS C:\> Get-BpaResult -Id Microsoft/Windows/DirectoryServices | group category -NoElement

Count Name

—— —-

42 Configuration

1 Operation

Если меня заинтересует, что относится к категории operation, я воспользуюсь следующей командой.

Get-BpaResult -Id Microsoft/Windows/DirectoryServices | where category -eq ‘operation’

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

Get-BpaResult -Id Microsoft/Windows/DirectoryServices | where severity -eq warning | fl title

Команда и ее результаты приведены на рисунке.

04

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

PS C:\> Get-BpaResult -Id Microsoft/Windows/DirectoryServices | ? { $_.title -notmatch ‘backed up’ -AND $_.severity -eq ‘warning’} | select title

Title

——

All domains should have at least two domain controllers for redundancy

All OUs in this domain should be protected from accidental deletion

The domain controller dc1.nwtraders.msft should comply with the recommended best …

Естественно это не вся информация по работе с модулем Best Practices. Кроме того, вы можете загрузить дополнительные модули для анализатора соответствия рекомендациям. Но на сегодня все.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/06/use-the-powershell-best-practices-module-to-configure-servers.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Декабрь 26, 2012 в 16:31

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s