Executar etapas do Windows PowerShell no SQL Server Agent

Aplica-se a: SQL Server Not supported. Banco de Dados SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System)

Use o SQL Server Agent para executar scripts do SQL Server PowerShell nas horas agendadas.

Observação

Há dois módulos do SQL Server PowerShell; SqlServer e SQLPS.

O módulo SqlServer é o módulo atual do PowerShell a ser usado.

O módulo SQLPS está incluído na instalação do SQL Server (para compatibilidade com versões anteriores), mas não está mais sendo atualizado.

O módulo do SqlServer contém versões atualizadas dos cmdlets no SQLPS e inclui novos cmdlets para dar suporte aos recursos mais recentes do SQL.

Instale o módulo SqlServer da Galeria do PowerShell.

Para obter mais informações, confira SQL Server PowerShell.

Do SQL Server 2019 em diante, é possível desabilitar o SQLPS. Na primeira linha de uma etapa de trabalho do tipo PowerShell, você pode adicionar #NOSQLPS, o que impede o SQL Agent de carregar automaticamente o módulo SQLPS. Agora seu trabalho do SQL Agent executará a versão do PowerShell instalada no computador e você poderá usar qualquer outro módulo do PowerShell desejado.

Para usar o módulo SqlServer na etapa de trabalho do SQL Agent, coloque esse código nas duas primeiras linhas do script.

#NOSQLPS
Import-Module -Name SqlServer

Executar o PowerShell no SQL Server Agent

Existem vários tipos de etapas de trabalho do SQL Server Agent. Cada tipo está associado a um subsistema que implementa um ambiente específico, como um agente de replicação ou ambiente de prompt de comando. Você pode codificar os scripts do Windows PowerShell e usar o SQL Server Agent para incluir os scripts em trabalhos que são executados em horários programados ou em resposta a eventos do SQL Server. Scripts do Windows PowerShell podem ser executados usando uma etapa de trabalho de prompt de comando ou uma etapa de trabalho do PowerShell.

  • Use uma etapa de trabalho do PowerShell para fazer com que o subsistema do SQL Server Agent execute o utilitário sqlps, que inicia o PowerShell e importa o módulo sqlps. Se você estiver executando o SQL Server 2019 ou posterior, recomendamos usar o módulo SqlServer na etapa de trabalho do SQL Agent.

  • Use uma etapa de trabalho de prompt de comando para executar o PowerShell.exe e especifique um script que importa o módulo sqlps .

Cuidado sobre o consumo de memória

Cada etapa de trabalho do SQL Server Agent que executa o PowerShell com o módulo sqlps inicia um processo que consome aproximadamente 20 MB de memória. A execução de um grande número de etapas de trabalho concorrentes do Windows PowerShell pode afetar o desempenho de forma negativa.

Criar uma etapa de trabalho do PowerShell

Criar uma etapa de trabalho do PowerShell

  1. Expanda o SQL Server Agent, crie um novo trabalho ou clique com o botão direito do mouse em um trabalho existente e selecione Propriedades. Para obter mais informações sobre como criar um trabalho, consulte Criando trabalhos.

  2. Na caixa de diálogo Propriedades do Trabalho, clique na página Etapas e selecione Nova.

  3. Na caixa de diálogo Nova Etapa de Trabalho , digite o Nome da etapade trabalho.

  4. Na lista Tipo, selecione PowerShell.

  5. Na lista Executar como , selecione a conta proxy com as credenciais que o trabalho usará.

  6. Na caixa Comando , digite a sintaxe do script PowerShell que será executada para a etapa de trabalho. Como alternativa, clique em Abrir e selecione um arquivo que contenha a sintaxe de script.

  7. Clique na página Avançado para definir as seguintes opções de etapa de trabalho: a ação a tomar em caso de êxito ou falha da etapa, quantas vezes o SQL Server Agent deve ser executado para concluir a etapa com sucesso e com que frequência.

Criar uma etapa de trabalho de prompt de comando

Criar uma etapa de trabalho CmdExec

  1. Expanda o SQL Server Agent, crie um novo trabalho ou clique com o botão direito do mouse em um trabalho existente e selecione Propriedades. Para obter mais informações sobre como criar um trabalho, consulte Criando trabalhos.

  2. Na caixa de diálogo Propriedades do Trabalho, clique na página Etapas e selecione Nova.

  3. Na caixa de diálogo Nova Etapa de Trabalho , digite o Nome da etapade trabalho.

  4. Na lista Tipo , escolha Sistema operacional (CmdExec) .

  5. Na lista Executar como , selecione a conta proxy com as credenciais que o trabalho usará. Por padrão, etapas de trabalho CmdExec são executadas no contexto da conta do serviço do SQL Server Agent .

  6. Na caixa Código de saída do processo de um comando bem sucedido , insira um valor de 0 a 999999.

  7. Na caixa Comando, digite comandos que começam com PowerShell.exe com parâmetros que especificam o script do PowerShell a ser executado. Esses exemplos são semelhantes à sintaxe para executar comandos do PowerShell em um prompt de comando do Windows. Consulte PowerShell.exe -? para ver todas as opções possíveis de sintaxe.

    • Exemplo 1: executa um cmdlet simples.
         PowerShell.exe -Command "Get-Date"
      
    • Exemplo 2: executa uma consulta por meio do SQLCmd.exe no servidor atual (o exemplo usa a substituição de token do SQL Agent).
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • Exemplo 3: executa um script do PowerShell (usando pwsh.exe, o nome executável no PowerShell 7.0, que deve ser instalado no servidor). Observe que o caminho para o script é local para o servidor em que o SQL Agent está em execução.
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. Selecione a página Avançado para definir opções para a etapa de trabalho, como a ação a tomar em caso de êxito ou falha da etapa, quantas vezes o SQL Server Agent deve ser executado para concluir a etapa com sucesso e o arquivo onde o SQL Server Agent pode gravar a saída da etapa. Só membros da função de servidor fixa sysadmin podem gravar a saída de etapas de trabalho em um arquivo do sistema operacional.

Consulte Também