Erro ao executar o script do Powershell no SQL Server Agent

9

Eu tenho um trabalho SQL que é executado via SQL Server Agent (executando o SQL Server 2012 Enterprise). A última etapa do trabalho é executar um aplicativo localizado em um compartilhamento de rede. Infelizmente não sei o nome da pasta em que o aplicativo está (a pasta é o número da versão), então estou usando o PowerShell para encontrá-lo:

set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"

Se eu abrir uma janela do PowerShell no SQL Server, ela funcionará bem. Quando executo isso no SQL Server Agent, recebo o seguinte erro:

A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"

Eu pensei que poderia ser um problema de permissão, então tentei o SQL Server Agent executando sob minhas credenciais (é um servidor de teste, não produção), mas ainda assim recebo o mesmo erro. Eu também tentei mapear uma unidade de rede para a pasta compartilhada em vez de caminhos UNC, mas o mesmo erro.

Alguém pode sugerir como me conectar a esta pasta?

Greg
fonte

Respostas:

9

Acredito que seu problema será o SQLPSprovedor. Como as etapas do PowerShell no SQL Server Agent colocam você automaticamente no contexto desse provedor, alguns comandos que funcionam no console normal não funcionam da mesma maneira. Uma gravação foi feita aqui com Set-Location. Você basicamente precisa informar SQLPSao provedor que deseja usar.

Seu código seria algo como abaixo:

set-location -Path Microsoft.PowerShell.Core\FileSystem::"\\server\companydocuments\MyApp\Application Files\"

Você também pode agrupar o restante em duas linhas, se desejar:


cd (Get-ChildItem | Sort-Object name -Descending | Select name -First 1).name
& ".\Application.exe"

fonte
@ ShawnMelton, que tal executar comandos do powershell em um servidor remoto? dba.stackexchange.com/questions/83068/…
Marcello Miorelli
Tivemos o mesmo problema e descobrimos que, cd c:no início do script, classificávamos o problema de contexto / local. Todos os caminhos UNC funcionaram conforme o esperado.
James Khoury
cd c:é um alias para usar Set-Location C:, portanto, é o mesmo comando.
2

A outra alternativa seria usar o comando do sistema operacional e fornecer o comando powershell.exe c: /path/script.ps1 como comando e salvar seu script em script.ps1. Isso garantirá o uso do PowerShell do SO em vez de usar o provedor.

Ketan
fonte