Gestire SQL Server in Linux con PowerShell CoreManage SQL Server on Linux with PowerShell Core

Questo articolo presenta SQL Server PowerShell e illustra alcuni esempi di come usarlo con PowerShell Core (PS Core) in macOS e Linux.This article introduces SQL Server PowerShell and walks you through a couple of examples on how to use it with PowerShell Core (PS Core) on macOS & Linux. PowerShell Core è ora un progetto open source in GitHub.PowerShell Core is now an Open Source project on GitHub.

Opzioni dell'editor multipiattaformaCross-platform editor options

Tutti i passaggi di PowerShell Core seguenti funzioneranno in un terminale normale. In alternativa, è possibile eseguirli da un terminale all'interno di VS Code o di Azure Data Studio.All of the steps PowerShell Core below will work in a regular terminal, or you can run them from a terminal within VS Code or Azure Data Studio. Sia VS Code che Azure Data Studio sono disponibili in macOS e Linux.Both VS Code and Azure Data Studio are available on macOS and Linux. Per altre informazioni su Azure Data Studio, vedere questo argomento di avvio rapido.For more information on Azure Data Studio, see this quickstart. È anche possibile usare l'estensione PowerShell.You may also want to consider using the PowerShell extension for it.

Installazione di PowerShell CoreInstalling PowerShell Core

Per altre informazioni sull'installazione di PowerShell Core in varie piattaforme supportate e sperimentali, vedere gli articoli seguenti:For more information on installing PowerShell Core on various supported and experimental platforms, see the following articles:

Installare il modulo SqlServerInstall the SqlServer module

Il modulo SqlServer viene mantenuto in PowerShell Gallery.The SqlServer module is maintained in the PowerShell Gallery. Quando si lavora con SQL Server, è consigliabile usare sempre la versione più recente del modulo di PowerShell SqlServer.When working with SQL Server, you should always use the most recent version of the SqlServer PowerShell module.

Per installare il modulo SqlServer, aprire una sessione di PowerShell Core ed eseguire il codice seguente:To install the SqlServer module, open a PowerShell Core session and run the following code:

Install-Module -Name SqlServer

Per altre informazioni su come installare il modulo SqlServer da PowerShell Gallery, vedere questa pagina.For more information on how to install the SqlServer module from the PowerShell Gallery, see this page.

Uso del modulo SqlServerUsing the SqlServer module

Avviare PowerShell Core.Let's start by launching PowerShell Core. Se si usa macOS o Linux, aprire una sessione del terminale sul computer e digitare pwsh per avviare una nuova sessione di PowerShell Core.If you are on macOS or Linux, Open a terminal session on your computer, and type pwsh to launch a new PowerShell Core session. In Windows usare Win+R e digitare pwsh per avviare una nuova sessione di PowerShell Core.On Windows, use Win+R, and type pwsh to launch a new PowerShell Core session.

pwsh

SQL Server fornisce un modulo di PowerShell denominato SqlServer.SQL Server provides a PowerShell module named SqlServer. È possibile usare il modulo SqlServer per importare i componenti di SQL Server (provider e cmdlet di SQL Server) in un ambiente o uno script di PowerShell.You can use the SqlServer module to import the SQL Server components (SQL Server provider and cmdlets) into a PowerShell environment or script.

Copiare e incollare il comando seguente al prompt di PowerShell per importare il modulo SqlServer nella sessione di PowerShell corrente:Copy and paste the following command at the PowerShell prompt to import the SqlServer module into your current PowerShell session:

Import-Module SqlServer

Digitare il comando seguente al prompt di PowerShell per verificare che il modulo di SqlServer sia stato importato correttamente:Type the following command at the PowerShell prompt to verify that the SqlServer module was imported correctly:

Get-Module -Name SqlServer

PowerShell dovrebbe visualizzare informazioni simili all'output seguente:PowerShell should display information similar to the following output:

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

Connettersi a SQL Server e ottenere informazioni sul serverConnect to SQL Server and get server information

La procedura seguente usa PowerShell Core per connettersi all'istanza di SQL Server in Linux e visualizzare alcune proprietà del server.The following steps use PowerShell Core to connect to your SQL Server instance on Linux and display a couple of server properties.

Copiare e incollare i comandi seguenti al prompt di PowerShell.Copy and paste the following commands at the PowerShell prompt. Quando si eseguono questi comandi, PowerShell effettua le operazioni seguenti:When you run these commands, PowerShell will:

  • Visualizza una finestra di dialogo in cui viene richiesto il nome host o l'indirizzo IP dell'istanzaDisplay a dialog that prompts you for the hostname or IP address of your instance
  • Visualizza la finestra di dialogo PowerShell credential request (Richiesta credenziali di PowerShell), in cui vengono richieste le credenziali.Display the PowerShell credential request dialog, which prompts you for the credentials. È possibile usare il nome utente SQL e la password SQL per connettersi all'istanza di SQL Server in LinuxYou can use your SQL username and SQL password to connect to your SQL Server instance on Linux
  • Usare il cmdlet Get-SqlInstance per connettersi al server e visualizzare alcune proprietàUse the Get-SqlInstance cmdlet to connect to the Server and display a few properties

Facoltativamente, è possibile sostituire la variabile $serverInstance con l'indirizzo IP o il nome host dell'istanza di SQL Server.Optionally, you can just replace the $serverInstance variable with the IP address or the hostname of your SQL Server instance.

# 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 dovrebbe visualizzare informazioni simili all'output seguente:PowerShell should display information similar to the following output:

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

Nota

Se non viene visualizzato nulla per questi valori, la connessione all'istanza di SQL Server di destinazione probabilmente non è riuscita.If nothing is displayed for these values, the connection to the target SQL Server instance most likely failed. Verificare che sia possibile usare le stesse informazioni di connessione per connettersi da SQL Server Management Studio.Make sure that you can use the same connection information to connect from SQL Server Management Studio. Rivedere poi i consigli per la risoluzione dei problemi di connessione.Then review the connection troubleshooting recommendations.

Uso del provider SQL Server PowerShellUsing the SQL Server PowerShell Provider

Un'altra opzione per connettersi all'istanza di SQL Server prevede l'uso del provider SQL Server PowerShell.Another option for connecting to your SQL Server instance is to use the SQL Server PowerShell Provider. L'uso del provider consente di esplorare l'istanza di SQL Server come se si stesse esplorando la struttura ad albero in Esplora oggetti, ma nella riga di comando.Using the provider allows you to navigate SQL Server instance similar to as if you were navigating the tree structure in Object Explorer, but at the cmdline. Per impostazione predefinita, questo provider viene presentato come unità PSDrive denominata SQLSERVER:\, che è possibile usare per connettersi alle istanze di SQL Server a cui l'account di dominio ha accesso ed esplorarle.By default this provider is presented as a PSDrive named SQLSERVER:\ which you can use to connect & navigate SQL Server instances that your domain account has access to. Per informazioni su come configurare l'autenticazione di Active Directory per SQL Server in Linux, vedere Passaggi di configurazione.See Configuration steps for information on how to setup Active Directory authentication for SQL Server on Linux.

È anche possibile usare l'autenticazione di SQL con il provider SQL Server PowerShell.You can also use SQL authentication with the SQL Server PowerShell Provider. A questo scopo, usare il cmdlet New-PSDrive per creare una nuova unità PSDrive e immettere le credenziali appropriate per la connessione.To do this, use the New-PSDrive cmdlet to create a new PSDrive and supply the proper credentials to connect.

Nell'esempio seguente viene illustrato come creare una nuova unità PSDrive usando l'autenticazione di SQL.In this example below, you will see an example of how to create a new PSDrive using SQL authentication.

# 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

Per verificare che l'unità sia stata creata, eseguire il cmdlet Get-PSDrive.You can confirm that the drive was created by running the Get-PSDrive cmdlet.

Get-PSDrive

Dopo aver creato la nuova unità PSDrive, è possibile iniziare a esplorarla.Once you have created your new PSDrive, you can start navigating it.

dir SQLonDocker:\Databases

L'output potrebbe essere simile al seguente.Here is what the output might look like. È possibile notare che questo output è simile a quello che verrà visualizzato da SSMS nel nodo Databases.You might notice this output is similar to what SSMS will display at the Databases node. Visualizza i database utente, ma non i database di sistema.It displays the user databases, but not the system databases.

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

Se è necessario visualizzare tutti i database dell'istanza, è possibile usare il cmdlet Get-SqlDatabase.If you need to see all databases on your instance, one option is to use the Get-SqlDatabase cmdlet.

Ottenere i databaseGet Databases

Un cmdlet importante da conoscere è Get-SqlDatabase.An important cmdlet to know is the Get-SqlDatabase. Per molte operazioni che coinvolgono un database o gli oggetti all'interno di un database, è possibile usare il cmdlet Get-SqlDatabase.For many operations that involve a database, or objects within a database, the Get-SqlDatabase cmdlet can be used. Se si specificano i valori per entrambi i parametri -ServerInstance e -Database, verrà recuperato solo l'oggetto di database.If you supply values for both the -ServerInstance and -Database parameters, only that one database object will be retrieved. Se tuttavia si specifica solo il parametro -ServerInstance, verrà restituito un elenco completo di tutti i database di tale istanza.However, if you specify only the -ServerInstance parameter, a full list of all databases on that instance will be returned.

# 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

Di seguito è riportato un esempio di output restituito dal comando Get-SqlDatabase precedente:Here is a sample of what might be returned by the Get-SqlDatabase command above:

Name                 Status           Size     Space  Recovery Compat. Owner
                                            Available  Model     Level
----                 ------           ---- ---------- -------- ------- -----
AdventureWorks2016   Normal      209.63 MB    1.31 MB Simple       130 sa
AdventureWorksDW2012 Normal      167.00 MB   32.47 MB Simple       110 sa
AdventureWorksDW2014 Normal      188.00 MB   78.10 MB Simple       120 sa
AdventureWorksDW2016 Normal      172.00 MB   74.88 MB Simple       130 sa
AdventureWorksDW2017 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

Esaminare i log degli errori di SQL ServerExamine SQL Server error logs

La procedura seguente usa PowerShell Core per esaminare i log degli errori connettendosi all'istanza di SQL Server in Linux.The following steps use PowerShell Core to examine error logs connect on your SQL Server instance on Linux.

Copiare e incollare i comandi seguenti al prompt di PowerShell.Copy and paste the following commands at the PowerShell prompt. L'esecuzione dei comandi potrebbe richiedere alcuni minuti.They might take a few minutes to run. Questi comandi eseguono i passaggi seguenti:These commands do the following steps:

  • Visualizzano una finestra di dialogo in cui viene richiesto il nome host o l'indirizzo IP dell'istanzaDisplay a dialog that prompts you for the hostname or IP address of your instance
  • Visualizzano la finestra di dialogo PowerShell credential request (Richiesta credenziali di PowerShell), in cui vengono richieste le credenziali.Display the PowerShell credential request dialog that prompts you for the credentials. È possibile usare il nome utente SQL e la password SQL per connettersi all'istanza di SQL Server in LinuxYou can use your SQL username and SQL password to connect to your SQL Server instance on Linux
  • Usare il cmdlet Get-SqlErrorLog per connettersi all'istanza di SQL Server in Linux e recuperare i log degli errori da ieri (Yesterday)Use the Get-SqlErrorLog cmdlet to connect to the SQL Server instance on Linux and retrieve error logs since Yesterday

Facoltativamente, è possibile sostituire la variabile $serverInstance con l'indirizzo IP o il nome host dell'istanza di SQL Server.Optionally, you can replace the $serverInstance variable with the IP address or the hostname of your SQL Server instance.

# 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

Esplorare i cmdlet attualmente disponibili in PS coreExplore cmdlets currently available in PS Core

Nonostante il modulo SqlServer abbia attualmente 109 cmdlet disponibili in Windows PowerShell, in PSCore ne sono disponibili solo 62.While the SqlServer module currently has 109 cmdlets available in Windows PowerShell, only 62 of the 109 are available in PSCore. Di seguito è riportato un elenco completo dei 59 cmdlet attualmente disponibili.A full list of 59 cmdlets currently available is included below. Per una documentazione dettagliata di tutti i cmdlet del modulo SqlServer, vedere le informazioni di riferimento sui cmdlet di SqlServer.For in-depth documentation of all cmdlets in the SqlServer module, see the SqlServer cmdlet reference.

Il comando seguente consente di visualizzare tutti i cmdlet disponibili nella versione di PowerShell in uso.The following command will show you all of the cmdlets available on the version of PowerShell you are using.

Get-Command -Module SqlServer -CommandType Cmdlet |
SORT -Property Noun |
SELECT Name
  • ConvertFrom-EncodedSqlNameConvertFrom-EncodedSqlName
  • ConvertTo-EncodedSqlNameConvertTo-EncodedSqlName
  • Get-SqlAgentGet-SqlAgent
  • Get-SqlAgentJobGet-SqlAgentJob
  • Get-SqlAgentJobHistoryGet-SqlAgentJobHistory
  • Get-SqlAgentJobScheduleGet-SqlAgentJobSchedule
  • Get-SqlAgentJobStepGet-SqlAgentJobStep
  • Get-SqlAgentScheduleGet-SqlAgentSchedule
  • Invoke-SqlAssessmentInvoke-SqlAssessment
  • Get-SqlAssessmentItemGet-SqlAssessmentItem
  • Remove-SqlAvailabilityDatabaseRemove-SqlAvailabilityDatabase
  • Resume-SqlAvailabilityDatabaseResume-SqlAvailabilityDatabase
  • Add-SqlAvailabilityDatabaseAdd-SqlAvailabilityDatabase
  • Suspend-SqlAvailabilityDatabaseSuspend-SqlAvailabilityDatabase
  • New-SqlAvailabilityGroupNew-SqlAvailabilityGroup
  • Set-SqlAvailabilityGroupSet-SqlAvailabilityGroup
  • Remove-SqlAvailabilityGroupRemove-SqlAvailabilityGroup
  • Switch-SqlAvailabilityGroupSwitch-SqlAvailabilityGroup
  • Join-SqlAvailabilityGroupJoin-SqlAvailabilityGroup
  • Revoke-SqlAvailabilityGroupCreateAnyDatabaseRevoke-SqlAvailabilityGroupCreateAnyDatabase
  • Grant-SqlAvailabilityGroupCreateAnyDatabaseGrant-SqlAvailabilityGroupCreateAnyDatabase
  • New-SqlAvailabilityGroupListenerNew-SqlAvailabilityGroupListener
  • Set-SqlAvailabilityGroupListenerSet-SqlAvailabilityGroupListener
  • Add-SqlAvailabilityGroupListenerStaticIpAdd-SqlAvailabilityGroupListenerStaticIp
  • Set-SqlAvailabilityReplicaSet-SqlAvailabilityReplica
  • Remove-SqlAvailabilityReplicaRemove-SqlAvailabilityReplica
  • New-SqlAvailabilityReplicaNew-SqlAvailabilityReplica
  • Set-SqlAvailabilityReplicaRoleToSecondarySet-SqlAvailabilityReplicaRoleToSecondary
  • New-SqlBackupEncryptionOptionNew-SqlBackupEncryptionOption
  • Get-SqlBackupHistoryGet-SqlBackupHistory
  • Invoke-SqlcmdInvoke-Sqlcmd
  • New-SqlCngColumnMasterKeySettingsNew-SqlCngColumnMasterKeySettings
  • Remove-SqlColumnEncryptionKeyRemove-SqlColumnEncryptionKey
  • Get-SqlColumnEncryptionKeyGet-SqlColumnEncryptionKey
  • Remove-SqlColumnEncryptionKeyValueRemove-SqlColumnEncryptionKeyValue
  • Add-SqlColumnEncryptionKeyValueAdd-SqlColumnEncryptionKeyValue
  • Get-SqlColumnMasterKeyGet-SqlColumnMasterKey
  • Remove-SqlColumnMasterKeyRemove-SqlColumnMasterKey
  • New-SqlColumnMasterKeyNew-SqlColumnMasterKey
  • Get-SqlCredentialGet-SqlCredential
  • Set-SqlCredentialSet-SqlCredential
  • New-SqlCredentialNew-SqlCredential
  • Remove-SqlCredentialRemove-SqlCredential
  • New-SqlCspColumnMasterKeySettingsNew-SqlCspColumnMasterKeySettings
  • Get-SqlDatabaseGet-SqlDatabase
  • Restore-SqlDatabaseRestore-SqlDatabase
  • Backup-SqlDatabaseBackup-SqlDatabase
  • Set-SqlErrorLogSet-SqlErrorLog
  • Get-SqlErrorLogGet-SqlErrorLog
  • New-SqlHADREndpointNew-SqlHADREndpoint
  • Set-SqlHADREndpointSet-SqlHADREndpoint
  • Get-SqlInstanceGet-SqlInstance
  • Add-SqlLoginAdd-SqlLogin
  • Remove-SqlLoginRemove-SqlLogin
  • Get-SqlLoginGet-SqlLogin
  • Set-SqlSmartAdminSet-SqlSmartAdmin
  • Get-SqlSmartAdminGet-SqlSmartAdmin
  • Read-SqlTableDataRead-SqlTableData
  • Write-SqlTableDataWrite-SqlTableData
  • Read-SqlViewDataRead-SqlViewData
  • Read-SqlXEventRead-SqlXEvent
  • Convert-UrnToPathConvert-UrnToPath

Vedere ancheSee also