Invoke-PolicyEvaluation 是 SQL Server Cmdlet,可報告一組目標 SQL Server 物件是否符合一或多個原則式管理原則中指定的條件。
使用 Invoke-PolicyEvaluation
Invoke-PolicyEvaluation 會針對一組稱為目標集的 SQL Server 對象評估一或多個原則。 一組目標對象來自目標伺服器。 每個原則都會定義條件,這些條件是目標對象的允許狀態。 例如, Trustworthy Database 原則指出 TRUSTWORTHY 資料庫屬性必須設定為 OFF。
-AdHocPolicyEvaluationMode 參數會指定所採取的動作:
檢查
使用目前登入的認證報告目標物件的合規性狀態。 請勿重新設定任何物件。 這是預設設定。
CheckSqlScriptAsProxy
使用 ##MS_PolicyTSQLExecutionLogin## Proxy 登入的認證,報告目標對象的合規性狀態。 請勿重新設定任何物件。
設定
使用目前登入的認證報告目標物件的合規性狀態。 重新設定不符合原則的任何可設定且具決定性的選項。
指定政策
您指定原則的方式取決於原則的儲存位置。 原則可以儲存兩種格式:
這些物件可以是儲存在原則存放區中的物件,例如 Database Engine 的實例。 您可以使用 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-PolicyEvaluation 會取用來自 Where-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 實例。 您可以在字串中指定資訊,該字串會使用針對 類別的 ConnectionString 屬性 SqlConnection 所定義的格式。 您可以使用 類別 SqlConnectionStringBuilder 來建置格式正確的連接字串。 您也可以建立 SqlStoreConnection 物件,並將其傳遞至 -TargetServer。 如果您提供只有伺服器名稱的字串, Invoke-PolicyEvaluation 會使用 Windows 驗證來連線到伺服器。
-TargetObjects 會取得對象或物件陣列,代表目標集中的 SQL Server 物件。 例如,您可以建立類別對象的陣列 Database ,以傳入 -TargetObjects。
-TargetExpressions 會採用包含查詢表達式的字串,以指定目標集中的物件。 查詢表達式的格式為以 『/』 字元分隔的節點形式。 每個節點都是 ObjectType[Filter] 格式。 物件類型是 SQL Server 管理物件 (SMO) 物件階層中的其中一個物件。 Filter 是篩選該節點上對象的表達式。 如需詳細資訊,請參閱 查詢表達式和統一資源名稱。
指定 -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 政策
若要評估 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