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