Freigeben über


Verwenden von PowerShell unter Linux zum Verwalten von SQL Server unter Linux

Gilt für:SQL Server – Linux

Dieser Artikel führt SQL Server PowerShell ein und führt Sie durch ein paar Beispiele zur Verwendung mit PowerShell unter macOS und Linux. PowerShell ist jetzt ein Open Source-Projekt auf GitHub.

Weitere Informationen zu Windows PowerShell finden Sie unter Was ist Windows PowerShell?

Plattformübergreifende Editor-Optionen

Alle folgenden Schritte für PowerShell funktionieren in einem regulären Terminal, oder Sie können sie über ein Terminal in Visual Studio Code oder Azure Data Studio ausführen. Sowohl VS Code als auch Azure Data Studio sind unter macOS und Linux verfügbar. Weitere Informationen zu Azure Data Studio finden Sie in Schnellstart: Verwenden von Azure Data Studio zum Verbinden und Abfragen von SQL Server. Vielleicht möchten Sie auch den PowerShell Editor Support für Azure Data Studio in Betracht ziehen.

Installieren von PowerShell

Weitere Informationen zum Installieren von PowerShell auf verschiedenen unterstützten und experimentellen Plattformen finden Sie in den folgenden Artikeln:

Installieren des SqlServer-Moduls

Das SqlServer-Modul wird im PowerShell-Katalog verwaltet. Beim Arbeiten mit SQL Server sollten Sie immer die neueste Version des SqlServer PowerShell-Moduls verwenden.

Um das SqlServer Modul zu installieren, öffnen Sie eine PowerShell-Sitzung, und führen Sie den folgenden Code aus:

Install-Module -Name SqlServer

Weitere Informationen zum Installieren des SqlServer Moduls aus dem PowerShell-Katalog finden Sie unter Installieren des SQL Server PowerShell-Moduls.

Verwenden des SqlServer-Moduls

Beginnen wir mit dem Starten von PowerShell. Wenn Sie macOS oder Linux verwenden, öffnen Sie eine Terminalsitzung auf Ihrem Computer, und geben Sie ein pwsh , um eine neue PowerShell-Sitzung zu starten. Verwenden Sie unter Windows Win+R, und geben Sie ein pwsh , um eine neue PowerShell-Sitzung zu starten.

pwsh

SQL Server bietet ein PowerShell-Modul mit dem Namen SqlServer an. Sie können das SqlServer Modul verwenden, um die SQL Server-Komponenten (SQL Server-Anbieter und Cmdlets) in eine PowerShell-Umgebung oder ein Skript zu importieren.

Kopieren Sie den folgenden Befehl an der PowerShell-Eingabeaufforderung, und fügen Sie ihn ein, um das SqlServer Modul in Ihre aktuelle PowerShell-Sitzung zu importieren:

Import-Module SqlServer

Geben Sie den folgenden Befehl an der PowerShell-Eingabeaufforderung ein, um zu überprüfen, ob das SqlServer Modul ordnungsgemäß importiert wurde:

Get-Module -Name SqlServer

PowerShell sollte Informationen ähnlich der folgenden Ausgabe anzeigen:

ModuleType Version    Name          ExportedCommands
---------- -------    ----          ----------------
Script     21.1.18102 SqlServer     {Add-SqlAvailabilityDatabase, Add-SqlAvailabilityGroupList...

Herstellen einer Verbindung mit SQL Server und Abrufen von Serverinformationen

Die folgenden Schritte verwenden PowerShell, um eine Verbindung mit Ihrer SQL Server-Instanz unter Linux herzustellen und einige Servereigenschaften anzuzeigen.

Kopieren Sie die folgenden Befehle in die PowerShell-Eingabeaufforderung. Wenn Sie diese Befehle ausführen, führt PowerShell Folgendes aus:

  • Ein Dialogfeld wird angezeigt, das Sie auffordert, den Hostnamen oder die IP-Adresse Ihrer Instanz einzugeben.
  • Das Dialogfeld Bei PowerShell anmelden wird angezeigt, das Sie auffordert, die Anmeldeinformationen einzugeben. Sie können Ihren SQL-Benutzernamen und Ihr SQL-Kennwort verwenden, um eine Verbindung mit Ihrer SQL Server-Instanz unter Linux herzustellen.
  • Verwenden des Get-SqlInstance Cmdlets zum Herstellen einer Verbindung mit den Server und Anzeigen einiger Eigenschaften

Optional können Sie einfach die $serverInstance-Variable durch die IP-Adresse oder den Hostnamen Ihrer SQL Server-Instanz ersetzen.

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Connect to the Server and return a few properties
Get-SqlInstance -ServerInstance $serverInstance -Credential $credential
# done

PowerShell sollte Informationen ähnlich der folgenden Ausgabe anzeigen:

Instance Name                   Version    ProductLevel UpdateLevel  HostPlatform HostDistribution
-------------                   -------    ------------ -----------  ------------ ----------------
your_server_instance            14.0.3048  RTM          CU13         Linux        Ubuntu

Hinweis

Wenn für diese Werte nichts angezeigt wird, ist beim Herstellen einer Verbindung mit der SQL Server-Zielinstanz höchstwahrscheinlich ein Fehler aufgetreten. Stellen Sie sicher, dass Sie dieselben Verbindungsinformationen verwenden können, um eine Verbindung über SQL Server Management Studio herzustellen. Überprüfen Sie anschließend die Empfehlungen zur Verbindungsproblembehandlung.

Verwenden des SQL Server PowerShell-Anbieters

Die Verwendung des SQL Server PowerShell-Anbieters ist eine weitere Option zum Herstellen einer Verbindung mit Ihrer SQL Server-Instanz. Dieser Anbieter ermöglicht Ihnen die Navigation Ihrer SQL Server-Instanz über die Befehlszeile, so als würden Sie in der Struktur im Objekt-Explorer navigieren. Dieser Anbieter wird standardmäßig als PSDrive (PowerShell-Laufwerk) namens SQLSERVER:\ dargestellt, über welches Sie SQL Server-Instanzen, auf die Ihr Domänenkonto zugreifen kann, mit & verbinden und durchsuchen können. Informationen zum Einrichten der Active Directory-Authentifizierung für SQL Server für Linux finden Sie in den Konfigurationsschritten.

Für den SQL Server PowerShell-Anbieter können Sie auch die SQL-Authentifizierung verwenden. Verwenden Sie dazu das New-PSDrive Cmdlet, um ein neues PSDrive zu erstellen, und geben Sie die richtigen Anmeldeinformationen für die Verbindung an.

Das folgende Beispiel zeigt, wie Sie unter Verwendung der SQL-Authentifizierung ein neues PSDrive erstellen.

# NOTE: We are reusing the values saved in the $credential variable from the above example.

New-PSDrive -Name SQLonDocker -PSProvider SqlServer -Root 'SQLSERVER:\SQL\localhost,10002\Default\' -Credential $credential

Sie können überprüfen, ob das Laufwerk erstellt wurde, indem Sie das Cmdlet Get-PSDrive ausführen.

Get-PSDrive

Sobald Sie das neue PSDrive erstellt haben, können Sie damit beginnen, darin zu navigieren.

dir SQLonDocker:\Databases

Nachstehend ist eine Beispielausgabe aufgeführt. Möglicherweise stellen Sie fest, dass diese Ausgabe dem entspricht, was SQL Server Management Studio (SSMS) auf dem Knoten "Databases" anzeigt. Es werden die Benutzerdatenbanken angezeigt, aber nicht die Systemdatenbanken.

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2022   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2022 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2022 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2022 Normal      172.00 MB   74.76 MB Simple       130 sa
AdventureWorksDW2022 Normal      208.00 MB   40.57 MB Simple       140 sa

Wenn Sie alle Datenbanken in Ihrer Instanz anzeigen müssen, bietet sich beispielsweise das Cmdlet Get-SqlDatabase an.

Abrufen von Datenbanken

Ein wichtiges Cmdlet, das Sie kennen müssen, ist Get-SqlDatabase. Bei vielen Vorgängen, die eine Datenbank oder Objekte in einer Datenbank einbeziehen, kann das Cmdlet Get-SqlDatabase verwendet werden. Wenn Sie Werte für den -ServerInstance-Parameter und den -Database-Parameter angeben, wird nur dieses Datenbankobjekt abgerufen. Wenn Sie jedoch nur den -ServerInstance-Parameter angeben, wird eine vollständige Liste aller Datenbanken in dieser Instanz zurückgegeben.

# NOTE: We are reusing the values saved in the $credential variable from the above example.

# Connect to the Instance and retrieve all databases
Get-SqlDatabase -ServerInstance ServerB -Credential $credential

Hier ist ein Beispiel dafür, was der Befehl Get-SqlDatabase zurückgibt:

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2022   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2022 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2022 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2022 Normal      172.00 MB   74.88 MB Simple       130 sa
AdventureWorksDW2022 Normal      208.00 MB   40.63 MB Simple       140 sa
master               Normal        6.00 MB  600.00 KB Simple       140 sa
model                Normal       16.00 MB    5.70 MB Full         140 sa
msdb                 Normal       15.50 MB    1.14 MB Simple       140 sa
tempdb               Normal       16.00 MB    5.49 MB Simple       140 sa

Untersuchen von SQL Server-Fehlerprotokollen

Die folgenden Schritte verwenden PowerShell, um Fehlerprotokolle auf Ihrer SQL Server-Instanz unter Linux zu untersuchen.

Kopieren Sie die folgenden Befehle in die PowerShell-Eingabeaufforderung. Die Ausführung dieser Befehle kann einige Minuten dauern. Diese Befehle bewirken Folgendes:

  • Ein Dialogfeld wird angezeigt, das Sie auffordert, den Hostnamen oder die IP-Adresse Ihrer Instanz einzugeben.
  • Das Dialogfeld Bei PowerShell anmelden wird angezeigt, das Sie auffordert, die Anmeldeinformationen einzugeben. Sie können Ihren SQL-Benutzernamen und Ihr SQL-Kennwort verwenden, um eine Verbindung mit Ihrer SQL Server-Instanz unter Linux herzustellen.
  • Verwenden Sie das Get-SqlErrorLog Cmdlet, um eine Verbindung mit der SQL Server-Instanz unter Linux herzustellen und Fehlerprotokolle seit Yesterday abzurufen.

Alternativ dazu können Sie die $serverInstance-Variable durch die IP-Adresse oder den Hostnamen Ihrer SQL Server-Instanz ersetzen.

# Prompt for instance & credentials to login into SQL Server
$serverInstance = Read-Host "Enter the name of your instance"
$credential = Get-Credential

# Retrieve error logs since yesterday
Get-SqlErrorLog -ServerInstance $serverInstance -Credential $credential -Since Yesterday
# done

Erkunden Sie Cmdlets, die derzeit in PowerShell verfügbar sind

Während das SqlServer-Modul derzeit über 109 Cmdlets in Windows PowerShell verfügt, sind nur 62 der 109 in PowerShell verfügbar. Unten finden Sie eine vollständige Liste der derzeit verfügbaren 62 Cmdlets. Eine ausführliche Dokumentation aller Cmdlets im SqlServer-Modul finden Sie in der Cmdlet-Referenz zu SqlServer.

Der folgende Befehl zeigt alle Cmdlets an, die in der von Ihnen verwendeten PowerShell-Version verfügbar sind.

Get-Command -Module SqlServer -CommandType Cmdlet |
Sort-Object -Property Noun |
Select-Object Name
  • ConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlName
  • Get-SqlAgent
  • Get-SqlAgentJob
  • Get-SqlAgentJobHistory
  • Get-SqlAgentJobSchedule
  • Get-SqlAgentJobStep
  • Get-SqlAgentSchedule
  • Invoke-SqlAssessment
  • Get-SqlAssessmentItem
  • Remove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabase
  • Suspend-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListener
  • Add-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondary
  • New-SqlBackupEncryptionOption
  • Get-SqlBackupHistory
  • Invoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKey
  • Get-SqlColumnEncryptionKey
  • Remove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKey
  • Remove-SqlColumnMasterKey
  • New-SqlColumnMasterKey
  • Get-SqlCredential
  • Set-SqlCredential
  • New-SqlCredential
  • Remove-SqlCredential
  • New-SqlCspColumnMasterKeySettings
  • Get-SqlDatabase
  • Restore-SqlDatabase
  • Backup-SqlDatabase
  • Set-SqlErrorLog
  • Get-SqlErrorLog
  • New-SqlHADREndpoint
  • Set-SqlHADREndpoint
  • Get-SqlInstance
  • Add-SqlLogin
  • Remove-SqlLogin
  • Get-SqlLogin
  • Set-SqlSmartAdmin
  • Get-SqlSmartAdmin
  • Read-SqlTableData
  • Write-SqlTableData
  • Read-SqlViewData
  • Read-SqlXEvent
  • Convert-UrnToPath