Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 obtener más información, visite 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 automáticamente el módulo SQLPS. Ahora el trabajo del Agente SQL ejecuta la versión de PowerShell instalada en el equipo y, a continuación, puede usar cualquier otro módulo de PowerShell que desee.
Para usar el módulo SqlServer en el paso del trabajo del Agente SQL, puedes colocar este código en las dos primeras líneas de tu 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
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 sobre cómo crear un trabajo, vea /sql/ssms/agent/create-jobs.
En el cuadro de diálogo Propiedades del trabajo, seleccione la página Pasos y, a continuación, Nuevo.
En el cuadro de diálogo Nuevo paso de trabajo, escriba un trabajo Nombre del paso.
En la lista Tipo, seleccione PowerShell.
En la lista Ejecutar como, seleccione la cuenta de proxy con las credenciales que usará el trabajo.
En el cuadro de comandos , escriba la sintaxis del script de PowerShell que se ejecutará para la etapa de trabajo. También puede seleccionar Abrir y elegir un archivo que contenga la sintaxis del script.
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
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 sobre cómo crear un trabajo, vea /sql/ssms/agent/create-jobs.
En el cuadro de diálogo Propiedades del trabajo, seleccione la página Pasos y, a continuación, Nuevo.
En el cuadro de diálogo Nuevo paso de trabajo, escriba un trabajo Nombre del paso.
En la lista Tipo, elija Sistema Operativo (CmdExec).
En la lista Ejecutar como, seleccione la cuenta de proxy con las credenciales que el trabajo utilizará. De forma predeterminada, los pasos de trabajo de CmdExec se ejecutan en el contexto de la cuenta de servicio del Agente SQL Server.
En el cuadro Código de salida de proceso de un comando exitoso, escriba un valor de 0 a 999999.
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). La ruta de acceso al script es local en el servidor donde se ejecuta el Agente SQL.PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1
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 de servidor fijo sysadmin pueden escribir la salida de la etapa de trabajo en un archivo de sistema operativo.