Invoke-PolicyEvaluation コマンドレットの使用
Invoke-PolicyEvaluation は、Windows PowerShell 用 SQL Server コマンド シェルのコマンドレットです。このコマンドレットは、対象となる SQL Server オブジェクトのセットが、1 つまたは複数のポリシー ベースの管理ポリシーで指定された条件に準拠しているかどうかを報告します。
Invoke-PolicyEvaluation の使用
Invoke-PolicyEvaluation は、対象セットと呼ばれる SQL Server オブジェクトのセットに対し、1 つまたは複数のポリシーを評価します。対象オブジェクトのセットは、対象サーバーから取得されます。それぞれのポリシーにより、対象オブジェクトに許可される状態を示す条件が定義されます。たとえば、Trustworthy Database ポリシーは、Trustworthy データベース プロパティを OFF に設定する必要があることを表します。
-AdHocPolicyEvaluationMode パラメータは、実行するアクションを指定します。
Check
現在のログインの資格情報を使用して、対象オブジェクトの準拠状態を報告します。オブジェクトの再構成は行いません。これは既定の設定です。CheckSqlScriptAsProxy
##MS_PolicyTSQLExecutionLogin## プロキシ ログインの資格情報を使用して、対象オブジェクトの準拠状態を報告します。オブジェクトの再構成は行いません。Configure
現在のログインの資格情報を使用して、対象オブジェクトの準拠状態を報告します。ポリシーに準拠していない、設定可能で決定的なオプションを再構成します。
ポリシーの指定
ポリシーを指定する方法は、ポリシーがどこに格納されているかによって異なります。ポリシーは、次のように 2 つの形式で格納できます。
ポリシーは、オブジェクトとしてポリシー ストアに格納できます (たとえばデータベース エンジンのインスタンスなど)。SQLSERVER:\SQLPolicy フォルダを使用して、ポリシー ストア内のポリシーの場所を指定できます。Windows PowerShell コマンドレットを使用して、入力ポリシーをプロパティに基づいてフィルタ選択することもできます。たとえば、Where-Object を使用するとポリシーのカテゴリに基づいてフィルタ処理でき、Get-Item を使用するとポリシー名に基づいてフィルタ処理できます。
ポリシーは、XML ファイルとしてエクスポートできます。ファイル システム ドライブ (たとえば D:) を使用して、XML ファイルの場所を指定できます。Where-Object などの Windows PowerShell コマンドレットを使用して、ファイル名などのファイル プロパティに基づいてポリシーをフィルタ処理することもできます。
ポリシーがポリシー ストアに格納されている場合は、評価するポリシーを示す PSObjects のセットを渡す必要があります。そのためには、通常、Get-Item などのコマンドレットの出力をパイプして Invoke-PolicyEvaluation に渡します。-Policy パラメータを指定する必要はありません。たとえば、Microsoft Best Practices ポリシーがデータベース エンジンのインスタンスにインポートされている場合、次のコマンドは、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"
cgi | Where-Object {$_.PolicyCategory -eq "Microsoft Best Practices: Maintenance"} | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"
ポリシーが XML ファイルとして格納されている場合は、-Policy パラメータを使用して各ポリシーのパスと名前を指定する必要があります。-Policy パラメータにパスを指定しなかった場合、Invoke-PolicyEvaulation は、sqlps パスの現在の設定を使用します。たとえば、次のコマンドは、SQL Server と共にインストールされた Microsoft Best Practice ポリシーの 1 つを、ログインの既定のデータベースに対して評価します。
Invoke-PolicyEvaluation -Policy "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033\Database Status.xml" -TargetServerName "MYCOMPUTER"
次のコマンドは同じ操作を実行しますが、現在の sqlps パスを使用して、ポリシー XML ファイルの場所を確立します。
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"
次の例では、Get-ChildItem コマンドレットを使用して、複数のポリシー XML ファイルを取得し、パイプを使ってオブジェクトを Invoke-PolicyEvaluation に渡しています。
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
cgi "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] 形式で記述します。ObjectType は、SQL Server 管理オブジェクト (SMO) オブジェクト階層のいずれかのオブジェクトです。Filter は、そのノードのオブジェクトをフィルタ処理する式です。詳細については、「クエリ式および一意なリソース名」を参照してください。
-TargetObjects または -TargetExpression のどちらかを指定します。
次の例では、Sfc.SqlStoreConnection オブジェクトを使用して、対象サーバーを指定します。
sl "C:\Program Files\Microsoft SQL Server\100\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\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MyComputer" -TargetExpression "Server[@Name='MYCOMPUTER']/Database[@Name='AdventureWorks']"
Analysis Services ポリシーの評価
Analysis Services のインスタンスに対してポリシーを評価するには、アセンブリを読み込んで sqlps に登録します。次に、Analysis Services 接続オブジェクトを含む変数を作成し、その変数を -TargetObject パラメータに渡します。次の例では、Analysis Services の Best Practices セキュリティ構成ポリシーを評価します。
sl "C:\Program Files\Microsoft SQL Server\100\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 ポリシーを評価するには、アセンブリを読み込んで sqlps に登録します。次に、Reporting Services 接続オブジェクトを含む変数を作成し、その変数を -TargetObject パラメータに渡します。次の例では、Reporting Services の Best Practices セキュリティ構成ポリシーを評価します。
sl "C:\Program Files\Microsoft SQL Server\100\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