Utiliser Windows PowerShell dans les étapes de travail de l'Agent SQL Server

S’applique à : SQL Server Not supported. Azure SQL Database Azure Synapse Analytics Analytics Platform System (PDW)

Utilisez SQL Server Agent pour exécuter des scripts SQL Server PowerShell à des heures planifiées.

Notes

Il existe deux modules SQL Server PowerShell : SqlServer et SQLPS.

Le module SqlServer est le module PowerShell actuel à utiliser.

Le module SQLPS fait partie de l’installation de SQL Server (à des fins de compatibilité descendante), mais il n’est plus mis à jour.

Le module SqlServer contient les versions mises à jour des applets de commande disponibles dans SQLPS ainsi que de nouvelles applets de commande pour prendre en charge les dernières fonctionnalités SQL.

Installez le module SqlServer à partir de PowerShell Gallery.

Pour plus d’informations, consultez SQL Server PowerShell.

À partir de SQL Server 2019, vous pouvez désactiver SQLPS. Sur la première ligne d’une étape de travail de type PowerShell, vous pouvez ajouter #NOSQLPS, ce qui empêche SQL Agent de charger automatiquement le module SQLPS. À présent, la tâche de votre SQL Agent exécute la version de PowerShell installée sur l’ordinateur, puis vous pouvez utiliser n’importe quel autre module PowerShell de votre choix.

Pour utiliser le module SqlServer à l’étape de la tâche de votre SQL Agent, vous pouvez placer ce code sur les deux premières lignes de votre script.

#NOSQLPS
Import-Module -Name SqlServer

Exécuter PowerShell à partir de SQL Server Agent

Il y a plusieurs types d'étapes de travail SQL Server Agent. Chaque type est associé à un sous-système qui implémente un environnement spécifique, tel qu'un agent de réplication ou un environnement d'invite de commandes. Vous pouvez coder les scripts Windows PowerShell, puis utiliser SQL Server Agent pour les inclure dans les travaux qui s'exécutent à des heures planifiées ou en réponse à des événements SQL Server. Les scripts Windows PowerShell peuvent être exécutés à l'aide d'une étape de travail d'invite de commandes ou d'une étape de travail PowerShell.

  • Utilisez une étape du travail PowerShell pour que le sous-système SQL Server Agent exécute l’utilitaire sqlps, qui lance PowerShell et importe le module sqlps. Si vous exécutez SQL Server 2019 ou une version ultérieure, nous vous recommandons d’utiliser le module SqlServer dans votre étape de travail SQL Agent.

  • Utilisez une étape du travail d’invite de commandes pour exécuter PowerShell.exe et spécifiez un script qui importe le module sqlps .

Avertissement concernant la consommation de mémoire

Chaque étape de travail SQL Server Agent qui exécute PowerShell avec le module sqlps lance un processus qui consomme environ 20 Mo de mémoire. L'exécution simultanée d'un grand nombre d'étapes de travail Windows PowerShell peut nuire aux performances.

Créer une étape de travail PowerShell

Créer une étape de travail PowerShell

  1. Développez SQL Server Agent, créez un nouveau travail ou cliquez avec le bouton de droite sur un travail existant, puis cliquez sur Propriétés. Pour plus d'informations sur la création d'un travail, consultez Création de travaux.

  2. Dans la boîte de dialogue Propriétés du travail, sélectionnez la page Étapes, puis Nouveau.

  3. Dans la boîte de dialogue Nouvelle étape du travail , tapez un nom d'étapede travail.

  4. Dans la liste Type, sélectionnez PowerShell.

  5. Dans la liste Exécuter en tant que , sélectionnez le compte proxy avec les informations d'identification que le travail utilisera.

  6. Dans la zone Commande , tapez la syntaxe du script PowerShell qui sera exécuté pour l'étape de travail. Vous pouvez aussi sélectionner Ouvrir et sélectionner un fichier contenant la syntaxe du script.

  7. Sélectionnez la page Avancé pour paramétrer les options suivantes pour l'étape de travail : l'action à exécuter si l'étape de travail échoue ou réussit, le nombre de tentatives d'exécution de l'étape de travail que doit effectuer SQL Server Agent et la fréquence de ces tentatives.

Créer une étape de travail d'invite de commandes

Créer une étape de travail CmdExec

  1. Développez SQL Server Agent, créez un nouveau travail ou cliquez avec le bouton de droite sur un travail existant, puis cliquez sur Propriétés. Pour plus d'informations sur la création d'un travail, consultez Création de travaux.

  2. Dans la boîte de dialogue Propriétés du travail, sélectionnez la page Étapes, puis Nouveau.

  3. Dans la boîte de dialogue Nouvelle étape du travail , tapez un nom d'étapede travail.

  4. Dans la liste Type , choisissez Système d’exploitation (CmdExec) .

  5. Dans la liste Exécuter en tant que , sélectionnez le compte proxy avec les informations d'identification que doit utiliser le travail. Par défaut, les étapes de travail CmdExec s'exécutent dans le contexte du compte de service SQL Server Agent.

  6. Dans la zone Traiter le code de sortie d'une commande réussie , entrez une valeur comprise entre 0 et 999999.

  7. Dans la zone Commande, entrez des commandes commençant par PowerShell.exe avec des paramètres spécifiant le script PowerShell à exécuter. Ces exemples sont similaires à la syntaxe d’exécution des commandes PowerShell à partir d’une invite de commandes Windows. Consultez PowerShell.exe -? pour connaître toutes les options de syntaxe possibles.

    • Exemple 1 : exécute une cmdlet simple.
         PowerShell.exe -Command "Get-Date"
      
    • Exemple 2 : exécute une requête via SQLCmd.exe sur le serveur actuel (l’exemple utilise le remplacement de jeton SQL Agent).
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • Exemple 3 : exécute un script PowerShell (à l’aide de pwsh.exe, le nom de l’exécutable dans PowerShell 7.0, qui doit être installé sur le serveur). Notez que le chemin d’accès au script est local sur le serveuroù SQL Agent est en cours d’exécution.
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. Sélectionnez la page Avancé pour définir les options d’étape de travail, telles que l’action à exécuter lorsque l’étape de travail aboutit ou échoue, le nombre de tentatives d’exécution de l’étape de travail que doit effectuer SQL Server Agent et le fichier dans lequel SQL Server Agent peut écrire la sortie de l’étape de travail. Seuls les membres du rôle de serveur fixe sysadmin peuvent écrire une sortie d'étape de travail dans un fichier du système d'exploitation.

Voir aussi