SQL Server PowerShell

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Installieren von SQL Server PowerShell

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.

Vorherige Versionen des SqlServer-Moduls waren im SQL Server Management Studio (SSMS) enthalten, allerdings nur in den Versionen 16.x von SSMS.

Um PowerShell mit SSMS 17.0 und höher zu verwenden, installieren Sie das SqlServer-Modul über den PowerShell-Katalog.

Sie können auch PowerShell mit Azure Data Studio verwenden.

Warum wurde das Modul von „SQLPS“ in „SqlServer“ geändert?

Zur Freigabe von SQL PowerShell-Updates mussten die Identitäten des SQL PowerShell-Moduls und des Wrappers SQLPS.exe geändert werden. Aufgrund dieser Änderung gibt es jetzt zwei SQL PowerShell-Module: das SqlServer-Modul und das SQLPS-Modul.

Aktualisieren Sie Ihre PowerShell-Skripts, wenn Sie das SQLPS-Modul importieren.

Wenn Sie über PowerShell-Skripts verfügen, die Import-Module -Name SQLPS ausführen, und Sie die Vorteile der neuen Anbieterfunktionen und Cmdlets nutzen möchten, müssen Sie diese in Import-Module -Name SqlServer ändern. Das neue Modul wird im Ordner %ProgramFiles%\WindowsPowerShell\Modules\SqlServer installiert. Daher müssen Sie die Variable „$env:PSModulePath“ nicht aktualisieren. Wenn Sie über Skripts verfügen, die eine Community-Version oder eine Version eines Drittanbieters eines Moduls mit dem Namen SqlServer verwenden, verwenden Sie den Parameter „Prefix“, um Konflikte mit den Namen zu vermeiden.

Es wird empfohlen, das Skript mit Import-Module SQLServer zu starten, um parallele Probleme zu vermeiden, wenn das SQLPS-Modul auf demselben Computer installiert ist.

Dieser Abschnitt gilt für Skripts, die von PowerShell und nicht vom SQL-Agent ausgeführt werden. Das neue Modul kann mit SQL-Agent-Auftragsschritten mithilfe von #NOSQLPS verwendet werden.

SQL Server PowerShell-Komponenten

Das SqlServer-Modul umfasst Folgendes:

  • PowerShell-Anbieter, was einen einfachen Navigationsmechanismus wie bei Dateisystempfaden ermöglicht. Sie können Dateisystempfaden ähnelnde Pfade erstellen, in denen das Laufwerk einem SQL Server-Management Object-Modell zugeordnet ist und deren Knoten auf Objektmodellklassen basieren. Sie können dann vertraute Befehle wie cd (Alias für Set-Location) und dir (Alias für Get-ChildItem) verwenden, um auf den Pfaden zu navigieren, auf ähnliche Weise, wie Sie in einem Eingabeaufforderungsfenster in Ordnern navigieren. Sie können andere Befehle wie ren (Alias für Rename-Item) oder del (Alias für Remove-Item) verwenden, um Aktionen auf den Knoten im Pfad durchzuführen.

  • mehrere Cmdlets, die Aktionen wie das Ausführen eines sqlcmd-Skripts unterstützen, das Transact-SQL- oder XQuery-Anweisungen enthält

  • AS-Anbieter und Cmdlets, die zuvor separat installiert wurden

SQL Server-Versionen

SQL PowerShell-Cmdlets können verwendet werden, um Instanzen von Azure SQL-Datenbank und Azure Synapse Analytics sowie alle unterstützten SQL Server-Produkte zu verwalten.

SQL Server-Bezeichner mit Zeichen, die in PowerShell-Pfaden nicht unterstützt werden.

Die Cmdlets Encode-Sqlname (Alias für ConvertTo-EncodedSqlName) und Decode-Sqlname (Alias für ConvertFrom-EncodedSqlName) helfen Ihnen dabei, SQL Server-Bezeichner anzugeben, die Zeichen enthalten, die nicht in PowerShell-Pfaden unterstützt werden. Weitere Informationen finden Sie unter SQL Server Identifiers in PowerShell.

Verwenden Sie das Convert-UrnToPath-Cmdlet, um einen eindeutigen Ressourcennamen (Unique Resource Name, URN) für ein Datenbank-Engine-Objekt in einen Pfad für den SQL Server PowerShell-Anbieter zu konvertieren. Weitere Informationen finden Sie unter Convert URNs to SQL Server Provider Paths.

Abfrageausdrücke und eindeutige Ressourcennamen

Bei Abfrageausdrücken handelt es sich um Zeichenfolgen, die eine ähnliche Syntax wie XPath nutzen, um eine Gruppe von Kriterien angeben, mit der ein oder mehrere Objekte in einer Objektmodellhierarchie aufgezählt werden. Ein eindeutiger Ressourcenname (Uniform Resource Name, URN) ist ein spezieller Typ einer Abfrageausdrucks-Zeichenfolge, der ein einzelnes Objekt eindeutig kennzeichnet. Weitere Informationen finden Sie unter Query Expressions and Uniform Resource Names.

SQL Server-Agent

Es wurden keine Änderungen an dem von SQL Server-Agent verwendeten Modul vorgenommen. Daher verwenden SQL Server-Agent-Aufträge, die über PowerShell-Auftragsschritte verfügen, das SQLPS-Modul. Weitere Informationen finden Sie im Artikel zum Ausführen von PowerShell mit dem SQL Server-Agent. Ab SQL Server 2019 können Sie SQLPS jedoch deaktivieren. Fügen Sie hierzu in der ersten Zeile eines Auftragsschritts des PowerShell-Moduls #NOSQLPS hinzu, wodurch der SQL-Agent aufhört, das SQLPS-Modul automatisch zu laden. Wenn Sie dies tun, 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.

Fehlerbehebung bei SQLPS

Wenn Agentauftragsschritte (PowerShell-Subsystem) mit dem folgenden Fehler fehlschlagen, kann Ihnen dieser Abschnitt bei der Problembehandlung helfen.

Fehler bei einem Auftragsschritt in Zeile 1 in einem PowerShell-Skript. Die entsprechende Zeile lautet "import-module SQLPS". Korrigieren Sie das Skript, und planen Sie den Auftrag neu. Die von PowerShell zurückgegebenen Fehlerinformationen lauten: "The specified module 'SQLPS' was not loaded because no valid module file was found in any module directory." (Das angegebene Modul 'SQLPS' wurde nicht geladen, da in keinem Modulverzeichnis eine gültige Moduldatei gefunden wurde.)

Das Modul „SQLPS“ muss in der Umgebungsvariablen „PSModulePath“ verfügbar sein. Wenn Sie SSMS 16.x deinstallieren, wird SQLPS möglicherweise aus PSModulePath entfernt. Führen Sie den folgenden PowerShell-Befehl aus, um die in PSModulePath gespeicherten aktuellen Werte zu überprüfen:

 $env:PSModulePath -split ";"

Wenn der Pfad festgelegt ist, wird ein Eintrag ähnlich C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules angezeigt. Wenn der Pfad nicht festgelegt ist, suchen Sie den Ordner „SQLPS“ auf Ihrem Server, und fügen Sie ihn entweder über PowerShell oder unter Systemeigenschaften > Erweitert > Umgebungsvariablen dem Wert der Umgebungsvariablen hinzu.

Modul „SQLServer“ mit dem SQL-Agent

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

#NOSQLPS
Import-Module -Name SqlServer

Cmdlet-Referenz

Nächste Schritte