Compartir a través de


Uso de PowerShell en Linux para administrar SQL Server en Linux

Se aplica a:SQL Server en Linux

En este artículo se presenta SQL Server PowerShell y se explica un par de ejemplos sobre cómo usarlo con PowerShell en macOS y Linux. PowerShell es ahora un proyecto de código abierto en GitHub.

Para obtener más información sobre Windows PowerShell, consulte ¿Qué es Windows PowerShell?

Opciones de editor multiplataforma

Todos los pasos siguientes para que PowerShell se ejecute en un terminal normal, o también puede ejecutarlos desde un terminal dentro de Visual Studio Code. Visual Studio Code está disponible en macOS y Linux. Para obtener más información sobre la extensión MSSQL, consulte ¿Qué es la extensión MSSQL para Visual Studio Code?

Instalar PowerShell

Para obtener más información sobre cómo instalar PowerShell en varias plataformas compatibles y experimentales, consulte los siguientes artículos:

Instalación del módulo SqlServer

El módulo SqlServer se mantiene en la Galería de PowerShell. Al trabajar con SQL Server, siempre debe usar la versión más reciente del SqlServer módulo de PowerShell.

Para instalar el SqlServer módulo, abra una sesión de PowerShell y ejecute el código siguiente:

Install-Module -Name SqlServer

Para obtener más información sobre cómo instalar el SqlServer módulo desde la Galería de PowerShell, consulte Instalación del módulo de POWERShell de SQL Server.

Uso del módulo SqlServer

Comencemos iniciando PowerShell. Si está en macOS o Linux, abra una sesión de terminal en el equipo y escriba pwsh para iniciar una nueva sesión de PowerShell. En Windows, use Win+R y escriba pwsh para iniciar una nueva sesión de PowerShell.

pwsh

SQL Server proporciona un módulo de PowerShell denominado SqlServer. Puede usar el módulo SqlServer para importar los componentes de SQL Server, como el proveedor y los cmdlets, dentro de un entorno o script de PowerShell.

Copie y pegue el siguiente comando en el símbolo del sistema de PowerShell para importar el módulo SqlServer en la sesión actual de PowerShell:

Import-Module SqlServer

Escriba el siguiente comando en el símbolo del sistema de PowerShell para comprobar que el módulo SqlServer se importó correctamente:

Get-Module -Name SqlServer

PowerShell debe mostrar información similar al siguiente resultado:

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

Conectarse a SQL Server y obtener información del servidor

En los pasos siguientes se usa PowerShell para conectarse a la instancia de SQL Server en Linux y mostrar un par de propiedades de servidor.

Copie y pegue los siguientes comandos en el símbolo del sistema de PowerShell. Al ejecutar estos comandos, PowerShell:

  • Muestran un cuadro de diálogo que le pide el nombre de host o la dirección IP de la instancia.
  • Mostrará el cuadro de diálogo Solicitud de credenciales para Windows PowerShell, que le solicita las credenciales. Puede usar el nombre de usuario y la contraseña de SQL para conectarse a su instancia de SQL Server en Linux.
  • Use el Get-SqlInstance cmdlet para conectarse a Server y mostrar algunas propiedades.

Opcionalmente, puede reemplazar la variable $serverInstance por la dirección IP o el nombre de host de la instancia de SQL Server.

# 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 debe mostrar información similar al siguiente resultado:

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

Nota

Si no se muestra nada para estos valores, lo más probable es que se produzca un error en la conexión con la instancia de SQL Server de destino. Asegúrese de que puede usar la misma información de conexión para conectarse desde SQL Server Management Studio. Luego revise las recomendaciones para solucionar problemas de conexión.

Use el proveedor de SQL Server PowerShell

Otra opción para conectarse a la instancia de SQL Server es usar el proveedor de SQL Server PowerShell. El uso de este proveedor permite navegar por la instancia de SQL Server como si estuviera navegando por la estructura de árbol en el Explorador de objetos, pero en el cmdline. De manera predeterminada, este proveedor se presenta como un PSDrive denominado SQLSERVER:\, que puede usar para conectar & navegar por instancias de SQL Server a las que tenga acceso su cuenta de dominio. Consulte los pasos de configuración para obtener información sobre cómo configurar la autenticación de Active Directory para SQL Server en Linux.

También puede usar la autenticación de SQL con el proveedor de SQL Server PowerShell. Para ello, use el New-PSDrive cmdlet para crear un nuevo PSDrive y proporcionar las credenciales adecuadas para conectarse.

En el siguiente ejemplo, verá cómo crear un nuevo PSDrive mediante la autenticación de SQL.

# 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

Puede confirmar que la unidad se creó ejecutando el cmdlet Get-PSDrive.

Get-PSDrive

Una vez que haya creado el nuevo PSDrive, puede empezar a navegar por él.

dir SQLonDocker:\Databases

Este es el aspecto que podría tener el resultado: Es posible que observe que esta salida es similar a la que muestra SQL Server Management Studio (SSMS) en el nodo Bases de datos. Muestra las bases de datos de usuario, pero no las bases de datos del sistema.

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

Si necesita ver todas las bases de datos en la instancia, una opción es usar el cmdlet Get-SqlDatabase.

Obtención de bases de datos

Un cmdlet importante que debe conocer es Get-SqlDatabase. Puede usar el cmdlet Get-SqlDatabase para muchas operaciones que implican una base de datos u objetos contenidos en una. Si proporciona valores para los parámetros -ServerInstance y -Database, solo se recupera ese objeto de base de datos. Pero, si solo especifica el parámetro -ServerInstance, se devuelve una lista completa de todas las bases de datos de esa instancia.

# 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

Este es un ejemplo de lo que devuelve el comando Get-SqlDatabase:

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

Examinar registros de errores de SQL Server

En los pasos siguientes se usa PowerShell para examinar los registros de errores de conexión en la instancia de SQL Server en Linux.

Copie y pegue los siguientes comandos en el símbolo del sistema de PowerShell. Pueden tardar unos minutos en ejecutarse. Estos comandos realizan los pasos siguientes:

  • Muestran un cuadro de diálogo que le pide el nombre de host o la dirección IP de la instancia.
  • Muestran el cuadro de diálogo Solicitud de credenciales para Windows PowerShell, que le solicita las credenciales. Puede usar el nombre de usuario y la contraseña de SQL para conectarse a su instancia de SQL Server en Linux.
  • Use el Get-SqlErrorLog cmdlet para conectarse a la instancia de SQL Server en Linux y recuperar registros de errores desde Yesterday

Opcionalmente, puede reemplazar la variable $serverInstance por la dirección IP o el nombre de host de la instancia de SQL Server.

# 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

Exploración de cmdlets disponibles actualmente en PowerShell

Aunque el módulo SqlServer tiene actualmente 109 cmdlets disponibles en Windows PowerShell, solo hay disponibles 62 de los 109 en PowerShell. A continuación se muestra una lista completa de 62 cmdlets disponibles actualmente. Para obtener documentación detallada de todos los cmdlets del módulo SqlServer, vea la referencia de cmdlets de SqlServer.

El siguiente comando muestra todos los cmdlets disponibles en la versión de PowerShell que está usando.

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