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='AdventureWorks2012']"
Оценка политик служб Analysis Services
Для оценки политик по отношению к экземпляру служб Analysis Services необходимо загрузить и зарегистрировать сборку в PowerShell, создать переменную с использованием объекта соединения служб 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 необходимо загрузить и зарегистрировать сборку в PowerShell, создать переменную с помощью объекта соединения Службы 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