Invoke-PolicyEvaluation コマンドレット
Invoke-PolicyEvaluation は、SQL Server オブジェクトのターゲット セットが 1 つ以上のポリシー ベースの管理ポリシーで指定された条件に準拠しているかどうかを報告するSQL Serverコマンドレットです。
Invoke-PolicyEvaluation の使用
Invoke-PolicyEvaluation は、対象セットと呼ばれる SQL Server オブジェクトのセットに対し、1 つまたは複数のポリシーを評価します。 対象オブジェクトのセットは、ターゲット サーバーから取得されます。 それぞれのポリシーにより、対象オブジェクトに許可される状態を示す条件が定義されます。 たとえば、 Trustworthy Database ポリシーは、Trustworthy データベース プロパティを OFF に設定する必要があることを表します。
-AdHocPolicyEvaluationMode パラメーターは、実行するアクションを指定します。
チェック
現在のログインの資格情報を使用して、対象オブジェクトの準拠状態を報告します。 オブジェクトの再構成は行いません。 これが既定の設定です。
CheckSqlScriptAsProxy
##MS_PolicyTSQLExecutionLogin## プロキシ ログインの資格情報を使用して、対象オブジェクトの準拠状態を報告します。 オブジェクトの再構成は行いません。
構成
現在のログインの資格情報を使用して、対象オブジェクトの準拠状態を報告します。 ポリシーに準拠していない、設定可能で決定的なオプションを再構成します。
ポリシーの指定
ポリシーを指定する方法は、ポリシーがどこに格納されているかによって異なります。 ポリシーは、次のように 2 つの形式で格納できます。
ポリシー ストア (たとえばデータベース エンジンのインスタンス) に格納されたオブジェクト。 SQLSERVER:\SQLPolicy フォルダーを使用して、ポリシー ストア内のポリシーの場所を指定できます。 Windows PowerShell コマンドレットを使用して、入力ポリシーをそのプロパティに基づいてフィルター選択できます。たとえば、Where-Object を使用するとポリシーのカテゴリに基づいてフィルター処理でき、Get-Item を使用するとポリシー名に基づいてフィルター処理できます。
ポリシーは、XML ファイルとしてエクスポートできます。 ファイル システム ドライブ (たとえば D:) を使用して、XML ファイルの場所を指定できます。 Where-Object などの Windows PowerShell コマンドレットを使用して、ファイル名などのファイル プロパティに基づいてポリシーをフィルター処理できます。
ポリシーがポリシー ストアに格納されている場合は、評価するポリシーを示す 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 プロパティに基づいてフィルター処理しています。 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 と共にインストールされたマイクロソフトのベスト プラクティス ポリシーの 1 つを、ログインの既定のデータベースに対して評価します。
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 コマンドレットを使用して、複数のポリシー 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"
対象セットの指定
3 つのパラメーターを使用して、対象オブジェクトのセットを指定します。
-TargetServerName は、対象オブジェクトを格納している SQL Server のインスタンスを指定します。 情報は、 SqlConnection クラスの ConnectionString プロパティに定義されている形式を使用する文字列に指定できます。 SqlConnectionStringBuilder クラスを使用して、適切な形式の接続文字列を作成することができます。 また、 SqlStoreConnection オブジェクトを作成し、それを -TargetServerのパイプ出力からのオブジェクトが消費されます。 サーバー名のみの文字列を渡した場合、 Invoke-PolicyEvaluation は、Windows 認証を使用してサーバーに接続します。
-TargetObjects は、1 つのオブジェクト、または対象セット内の SQL Server オブジェクトを表すオブジェクトの配列を受け取ります。 たとえば、 Database クラス オブジェクトの配列を作成し、 -TargetObjectsのパイプ出力からのオブジェクトが消費されます。
-TargetExpressions は、対象セット内のオブジェクトを指定するクエリ式が含まれた文字列を受け取ります。 クエリ式には、ノードを '/' 文字で区切って指定します。 各ノードは、ObjectType[Filter] 形式で記述します。 オブジェクト型は、SQL Server管理オブジェクト (SMO) オブジェクト階層のオブジェクトの 1 つです。 Filter は、そのノードのオブジェクトをフィルター処理する式です。 詳細については、「 クエリ式と Uniform Resource Name」を参照してください。
-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 ポリシーの評価
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 パラメーターを使用すると、詳細なレポートを XML ファイルとして生成できます。 Invoke-PolicyEvaluation では、SML-IF (Systems Modeling Language Interchange Format) リーダーでファイルを読むことができるように、SML-IF スキーマが使用されます。
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Invoke-PolicyEvaluation -Policy "Datbase Status" -TargetServer "MYCOMPUTER" -OutputXML > C:\MyReports\DatabaseStatusReport.xml