Verwenden des Invoke-PolicyEvaluation-Cmdlets
Invoke-PolicyEvaluation ist ein SQL Server-Befehlsshell-für-Windows PowerShell-Cmdlet, das meldet, ob ein Zielsatz von SQL Server-Objekten den Bedingungen entspricht, die in ein oder mehreren richtlinienbasierten Verwaltungsrichtlinien angegeben sind.
Verwenden von Invoke-PolicyEvaluation
Invoke-PolicyEvaluation wertet ein oder mehrere Richtlinien für einen Satz von SQL Server-Objekten aus, der Zielsatz genannt wird. Der Satz von Zielobjekten stammt von einem Zielserver. Jede Richtlinie definiert Bedingungen, die die zulässigen Zustände für die Zielobjekte angeben. Beispielsweise legt die Vertrauenswürdige Datenbank-Richtlinie fest, dass die TRUSTWORTHY-Datenbankeigenschaft auf OFF festgelegt werden muss.
Der -AdHocPolicyEvaluationMode-Parameter gibt die ausgeführten Aktionen an:
Check
Berichtet den Kompatibilitätsstatus der Zielobjekte unter Verwendung der Anmeldeinformationen Ihres aktuellen Anmeldenamens. Führt keine Neukonfiguration von Objekten aus. Dies ist die Standardeinstellung.CheckSqlScriptAsProxy
Berichtet den Kompatibilitätsstatus der Zielobjekte unter Verwendung der Anmeldeinformationen des ##MS_PolicyTSQLExecutionLogin##-Proxyanmeldenamens. Führt keine Neukonfiguration von Objekten aus.Configure
Berichtet den Kompatibilitätsstatus der Zielobjekte unter Verwendung der Anmeldeinformationen Ihres aktuellen Anmeldenamens. Konfiguriert alle festlegbaren und deterministischen Optionen neu, die nicht in Übereinstimmung mit den Richtlinien sind.
Angeben von Richtlinien
Wie Sie eine Richtlinie angeben, hängt davon ab, wo die Richtlinie gespeichert ist. Richtlinien können in zwei Formaten gespeichert werden:
Sie können als Objekte in einem Richtlinienspeicher gespeichert sein, wie z. B. eine Instanz des Datenbankmoduls. Sie können den Ordner SQLSERVER:\SQLPolicy verwenden, um den Speicherort von Richtlinien in einem Richtlinienspeicher anzugeben. Sie können Windows PowerShell-Cmdlets verwenden, um die Eingaberichtlinien basierend auf ihren Eigenschaften zu filtern. Beispielsweise können Sie Where-Object verwenden, um nach der Richtlinienkategorie zu filtern, oder Get-Item, um nach dem Richtliniennamen zu filtern.
Sie können als XML-Dateien exportiert werden. Sie können ein Dateisystemlaufwerk verwenden, wie z. B. D:, um den Speicherort der XML-Dateien anzugeben. Sie können Windows PowerShell-Cmdlets verwenden, wie z. B. Where-Object, um die Richtlinien nach ihren Dateieigenschaften zu filtern, wie z. B. nach dem Dateinamen.
Wenn die Richtlinien in einem Richtlinienspeicher gespeichert sind, müssen Sie einen Satz von PSObjects übergeben, der auf die auszuwertenden Richtlinien zeigt. Hierzu wird in der Regel die Ausgabe eines Cmdlets, wie z. B. Get-Item, an Invoke-PolicyEvaluation weitergeleitet. Es ist nicht erforderlich, dass Sie den -Policy Parameter angeben. Wenn Sie beispielsweise die Microsoft Best Practices-Richtlinien in Ihre Instanz des Datenbankmoduls importiert haben, wertet dieser Befehl die Datenbankstatus-Richtlinie aus:
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Get-Item "Database Status" | Invoke-PolicyEvaluation -TargetServerName "MYCOMPUTER"
In diesem Beispiel wird die Verwendung von Where-Object gezeigt, um mehrere Richtlinien aus einem Richtlinienspeicher basierend auf ihrer PolicyCategory-Eigenschaft zu filtern. Die Objekte aus der weitergeleiteten Ausgabe von Where-Object werden von Invoke-PolicyEvaluation verwendet.
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
cgi | Where-Object {$_.PolicyCategory -eq "Microsoft Best Practices: Maintenance"} | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"
Wenn die Richtlinien als XML-Dateien gespeichert werden, müssen Sie den -Policy-Parameter verwenden, um für jede Richtlinie den Pfad und den Namen bereitzustellen. Wenn Sie im -Policy-Parameter keinen Pfad angeben, verwendet Invoke-PolicyEvaulation die aktuelle Einstellung des sqlps-Pfads. Beispielsweise wertet dieser Befehl eine der Microsoft Best Practice-Richtlinien, die mit SQL Server installiert wurden, anhand der Standarddatenbank für Ihren Anmeldenamen aus:
Invoke-PolicyEvaluation -Policy "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033\Database Status.xml" -TargetServerName "MYCOMPUTER"
Dieser Befehl bewirkt dasselbe, nur verwendet er den aktuellen sqlps-Pfad, um den Speicherort der XML-Richtliniendatei zu ermitteln:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"
Dieses Beispiel zeigt die Verwendung des Get-ChildItem-Cmdlets, um mehrere XML-Richtliniendateien abzurufen und die Objekte an Invoke-PolicyEvaluation weiterzuleiten:
sl "C:\Program Files\Microsoft SQL Server\100\Tools\Policies\DatabaseEngine\1033"
cgi "Database Status.xml", "Trustworthy Database.xml" | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"
Angeben des Zielsatzes
Mithilfe von drei Parametern können Sie den Satz der Zielobjekte angeben:
-TargetServerName gibt die Instanz von SQL Server an, die die Zielobjekte enthält. Sie können die Informationen in einer Zeichenfolge angeben, die das für die ConnectionString-Eigenschaft der SQLConnection-Klasse definierte Format verwendet. Sie können die SqlConnectionStringBuilder-Klasse verwenden, um eine ordnungsgemäß formatierte Verbindungszeichenfolge zu erstellen. Sie können auch ein SqlStoreConnection-Objekt erstellen und es an -TargetServer übergeben. Wenn Sie eine Zeichenfolge angeben, die nur den Namen des Servers enthält, verwendet Invoke-PolicyEvaluation die Windows-Authentifizierung, um eine Verbindung mit dem Server herzustellen.
-TargetObjects nimmt ein Objekt oder ein Array von Objekten entgegen, das die SQL Server-Objekte im Zielsatz darstellt. Beispielsweise könnten Sie ein Array von Objekten der Database-Klasse erstellen, um sie an -TargetObjects zu übergeben.
-TargetExpressions nimmt eine Zeichenfolge mit einem Abfrageausdruck entgegen, der die Objekte im Zielsatz angibt. Der Abfrageausdruck liegt in Form von Knoten vor, die durch das Zeichen '/' getrennt sind. Jeder Knoten hat das Format ObjectType [Filter]. ObjectType ist eines der Objekte in einer SMO-Objekthierarchie (SQL Server Management Object). Filter ist ein Ausdruck, der bei diesem Knoten nach Objekten filtert. Weitere Informationen finden Sie unter Abfrageausdrücke und eindeutige Ressourcennamen.
Geben Sie entweder -TargetObjects oder -TargetExpression an, aber nicht beides.
In diesem Beispiel wird ein Sfc.SqlStoreConnection-Objekt verwendet, um den Zielserver anzugeben:
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
In diesem Beispiel wird -TargetExpression verwendet, um eine bestimmte auszuwertende Datenbank anzugeben:
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']"
Auswerten von Analysis Services-Richtlinien
Um Richtlinien anhand einer Instanz von Analysis Services auszuwerten, müssen Sie eine Assembly in sqlps laden und registrieren, eine Variable mit einem Analysis Services-Verbindungsobjekt erstellen und die Variable an den -TargetObject-Parameter übergeben. Dieses Beispiel zeigt das Auswerten der Best Practices-Oberflächenkonfigurationsrichtlinie für Analysis Services:
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
Auswerten von Reporting Services-Richtlinien
Um Reporting Services-Richtlinien auszuwerten, müssen Sie eine Assembly in sqlps laden und registrieren, eine Variablen mit einem Reporting Services-Verbindungsobjekt erstellen und die Variable an den -TargetObject-Parameter übergeben. Dieses Beispiel zeigt das Auswerten der Best Practices-Oberflächenkonfigurationsrichtlinie für Reporting Services:
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
Formatieren der Ausgabe
Standardmäßig wird die Ausgabe von Invoke-PolicyEvaluation im Eingabeaufforderungsfenster als Kurzbericht in Klartextform angezeigt. Sie können den -OutputXML-Parameter verwenden, um festzulegen, dass das Cmdlet stattdessen einen detaillierten Bericht als XML-Datei erstellt. Invoke-PolicyEvaluation verwendet das SML-IF-Schema (Systems Modeling Language Interchange Format), sodass die Datei von SML-IF-Readern gelesen werden kann.
sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"
Invoke-PolicyEvaluation -Policy "Datbase Status" -TargetServer "MYCOMPUTER" -OutputXML > C:\MyReports\DatabaseStatusReport.xml