Invoke-PolicyEvaluation cmdlet

Invoke-PolicyEvaluation 是一个 SQL Server cmdlet,用于报告一组目标 SQL Server 对象是否符合一个或多个基于策略的管理策略中指定的条件。

使用 Invoke-PolicyEvaluation

Invoke-PolicyEvaluation 针对一组称为目标集的 SQL Server 对象评估一个或多个策略。 目标对象集来自目标服务器。 每个策略定义条件,这些条件是目标对象的允许状态。 例如, 可信数据库 策略指出,TRUSTWORTHY 数据库属性必须设置为 OFF。

-AdHocPolicyEvaluationMode 参数指定采取的操作:

检查
使用当前登录名的凭据报告目标对象的符合性状态。 不要重新配置任何对象。 这是默认设置。

CheckSqlScriptAsProxy
使用 ##MS_PolicyTSQLExecutionLogin## 代理登录的凭据报告目标对象的符合性状态。 不要重新配置任何对象。

配置
使用当前登录名的凭据报告目标对象的符合性状态。 重新配置不符合策略的任何可设置和确定性选项。

指定策略

如何指定策略取决于策略的存储位置。 策略可以存储两种格式:

  • 它们可以是存储在策略存储中的对象,例如数据库引擎的实例。 可以使用 SQLSERVER:\SQLPolicy 文件夹指定策略在策略存储区中的位置。 可以使用 Windows PowerShell cmdlet 根据其属性筛选输入策略,例如使用 Where-Object 来筛选策略类别或 Get-Item 来筛选策略名称。

  • 它们可以导出为 XML 文件。 可以使用文件系统驱动器(如 D:)指定 XML 文件的位置。 可以使用 Windows PowerShell cmdlet(如 Where-Object)来筛选其文件属性上的策略,例如文件名。

如果策略保存在策略存储库中,则必须传入一组 PSObjects,这些对象指向待评估的策略。 这通常是通过管道将 cmdlet(如 Get-Item)的输出传递给 Invoke-PolicyEvaluation 来完成的,并且不需要指定 -Policy 参数。 例如,如果已将Microsoft最佳做法策略导入数据库引擎实例,此命令将评估 数据库状态 策略:

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

此示例演示如何使用 Where-Object 根据策略存储中的 PolicyCategory 属性筛选多个策略。 Invoke-PolicyEvaluationWhere-Object 的管道输出中使用对象。

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 路径的当前设置。 例如,此命令对您登录的默认数据库执行评估,以检查随 SQL Server 安装的 Microsoft最佳实践策略:

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

此命令执行相同的作,只使用当前的 sqlps 路径来建立策略 XML 文件的位置:

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

此示例演示如何使用 Get-ChildItem cmdlet 检索多个策略 XML 文件,并将对象通过管道传递到 Invoke-PolicyEvaluation

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

指定目标集合

使用三个参数指定目标对象集:

  • -TargetServerName 指定包含目标对象的 SQL Server 实例。 可以在字符串中指定信息,该字符串使用为类的 SqlConnection ConnectionString 属性定义的格式。 可以使用 SqlConnectionStringBuilder 该类生成格式正确的连接字符串。 还可以创建一个 SqlStoreConnection 对象并将其传递给 -TargetServer。 如果提供仅具有服务器名称的字符串, Invoke-PolicyEvaluation 将使用 Windows 身份验证连接到服务器。

  • -TargetObjects 采用对象或对象数组,这些对象表示目标集中的 SQL Server 对象。 例如,可以创建要传入 -TargetObjectsDatabase类对象的数组。

  • -TargetExpressions 接受一个包含查询表达式的字符串,该表达式用于指定目标集中的对象。 查询表达式采用由“/”字符分隔的节点形式。 每个节点采用 ObjectType[Filter] 格式。 对象类型是 SQL Server 管理对象 (SMO) 对象层次结构中的一个对象。 筛选器是一个表达式,用于筛选该节点上的对象。 有关详细信息,请参阅 Query Expressions and Uniform Resource Names

指定 -TargetObjects-TargetExpression,而不是同时指定这两者。

此示例使用 Sfc.SqlStoreConnection 对象指定目标服务器:

sl "C:\Program Files\Microsoft SQL Server\120\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\120\Tools\Policies\DatabaseEngine\1033"  
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MyComputer" -TargetExpression "Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks2012']"  

评估分析服务策略

若要针对 Analysis Services 实例评估策略,必须将程序集加载并注册到 PowerShell 中,使用 Analysis Services 连接对象创建变量,并将变量传递给 -TargetObject 参数。 此示例展示了如何评估 Analysis Services 的最佳实践表面区域配置策略:

sl "C:\Program Files\Microsoft SQL Server\120\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 策略,必须将程序集加载并注册到 PowerShell 中,使用 Reporting Services 连接对象创建变量,并将该变量传递给 -TargetObject 参数。 此示例展示如何评估 Reporting Services 的最佳实践表面区域配置策略。

sl "C:\Program Files\Microsoft SQL Server\120\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 参数指定 cmdlet 改为生成 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  

另请参阅

使用数据库引擎命令集