Freigeben über


cmdlet Invoke-PolicyEvaluation

Invoke-PolicyEvaluation ist ein SQL Server-Cmdlet , das meldet, ob ein Zielsatz von SQL Server-Objekten den bedingungen entspricht, die in einer oder mehreren richtlinienbasierten Verwaltungsrichtlinien angegeben sind.

Verwenden von Invoke-PolicyEvaluation

Invoke-PolicyEvaluation wertet eine oder mehrere Richtlinien für eine Gruppe von SQL Server-Objekten aus, die als Zielsatz bezeichnet werden. Der Satz von Zielobjekten stammt von einem Zielserver. Jede Richtlinie definiert Bedingungen, die die zulässigen Zustände für die Zielobjekte sind. Die Richtlinie "Vertrauenswürdige Datenbank" gibt beispielsweise an, dass die VERTRAUENSWÜRDIGe Datenbankeigenschaft auf OFF festgelegt werden muss.

Der Parameter "-AdHocPolicyEvaluationMode " gibt die ausgeführten Aktionen an:

Prüfen
Melden Sie den Compliance-Status der Zielobjekte mithilfe der Anmeldeinformationen Ihrer aktuellen Anmeldung. Konfigurieren Sie keine Objekte neu. Dies ist die Standardeinstellung.

Überprüfe Sql-Script als Proxy
Mithilfe der Anmeldeinformationen des Proxy-Logins ##MS_PolicyTSQLExecutionLogin## melden Sie den Compliancestatus der Zielobjekte. Konfigurieren Sie keine Objekte neu.

Konfigurieren
Melden Sie den Einhaltungsstatus der Zielobjekte mithilfe der Anmeldeinformationen Ihres aktuellen Logins. Konfigurieren Sie alle festgelegten und deterministischen Optionen neu, die nicht den Richtlinien entsprechen.

Festlegen 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 Objekte sein, die in einem Richtlinienspeicher gespeichert sind, 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, z. B. die Verwendung von Where-Object zum Filtern nach der Richtlinienkategorie oder Get-Item zum Filtern nach Richtliniennamen.

  • Sie können als XML-Dateien exportiert werden. Sie können ein Dateisystemlaufwerk, z. B. D:, verwenden, um den Speicherort der XML-Dateien anzugeben. Sie können Windows PowerShell-Cmdlets wie Where-Object verwenden, um die Richtlinien nach ihren Dateieigenschaften zu filtern, z. B. Dateinamen.

Wenn die Richtlinien in einem Richtlinienspeicher gespeichert sind, müssen Sie eine Reihe von PSObjects übergeben, die auf die zu bewertenden Richtlinien verweisen. Dies erfolgt in der Regel durch das Weiterleiten der Ausgabe eines Cmdlets wie Get-Item an Invoke-PolicyEvaluation und erfordert nicht, 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 Datenbankstatusrichtlinie aus:

sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"  
Get-Item "Database Status" | Invoke-PolicyEvaluation -TargetServerName "MYCOMPUTER"  

Dieses Beispiel zeigt die Verwendung von Where-Object zum Filtern mehrerer Richtlinien aus einem Richtlinienspeicher basierend auf ihrer PolicyCategory-Eigenschaft . Die Objekte aus der gepipelten Ausgabe von Where-Object werden von Invoke-PolicyEvaluation konsumiert.

sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"  
gci | Where-Object {$_.PolicyCategory -eq "Microsoft Best Practices: Maintenance"} | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"  

Wenn die Richtlinien als XML-Dateien gespeichert werden, müssen Sie den Parameter "-Policy " verwenden, um den Pfad und den Namen für jede Richtlinie anzugeben. Wenn Sie keinen Pfad im Parameter "-Policy " angeben, verwendet Invoke-PolicyEvaulation die aktuelle Einstellung des SQLPs-Pfads . Mit diesem Befehl wird beispielsweise eine der mit SQL Server installierten Microsoft Best Practice-Richtlinien anhand der Standarddatenbank für Ihre Anmeldung ausgewertet:

Invoke-PolicyEvaluation -Policy "C:\Program Files\Microsoft SQL Server\120\Tools\Policies\DatabaseEngine\1033\Database Status.xml" -TargetServerName "MYCOMPUTER"  

Dieser Befehl führt dasselbe aus, es verwendet nur den aktuellen SQLPS-Pfad , um den Speicherort der XML-Richtliniendatei einzurichten:

sl "C:\Program Files\Microsoft SQL Server\120\Tools\Policies\DatabaseEngine\1033"  
Invoke-PolicyEvaluation -Policy "Database Status.xml" -TargetServerName "MYCOMPUTER"  

Dieses Beispiel zeigt die Verwendung des Cmdlets "Get-ChildItem ", um mehrere XML-Richtliniendateien abzurufen und die Objekte in "Invoke-PolicyEvaluation" weiterzuleiten:

sl "C:\Program Files\Microsoft SQL Server\120\Tools\Policies\DatabaseEngine\1033"  
gci "Database Status.xml", "Trustworthy Database.xml" | Invoke-PolicyEvaluation -TargetServer "MYCOMPUTER"  

Festlegen des Zielsets

Verwenden Sie drei Parameter, um den Satz von Zielobjekten anzugeben:

  • -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 an -TargetServer übergeben. Wenn Sie eine Zeichenfolge angeben, die nur den Namen des Servers hat, verwendet Invoke-PolicyEvaluation die Windows-Authentifizierung , um eine Verbindung mit dem Server herzustellen.

  • -TargetObjects akzeptiert ein Objekt oder ein Array von Objekten, die die SQL Server-Objekte im Zielsatz darstellen. Sie können beispielsweise ein Array von Database Klassenobjekten erstellen, das an -TargetObjects übergeben werden soll.

  • -TargetExpressions akzeptiert eine Zeichenfolge, die einen Abfrageausdruck enthält, der die Objekte im Zielsatz angibt. Der Abfrageausdruck befindet sich in Form von Knoten, die durch das Zeichen "/" getrennt sind. Jeder Knoten befindet sich im Format ObjectType[Filter]. Der Objekttyp ist eines der Objekte in einer SMO-Objekthierarchie (SQL Server Management Object). Filter ist ein Ausdruck, der nach Objekten an diesem Knoten filtert. Weitere Informationen finden Sie unter Query Expressions and Uniform Resource Names.

Geben Sie entweder -TargetObjects oder -TargetExpression an, nicht beide.

In diesem Beispiel wird ein Sfc.SqlStoreConnection-Objekt verwendet, um den Zielserver anzugeben:

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  

In diesem Beispiel wird -TargetExpression verwendet, um die zu bewertende datenbank zu identifizieren:

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']"  

Auswerten von Analysis Services-Richtlinien

Um Richtlinien für eine Instanz von Analysis Services auszuwerten, müssen Sie eine Assembly in PowerShell laden und registrieren, eine Variable mit einem Analysis Services-Verbindungsobjekt erstellen und die Variable an den Parameter "-TargetObject " übergeben. Dieses Beispiel zeigt die Auswertung der Konfigurationsrichtlinie für bewährte Methoden für Oberflächenbereiche für 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  

Richtlinien für Reporting Services evaluieren

Zum Auswerten von Reporting Services-Richtlinien müssen Sie eine Assembly in PowerShell laden und registrieren, eine Variable mit einem Reporting Services-Verbindungsobjekt erstellen und die Variable an den Parameter "-TargetObject " übergeben. In diesem Beispiel wird die Best Practices-Oberflächenkonfigurationsrichtlinie für Reporting Services ausgewertet:

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  

Ausgabeformatierung

Standardmäßig wird die Ausgabe von Invoke-PolicyEvaluation im Kommandozeilenfenster als präziser Bericht in einem benutzerfreundlichen Format angezeigt. Mit dem Parameter "-OutputXML " können Sie angeben, dass das Cmdlet stattdessen einen detaillierten Bericht als XML-Datei erstellt. Invoke-PolicyEvaluation verwendet das Systems Modeling Language Interchange Format (SML-IF) Schema, damit die Datei von SML-IF Lesern gelesen werden kann.

sl "SQLSERVER:\SQLPolicy\MyComputer\DEFAULT\Policies"  
Invoke-PolicyEvaluation -Policy "Datbase Status" -TargetServer "MYCOMPUTER" -OutputXML > C:\MyReports\DatabaseStatusReport.xml  

Siehe auch

Verwenden Sie die Cmdlets des Datenbankmoduls