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 🙂

Anúncios

One thought on “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 )

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s