Ausführen von Windows PowerShell-Schritten in SQL Server-Agent

Gilt für: SQL Server Not supported. Azure SQL-Datenbank Azure Synapse Analytics Analytics Platform System (PDW)

Führen Sie die SQL Server PowerShell-Skripts mithilfe des SQL Server-Agent nach Zeitplan aus.

Hinweis

Es gibt zwei SQL Server PowerShell-Module: SqlServer und SQLPS.

Das SqlServer-Modul ist das zu verwendende aktuelle PowerShell-Modul.

Das SQLPS-Modul ist zwar in der SQL Server-Installation (für die Abwärtskompatibilität) enthalten, wird jedoch nicht mehr aktualisiert.

Das SqlServer-Modul enthält aktualisierte Versionen der Cmdlets in SQLPS sowie neue Cmdlets zur Unterstützung der neuesten SQL-Funktionen.

Installieren Sie das SqlServer-Modul aus dem PowerShell-Katalog.

Weitere Informationen finden Sie unter SQL Server-PowerShell.

Ab SQL Server 2019 können Sie SQLPS deaktivieren. Fügen Sie hierzu der ersten Zeile eines Auftragsschritts des PowerShell-Moduls #NOSQLPS hinzu, wodurch der SQL-Agent aufhört, das SQLPS-Modul automatisch zu laden. Nun führt der SQL-Agent-Auftrag die auf dem Computer installierte PowerShell-Version aus. Sie können dann auch ein beliebiges anderes PowerShell-Modul verwenden.

Um das Modul SqlServer in Ihrem SQL-Agent-Auftragsschritt zu verwenden, können Sie diesen Code in den ersten beiden Skriptzeilen platzieren.

#NOSQLPS
Import-Module -Name SqlServer

Ausführen von PowerShell im SQL Server-Agent

Es gibt mehrere Typen von Auftragsschritten im SQL Server-Agent. Jeder Typ ist einem Subsystem zugeordnet, das eine bestimmte Umgebung implementiert, wie eine Replikations-Agent- oder Eingabeaufforderungsumgebung. Sie können Windows PowerShell-Skripts schreiben und die Skripts dann mit dem SQL Server-Agent in Aufträge integrieren, die zu festgelegten Zeiten oder in Reaktion auf SQL Server-Ereignisse ausgeführt werden. Windows PowerShell-Skripts können mit entweder einem Eingabeaufforderungs-Auftragsschritt oder einem PowerShell-Auftragsschritt ausgeführt werden.

  • Verwenden Sie einen PowerShell-Auftragsschritt, damit das Subsystem des SQL Server-Agents das Hilfsprogramm sqlps ausführt, das PowerShell 2.0 startet und das Modul sqlps importiert. Wenn Sie SQL Server 2019 oder höher ausführen, empfiehlt es sich, das Modul SqlServer in Ihrem SQL Server-Agent-Auftragsschritt zu verwenden.

  • Verwenden Sie einen Auftragsschritt an einer Eingabeaufforderung, um <ui>PowerShell.exe</ui> auszuführen, und geben Sie ein Skript an, das das sqlps -Modul importiert.

Warnung zur Arbeitsspeichernutzung

Jeder Auftragsschritt des SQL Server-Agents, der PowerShell mit dem Modul sqlps ausführt, startet einen Prozess, der etwa 20 MB Arbeitsspeicher in Anspruch nimmt. Die gleichzeitige Ausführung einer großen Anzahl von Windows PowerShell-Auftragsschritten kann sich negativ auf die Leistung auswirken.

Erstellen eines PowerShell-Auftragsschritts

Erstellen eines PowerShell-Auftragsschritts

  1. Erweitern Sie SQL Server-Agent, erstellen Sie einen neuen Auftrag, oder klicken Sie mit der rechten Maustaste auf einen vorhandenen Auftrag, und wählen Sie dann Eigenschaften aus. Weitere Informationen zum Erstellen eines Auftrags finden Sie unter Erstellen von Aufträgen.

  2. Wählen Sie im Dialogfeld Auftragseigenschaften die Seite Schritte und dann auf Neu aus.

  3. Geben Sie im Dialogfeld Neuer Auftragsschritt unter Schrittnameeinen Schrittnamen für den Auftrag ein.

  4. Wählen Sie in der Liste Typ die Option PowerShell aus.

  5. Wählen Sie in der Liste Ausführen als das Proxykonto mit den Anmeldeinformationen für den Auftrag aus.

  6. Geben Sie im Feld Befehl die PowerShell-Skriptsyntax ein, die für den Auftragsschritt ausgeführt wird. Wählen Sie alternativ Öffnen und dann eine Datei aus, die die Skriptsyntax enthält.

  7. Wählen Sie die Seite Erweitert aus, um die folgenden Optionen für den Auftragsschritt festzulegen: welche Aktion bei der erfolgreichen oder fehlerhaften Ausführung des Auftragsschrittes jeweils auszuführen ist, wie oft der SQL Server-Agent versuchen soll, den Auftragsschritt auszuführen, und wie viele Wiederholungsversuche unternommen werden sollen.

Erstellen eines Eingabeaufforderungs-Auftragsschritts

Erstellen eines CmdExec-Auftragsschritts

  1. Erweitern Sie SQL Server-Agent, erstellen Sie einen neuen Auftrag, oder klicken Sie mit der rechten Maustaste auf einen vorhandenen Auftrag, und wählen Sie dann Eigenschaften aus. Weitere Informationen zum Erstellen eines Auftrags finden Sie unter Erstellen von Aufträgen.

  2. Wählen Sie im Dialogfeld Auftragseigenschaften die Seite Schritte und dann auf Neu aus.

  3. Geben Sie im Dialogfeld Neuer Auftragsschritt unter Schrittnameeinen Schrittnamen für den Auftrag ein.

  4. Wählen Sie in der Liste Typ den Eintrag Betriebssystem (CmdExec) aus.

  5. Wählen Sie in der Liste Ausführen als das Proxykonto mit den Anmeldeinformationen für den Auftrag aus. Standardmäßig werden CmdExec-Auftragsschritte im Kontext des Kontos des SQL Server-Agent-Dienstes ausgeführt.

  6. Geben Sie in das Feld Prozessexitcode eines erfolgreichen Befehls einen Wert zwischen 0 und 999999 ein.

  7. Geben Sie im Feld Befehl Befehle ein, die mit „PowerShell.exe“ mit und Parametern beginnen, die das auszuführende PowerShell-Skript angeben. Diese Beispiele ähneln der Syntax zum Ausführen von PowerShell-Befehlen über eine Windows Eingabeaufforderung. Alle möglichen Syntaxoptionen finden Sie unter PowerShell.exe -?.

    • Beispiel 1: Führt ein einfaches Cmdlet aus.
         PowerShell.exe -Command "Get-Date"
      
    • Beispiel 2: Führt eine Abfrage über SQLCmd.exe für den aktuellen Server aus (im Beispiel wird SQL-Agent-Tokenersetzung verwendet).
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • Beispiel 3: Führt ein PowerShell-Skript aus (mithilfe von pwsh.exe, dem Namen der ausführbaren Datei in PowerShell 7.0, die auf dem Server installiert werden muss). Beachten Sie, dass der Pfad zum Skript lokal auf dem Server ist, auf dem SQL-Agent ausgeführt wird.
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. Wählen Sie die Seite Erweitert aus, um Optionen für Auftragsschritte festzulegen, z. B. welche Aktion bei der erfolgreichen oder fehlerhaften Ausführung des Auftragsschrittes jeweils auszuführen ist, wie oft der SQL Server-Agent versuchen soll, den Auftragsschritt auszuführen, und in welche Datei der SQL Server-Agent die Auftragsschrittausgabe schreiben soll. Nur Mitglieder der festen Serverrolle sysadmin können die Auftragsschrittausgabe in eine Betriebssystemdatei schreiben.

Weitere Informationen