Eu tenho um script powershell que estou tentando adicionar a um trabalho de agente sql, mas a etapa do trabalho está falhando com o seguinte erro
A job step received an error at line 1 in a PowerShell script. The corresponding line is 'import-module SQLPS -DisableNameChecking'. Correct the script and reschedule the job. The error information returned by PowerShell is: 'Could not load file or assembly 'file:///C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.Management.PSSnapins.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
Presumi que o erro estava sendo causado por diferenças no caminho do módulo, então defino explicitamente o caminho via $env:PSModulePath para corresponder ao caminho da minha sessão do powershell em que o código funciona bem. Eu sou muito novo no powershell, então qualquer ajuda que você possa fornecer seria apreciada
Estou apenas fazendo alguns testes agora, então tudo está sendo executado localmente na minha área de trabalho. Estou executando o SQL Server 2012.
Ao executar uma etapa de trabalho do SQL Agent com o tipo "PowerShell", você não está realmente executando no PowerShell (completo). Esse tipo de etapa de trabalho realmente é executado no
sqlps.exe
minishell, que é baseado no PowerShell 1.0 e em um número extremamente limitado de cmdlets.Praticamente falando, o tipo de etapa de trabalho do PowerShell não é muito útil. Em vez disso, recomendo usar uma etapa de trabalho "Operating System/CMDExec" e chamar
PowerShell.exe
a partir da linha de comando.Usando o tipo de etapa de trabalho cmdexec, sua etapa de trabalho ficaria assim:
Ao chamar
PowerShell.exe
, você obtém o shell completo/atual do PowerShell (em vez do mini shell) e pode usar o módulo SQL Server PowerShell completo/atual. Isso é particularmente importante se você estiver usando o SQL Server 2016+, onde oSQLSERVER
módulo foi aprimorado com uma lista muito maior de cmdlets.Confira esta postagem do blog também. http://www.sqlhammer.com/running-powershell-in-a-sql-agent-job/
Os trabalhos do Powershell e do SQL Agent podem ter alguns problemas iniciais. Esta postagem no blog explica-os e como contorná-los. Essencialmente, o módulo carregado pelo SQL é diferente do módulo carregado pelo seu script.
Remova o módulo de importação do trabalho, o SQL Server já inicia com o SQLPS carregado, em 2012 ele carrega a versão 2.0 do powershell para que seus scripts precisem de mais ajustes.