Utilisation de l'applet de commande Invoke-PolicyEvaluation

Invoke-PolicyEvaluation est une applet de commande SQL Server qui indique si un jeu de cibles d'objets SQL Server est conforme ou non aux conditions spécifiées dans une ou plusieurs stratégies de la Gestion basée sur des stratégies.

Utilisation d'Invoke-PolicyEvaluation

Invoke-PolicyEvaluation évalue une ou plusieurs stratégies par rapport à un jeu d'objets SQL Server appelé « jeu de cibles ». Le jeu d'objets cibles provient d'un serveur cible. Chaque stratégie définit des conditions qui représentent les états autorisés pour les objets cibles. Par exemple, la stratégie Trustworthy Database déclare que la propriété de base de données TRUSTWORTHY doit avoir la valeur OFF.

Le paramètre -AdHocPolicyEvaluationMode spécifie les actions effectuées :

  • Check
    Indique l'état de conformité des objets cibles à l'aide des informations d'identification de votre connexion actuelle. Ne reconfigure pas d'objets. Il s'agit du paramètre par défaut.

  • CheckSqlScriptAsProxy
    Indique l'état de conformité des objets cibles à l'aide des informations d'identification de la connexion proxy ##MS_PolicyTSQLExecutionLogin##. Ne reconfigure pas d'objets.

  • Configure
    Indique l'état de conformité des objets cibles à l'aide des informations d'identification de votre connexion actuelle. Reconfigure toutes les options définissables et déterministes qui ne sont pas conformes aux stratégies.

Spécification de stratégies

La façon dont vous spécifiez une stratégie dépend de l'emplacement de stockage de la stratégie. Les stratégies peuvent être stockées dans deux formats :

  • Elles peuvent être constituées d'objets stockés dans un magasin de stratégies, par exemple une instance du moteur de base de données. Vous pouvez utiliser le dossier SQLSERVER:\SQLPolicy pour spécifier l'emplacement de stratégies dans un magasin de stratégies. Vous pouvez utiliser des applets de commande Windows PowerShell pour filtrer les stratégies d'entrée selon leurs propriétés, par exemple Where-Object pour appliquer un filtre sur la catégorie de la stratégie ou Get-Item pour appliquer un filtre sur le nom de la stratégie.

  • Elles peuvent être exportées en tant que fichiers XML. Vous pouvez utiliser un lecteur du système de fichiers, tel que D:, pour spécifier l'emplacement des fichiers XML. Vous pouvez utiliser des applets de commande Windows PowerShell tels que Where-Object pour filtrer les stratégies selon les propriétés du fichier, par exemple le nom du fichier.

Si les stratégies sont stockées dans un magasin de stratégies, vous devez passer un jeu de PSObjects pointant vers les stratégies à évaluer. Pour cela, vous dirigez généralement la sortie d'une applet de commande, telle que Get-Item, vers Invoke-PolicyEvaluation. Il est inutile de spécifier le paramètre -Policy. Par exemple, si vous avez importé les stratégies des meilleures pratiques pour Microsoft dans votre instance du moteur de base de données, cette commande évalue la stratégie Database Status :

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

Cet exemple montre comment utiliser Where-Object pour filtrer plusieurs stratégies d'un magasin de stratégies, en fonction de leur propriété PolicyCategory. Les objets de la sortie dirigée de Where-Object sont consommés par Invoke-PolicyEvaluation.

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

Si les stratégies sont stockées en tant que fichiers XML, vous devez utiliser le paramètre -Policy pour fournir le chemin d'accès et le nom de chaque stratégie. Si vous ne spécifiez pas de chemin d'accès dans le paramètre -Policy, Invoke-PolicyEvaulation utilise le paramètre actuel du chemin d'accès sqlps. Par exemple, cette commande évalue l'une des stratégies Recommandations de Microsoft installées avec SQL Server par rapport à la base de données par défaut pour votre connexion :

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

Cette commande a le même effet, sauf qu'elle utilise le chemin d'accès sqlps actuel pour établir l'emplacement du fichier XML de stratégie :

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

Cet exemple montre comment utiliser l'applet de commande Get-ChildItem pour récupérer plusieurs fichiers XML de stratégie et diriger les objets vers Invoke-PolicyEvaluation :

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

Spécification du jeu de cibles

Utilisez trois paramètres pour spécifier le jeu d'objets cibles :

  • -TargetServerName spécifie l'instance de SQL Server contenant les objets cibles. Vous pouvez spécifier les informations dans une chaîne qui utilise le format défini pour la propriété ConnectionString de la classe SQLConnection. Vous pouvez utiliser la classe SqlConnectionStringBuilder pour générer une chaîne de connexion correctement mise en forme. Vous pouvez également créer un objet SqlStoreConnection et le passer à -TargetServer. Si vous fournissez une chaîne qui possède uniquement le nom du serveur, Invoke-PolicyEvaluation utilise l'authentification Windows pour se connecter au serveur.

  • -TargetObjects accepte un objet ou un tableau d'objets représentant les objets SQL Server dans le jeu de cibles. Par exemple, vous pouvez créer un tableau d'objets de classe Database à passer à -TargetObjects.

  • -TargetExpressions accepte une chaîne contenant une expression de requête qui spécifie les objets dans le jeu de cibles. L'expression de requête se présente sous la forme de nœuds séparés par le caractère « / ». Chaque nœud se présente sous la forme ObjectType[Filter]. Le type d'objet est l'un des objets dans une hiérarchie d'objets SMO (SQL Server Management Objects). Le filtre est une expression qui filtre les objets au niveau de ce nœud. Pour plus d'informations, consultez Expressions de requête et noms de ressource uniques.

Spécifiez -TargetObjects ou -TargetExpression, mais pas les deux.

Cet exemple utilise un objet Sfc.SqlStoreConnection pour spécifier le serveur cible :

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

Cet exemple utilise -TargetExpression pour identifier la base de données à évaluer :

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

Évaluation de stratégies Analysis Services

Pour évaluer des stratégies par rapport à une instance de Analysis Services, vous devez charger et inscrire un assembly dans sqlps, créer une variable avec un objet de connexion Analysis Services, puis passer la variable au paramètre -TargetObject. Cet exemple montre comment évaluer la stratégie de configuration de la surface d'exposition des Recommandations pour 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

Évaluation de stratégies Reporting Services

Pour évaluer des stratégies Reporting Services, vous devez charger et inscrire un assembly dans sqlps, créer une variable avec un objet de connexion Reporting Services, puis passer la variable au paramètre -TargetObject. Cet exemple montre comment évaluer la stratégie de configuration de la surface d'exposition des Recommandations pour 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

Mise en forme de la sortie

La sortie de Invoke-PolicyEvaluation est affichée par défaut dans la fenêtre d'invite de commandes, sous la forme d'un rapport concis au format explicite. Vous pouvez utiliser le paramètre -OutputXML pour spécifier que l'applet de commande produise à la place un rapport détaillé sous la forme d'un fichier XML. Invoke-PolicyEvaluation utilise le schéma SML-IF (Systems Modeling Language Interchange Format) de façon à pouvoir être lu par les lecteurs SML-IF.

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