Использование командлета Invoke-PolicyEvaluation

Invoke-PolicyEvaluation — это командлет SQL Server, который определяет, соответствует ли набор целей объектов SQL Server условиям, заданным в одной или нескольких политиках в системе управления на основе политик.

Использование Invoke-PolicyEvaluation

Командлет Invoke-PolicyEvaluation оценивает одну или несколько политик по набору объектов SQL Server, который называется целевым. Набор целевых объектов поступает от целевого сервера. Каждая политика определяет условия, которые являются разрешенными состояниями для целевых объектов. Например, политика Trustworthy Database указывает, что свойство базы данных TRUSTWORTHY должно быть установлено в значение OFF.

Параметр -AdHocPolicyEvaluationMode задает выполняемые действия.

  • Проверка
    Сообщает состояние соответствия целевых объектов при помощи учетных данных текущего имени входа. Не проводите повторную настройку каких-либо объектов. Это параметр по умолчанию.

  • CheckSqlScriptAsProxy
    Сообщает о состоянии соответствия целевых объектов с использованием учетных данных имени входа-посредника ##MS_PolicyTSQLExecutionLogin##. Не проводите повторную настройку каких-либо объектов.

  • Настройка
    Сообщает состояние соответствия целевых объектов при помощи учетных данных текущего имени входа. Измените все настраиваемые и детерминированные параметры, которые не соответствуют политикам.

Задание политик

Процедура задания политики зависит от того, где она хранится. Политики могут храниться в двух форматах.

  • Они могут быть объектами, находящимися в хранилище политик, таком как экземпляр ядра СУБД. Для указания места хранения политик в хранилище политик можно использовать папку SQLSERVER:\SQLPolicy. При помощи командлетов Windows PowerShell можно фильтровать входные политики на основе их свойств, например использовать командлет Where-Object, чтобы фильтровать по категории политики, или Get-Item, чтобы фильтровать по имени политики.

  • Политики можно экспортировать как XML-файлы. Можно использовать диск файловой системы, например D:, чтобы указать место для размещения XML-файлов. При помощи командлетов Windows PowerShell, таких как Where-Object, можно фильтровать политики по таким свойствам файла, как имя.

Если политики хранятся в хранилище политик, необходимо передавать набор PSObjects, указывающий на те политики, которые должны быть оценены. Обычно это делается перенаправлением выходных данных командлета, например Get-Item, в командлет Invoke-PolicyEvaluation, при этом указание параметра -Policy не требуется. Например, если политики «Рекомендовано Майкрософт» были импортированы в экземпляр ядра СУБД, то оценивать политику Database Status будет следующая команда:

sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Get-Item "Database Status" | Invoke-PolicyEvaluation -TargetServerName "MYCOMPUTER"

В этом примере показано использование командлета Where-Object для фильтрации нескольких политик из хранилища политик исходя из их свойства PolicyCategory. Объекты из перенаправленного вывода командлета Where-Object принимаются командлетом Invoke-PolicyEvaluation.

sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
gci | Where-Object {$_.PolicyCategory -eq "Microsoft Best Practices: Maintenance"} | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"

Если политики хранятся в виде XML-файлов, то необходимо с помощью параметра -Policy указывать пути и имя для каждой политики. Если не указать путь в параметре -Policy, то командлет Invoke-PolicyEvaulation будет использовать текущее значение пути sqlps. Например, эта команда оценивает одну из политик «Microsoft Best Practice», установленных с SQL Server, по базе данных по умолчанию для этого имени входа:

Invoke-PolicyEvaluation -Policy "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1049\Database Status.xml" -TargetServerName "MYCOMPUTER"

Эта команда делает то же самое, но в ней для определения местоположения XML-файла политики используется текущий путь sqlps:

sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1049"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"

В этом примере показано использование командлета Get-ChildItem для извлечения нескольких XML-файлов политик и передачи объектов в командлет Invoke-PolicyEvaluation:

sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1049"
gci "Database Status.xml", "Trustworthy Database.xml" | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"

Указание набора целей

Для указания набора целевых объектов используется три параметра.

  • Параметр -TargetServerName указывает экземпляр SQL Server, содержащий целевые объекты. Сведения можно указать в строке, для которой используется формат, определенный для свойства ConnectionString класса SQLConnection. Для построения правильно форматированной строки подключения можно воспользоваться классом SqlConnectionStringBuilder. Можно также создать объект SqlStoreConnection и передать его в параметр -TargetServer. При передаче строки, которая содержит только имя сервера, командлет Invoke-PolicyEvaluation для подключения к серверу использует проверку подлинности Windows.

  • Параметр -TargetObjects принимает объект или массив объектов, которые представляют объекты SQL Server в наборе целей. Например, можно создать массив объектов класса Database для передачи параметру -TargetObjects.

  • Параметр -TargetExpressions принимает строку, содержащую выражение запроса, которое указывает объекты в наборе целей. Это выражение запроса состоит из узлов, разделенных символом «/». Каждый узел имеет вид ObjectType[Filter]. Тип объекта — это один из объектов в иерархии управляющих объектов SQL Server (SMO). Фильтр — это выражение, которое фильтрует объекты в этом узле. Дополнительные сведения см. в разделе Выражения запросов и уникальные имена ресурсов.

Указывайте либо -TargetObjects, либо -TargetExpression, но не оба параметра одновременно.

В этом примере для указания целевого сервера используется объект Sfc.SqlStoreConnection:

sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1049"
$conn = New-Object Microsoft.SqlServer.Management.Sdk.Sfc.SqlStoreConnection("server='MYCOMPUTER';Trusted_Connection=True")
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName $conn

В этом примере для указания базы данных для оценки используется параметр -TargetExpression:

sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1049"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MyComputer" -TargetExpression "Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2008R2']"

Оценка политик служб Analysis Services

Чтобы оценивать политики по экземпляру служб Службы Analysis Services, необходимо загрузить сборку в sqlps и зарегистрировать ее, создать переменную с объектом соединения служб Analysis Services и передать эту переменную в параметр -TargetObject. В этом примере показана оценка политики настройки контактной зоны «Рекомендации» для служб Службы Analysis Services:

sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\AnalysisServices\1049"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.AnalysisServices")
$SSASsvr = new-object Microsoft.AnalysisServices.Server
$SSASsvr.Connect("Data Source=Localhost")
Invoke-PolicyEvaluation -Policy "Surface Area Configuration for Analysis Services Features.xml" -TargetObject $SSASsvr

Оценка политик служб Reporting Services

Для оценки политики служб Службы Reporting Services необходимо загрузить сборку в sqlps, зарегистрировать ее, создать переменную с объектом соединения Службы Reporting Services и передать эту переменную параметру -TargetObject. В этом примере показана оценка политики настройки контактной зоны «Рекомендации» для служб Службы Reporting Services:

sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\ReportingServices\1049"
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Dmf.Adapters")
$SSRSsvr = new-object Microsoft.SqlServer.Management.Adapters.RSContainer('MyComputer')
Invoke-PolicyEvaluation -Policy "Surface Area Configuration for Reporting Services 2008 Features.xml" -TargetObject $SSRSsvr

Форматирование выходных данных

По умолчанию выходные данные командлета Invoke-PolicyEvaluation отображаются в окне командной строки в виде краткого отчета в удобной для чтения форме. С помощью параметра -OutputXML можно задать формирование командлетом подробного отчета в виде XML-файла. Командлет Invoke-PolicyEvaluation использует схему SML-IF, поэтому такой файл может быть считан модулем чтения SML-IF.

sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Invoke-PolicyEvaluation -Policy "Datbase Status" -TargetServer "MYCOMPUTER" -OutputXML > C:\MyReports\DatabaseStatusReport.xml

См. также

Основные понятия