Использование командлета Invoke-PolicyEvaluation
Invoke-PolicyEvaluation является командлетом командной оболочки SQL Server для Windows PowerShell, который сообщает, соответствует ли набор целей объектов SQL Server условиям, заданным в одной или нескольких политиках в системе управления на основе политик.
Использование Invoke-PolicyEvaluation
Командлет Invoke-PolicyEvaluation оценивает одну или несколько политик по набору объектов SQL Server, который называется целевым. Набор целевых объектов поступает от целевого сервера. Каждая политика определяет условия, которые являются разрешенными состояниями для целевых объектов. Например, политика Trustworthy Database указывает, что свойству базы данных TRUSTWORTHY должно быть задано значение OFF.
Параметр -AdHocPolicyEvaluationMode указывает предпринимаемое действие.
Check
Сообщает состояние соответствия целевых объектов при помощи учетных данных текущего имени входа. Не проводите повторную настройку каких-либо объектов. Это параметр по умолчанию.CheckSqlScriptAsProxy
Сообщает состояние соответствия целевых объектов при помощи учетных данных имени входа-посредника ##MS_PolicyTSQLExecutionLogin##. Не проводите повторную настройку каких-либо объектов.Configure
Сообщает состояние соответствия целевых объектов при помощи учетных данных текущего имени входа. Измените все настраиваемые и детерминированные параметры, которые не соответствуют политикам.
Задание политик
Процедура задания политики зависит от того, где она хранится. Политики могут храниться в двух форматах.
Они могут быть объектами, находящимися в хранилище политик, таком как экземпляр ядра СУБД. Для указания места хранения политик в хранилище политик можно использовать папку SQLSERVER:\SQLPolicy. При помощи командлетов Windows PowerShell можно фильтровать входные политики на основе их свойств, например использовать командлет Where-Object, чтобы фильтровать по категории политики, или Get-Item, чтобы фильтровать по имени политики.
Политики можно экспортировать как XML-файлы. Можно использовать диск файловой системы, например D:, чтобы указать место для размещения XML-файлов. При помощи командлетов Windows PowerShell, таких как Where-Object, можно фильтровать политики по таким свойствам файла, как имя.
Если политики хранятся в хранилище политик, необходимо передавать набор PSObjects, указывающий на те политики, которые должны быть оценены. Обычно это делается путем направления выходных данных командлета, например Get-Item, в командлет Invoke-PolicyEvaluation, при этом задавать параметр -Policy не требуется. Например, если политики «Microsoft Best Practices» были импортированы в экземпляр ядра СУБД, то оценивать политику 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"
cgi | 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\1033\Database Status.xml" -TargetServerName "MYCOMPUTER"
Эта команда делает то же самое, только в ней для определения местоположения XML-файла политики используется текущий путь sqlps:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"
В этом примере показано использование командлета Get-ChildItem для извлечения нескольких XML-файлов политик и направления объектов в командлет Invoke-PolicyEvaluation:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
cgi "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]. Тип объекта — это один из объектов в иерархии объектов SMO. Фильтр — это выражение, которое фильтрует объекты в этом узле. Дополнительные сведения см. в разделе Выражения запроса и уникальные имена ресурсов.
Можно указать параметр -TargetObjects или -TargetExpression, но не оба.
В этом примере для указания целевого сервера используется объект Sfc.SqlStoreConnection:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
$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\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MyComputer" -TargetExpression "Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks']"
Оценка политик служб Analysis Services
Чтобы оценивать политики по экземпляру служб Analysis Services, необходимо загрузить сборку в sqlps. и зарегистрировать ее, создать переменную с объектом соединения служб Analysis Services и передать эту переменную в параметр -TargetObject. В этом примере показана оценка политики настройки контактной зоны «Best Practices» для служб Analysis Services:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\AnalysisServices\1033"
[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. В этом примере показана оценка политики настройки контактной зоны «Best Practices» для служб Reporting Services:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\ReportingServices\1033"
[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