Ejecutar los pasos Windows PowerShell del Agente SQL Server

Se aplica a: SQL Server Not supported. Azure SQL Database Azure Synapse Analytics Analytics Platform System (PDW)

Use el Agente SQL Server para ejecutar scripts de SQL Server PowerShell en horas programadas.

Nota:

Hay dos módulos de SQL Server PowerShell: SqlServer y SQLPS.

El módulo SqlServer es el módulo de PowerShell actual que se va a usar.

El módulo SQLPS está incluido en la instalación de SQL Server (por motivos de compatibilidad con versiones anteriores), pero ya no se actualiza.

El módulo SqlServer contiene versiones actualizadas de los cmdlets en SQLPS e incluye cmdlets para admitir las características más recientes de SQL.

Instale el módulo SqlServer desde la Galería de PowerShell.

Para más información, consulte el artículo sobre SQL Server PowerShell.

A partir de SQL Server 2019, puede deshabilitar SQLPS. En la primera línea de un paso de trabajo del tipo PowerShell puede agregar #NOSQLPS, que impide que el Agente SQL cargue de forma automática el módulo SQLPS. Ahora, el trabajo del Agente SQL ejecutará la versión de PowerShell instalada en el equipo y, después, podrá usar cualquier otro módulo de PowerShell que quiera.

Para usar el módulo SqlServer en el paso de trabajo del Agente SQL, puede colocar este código en las dos primeras líneas del script.

#NOSQLPS
Import-Module -Name SqlServer

Ejecución de PowerShell desde el Agente SQL Server

Hay varios tipos de pasos de trabajo del Agente SQL Server. Cada tipo se asocia a un subsistema que implementa un entorno concreto, como un agente de replicación o un entorno del símbolo del sistema. Puede codificar scripts de Windows PowerShell y, a continuación, utilizar el Agente SQL Server para incluir los scripts en trabajos que se ejecuten en los momentos programados o como respuesta a eventos de SQL Server. Los scripts de Windows PowerShell pueden ejecutarse mediante un paso de trabajo del símbolo del sistema o un paso de trabajo de PowerShell.

  • Use un paso de trabajo de PowerShell para que el subsistema del Agente SQL Server ejecute la utilidad sqlps, que inicia PowerShell e importa el módulo sqlps. Si está ejecutando SQL Server 2019 o una versión posterior, se recomienda usar el módulo SqlServer en el paso de trabajo del Agente SQL.

  • Use un paso de trabajo de símbolo del sistema para ejecutar PowerShell.exe y especificar un script que importa el módulo sqlps .

Precaución sobre el consumo de memoria

Cada paso de trabajo del Agente SQL Server que ejecuta PowerShell con el módulo sqlps inicia un proceso que consume aproximadamente 20 MB de memoria. Si ejecuta muchos pasos de trabajo de Windows PowerShell simultáneos, el rendimiento se puede ver afectado adversamente.

Crear un paso de trabajo de PowerShell

Creación de un paso de trabajo de PowerShell

  1. Expanda el Agente SQL Server, cree un trabajo o haga clic con el botón derecho en uno existente y, después, seleccione Propiedades. Para obtener más información acerca de cómo crear un trabajo, vea Crear trabajos.

  2. En el cuadro de diálogo Propiedades del trabajo, seleccione la página Pasos y, a continuación, Nuevo.

  3. En el cuadro de diálogo Nuevo paso de trabajo , escriba un nombre para el paso de trabajo en Nombre del paso.

  4. En la lista Tipo, seleccione PowerShell.

  5. En la lista Ejecutar como , seleccione la cuenta de proxy con las credenciales que utilizará el trabajo.

  6. En el cuadro Comando , especifique la sintaxis del script de PowerShell que se ejecutará para el paso de trabajo. También puede seleccionar Abrir y elegir un archivo que contenga la sintaxis del script.

  7. Seleccione la página Avanzadas para establecer las siguientes opciones de paso de trabajo: acción que se llevará a cabo si el paso de trabajo progresa o no, número de veces que el Agente SQL Server debe intentar ejecutar el paso de trabajo y frecuencia de los intentos.

Crear un paso de trabajo del símbolo del sistema

Creación de un paso de trabajo de CmdExec

  1. Expanda el Agente SQL Server, cree un trabajo o haga clic con el botón derecho en uno existente y, después, seleccione Propiedades. Para obtener más información acerca de cómo crear un trabajo, vea Crear trabajos.

  2. En el cuadro de diálogo Propiedades del trabajo, seleccione la página Pasos y, a continuación, Nuevo.

  3. En el cuadro de diálogo Nuevo paso de trabajo , escriba un nombre para el paso de trabajo en Nombre del paso.

  4. En la lista Tipo , elija Sistema operativo (CmdExec) .

  5. En la lista Ejecutar como , seleccione la cuenta e proxy con las credenciales que utilizará el trabajo. De forma predeterminada, los pasos de trabajo de CmdExec se ejecutan en el contexto de la cuenta de servicio de Agente SQL Server.

  6. En el cuadro Procesar código de salida de un comando correcto , escriba un valor de 0 a 999999.

  7. En el cuadro Comando, especifique los comandos que empiecen por PowerShell.exe con parámetros que especifiquen el script de PowerShell que se va a ejecutar. Estos ejemplos son similares a la sintaxis para ejecutar comandos de PowerShell desde un símbolo del sistema de Windows. Consulte PowerShell.exe -? para ver todas las opciones de sintaxis posibles.

    • Ejemplo 1: Ejecuta un cmdlet simple.
         PowerShell.exe -Command "Get-Date"
      
    • Ejemplo 2: Ejecuta una consulta mediante SQLCmd.exe en el servidor actual (en el ejemplo se usa el remplazo del token del Agente SQL).
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • Ejemplo 3: Ejecuta un script de PowerShell (mediante pwsh.exe, el nombre del ejecutable en PowerShell 7.0, que debe instalarse en el servidor). Tenga en cuenta que la ruta de acceso al script es local en el servidor donde el Agente SQL está en ejecución.
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. Seleccione la página Avanzadas para configurar las opciones del paso de trabajo como, por ejemplo: la acción que se realizará si el paso de trabajo es correcto o si es erróneo, el número de veces que Agente SQL Server intentará ejecutar el paso de trabajo y el archivo en el que Agente SQL Server puede escribir la salida del paso de trabajo. Solo los miembros del rol fijo de servidor sysadmin pueden escribir la salida de paso de trabajo en un archivo del sistema operativo.

Consulte también