Como executar Script no Powershell v4 através do SQL Server Agent?

9

Olá People!

Essa semana precisei fazer um script para apagar os arquivos de log de um determinado diretório depois que o job do backup diferencial terminasse. Até ai tudo bem, resolvi fazer o mesmo usando powershell e uma vez pronto colocaria como um segundo passo no job (lembrando que desde o SQL Server 2008, somos capazes de criar Jobs para executar os scripts do Windows PowerShell).

O script foi criado e testado no Ambiente de Script Integrado (ISE) e obtive os resultados esperados (vou disponibilizar em outro post o script feito). Tudo lindo, tudo funcionado o que faltava era apenas colocar o código no job e correr para o abraço.

Existem duas formas de executar scripts do PowerShell no SQL Server Agent. Ele pode ser executado como:

  • PowerShell job step
  • Command prompt (CmdExec) job step

Escolhi a opção “PowerShell job step” e criei o step que comentei no inicio do post. Ao executar o job, o mesmo, não conseguiu ser executado com sucesso. A pegadinha é que o PowerShell no SQL executa a versão 2 (o SQL Server que estou usando é o 2012 com Windows Server 2012 R2 Datacenter), independentemente de a última versão do PowerShell instalado no servidor e o script que tinha feito não tinha suporte para a sintaxe utilizada.

Caso queira ter certeza se o PS utilizado no seu servidor é a versão 2, basta executar PowerShell a partir do SQL Server Management Studio (SSMS).

1) Clique com o botão direito na instância e selecione a opção “Start PowerShell”.

1

2) Será aberta uma tela conforme a imagem abaixo com o SQL Server PowerShell executando.

2

3) Para saber qual a versão que esta sendo executada digite: $PSVersionTable. O resultado deverá ser assim:

3

4) Agora vamos olhar a versão do PowerShell que roda na sua máquina ou no seu servidor. Vá em Iniciar e procure a aplicação do PS que existe no seu sistema operacional.

5) Digite mais uma vez o comando: $PSVersionTable.

6) O resultado da instrução executada foi a seguinte:

5

Uma vez identificado a diferença de versões o que precisamos fazer é ajustar o script para executar no SQL Server Agent. Ao invés de termos o script diretamente no campo “Command” do step, vamos salvar o código em um arquivo e chamá-lo com a seguinte instrução:

Start-Process PowerShell -ArgumentList “& ‘E:\Script PowerShell\DeleteLogFiles.ps1′”

O step ficou configurado  assim:

7

Agora só executar novamente o job e ver uma janela parecida com essa:

8

Fiz o mesmo teste em outra máquina com no SQL Server 2014 com o Windows Server 2012 R2 Datacenter e a versão do PowerShell retornada através do SSMS foi a mesma que tem no sistema operacional, neste caso a versão 4.

10

Consequentemente consegui executar o script direto no job sem precisar salvar em um arquivo como fizemos anteriormente.

11

Inté a próxima pessoal!

Cibelle Castro 🙂

Um comentário em “Como executar Script no Powershell v4 através do SQL Server Agent?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s