Errore durante l'esecuzione di Powershell Script in SQL Server Agent


9

Ho un lavoro SQL che viene eseguito tramite SQL Server Agent (esecuzione di SQL Server 2012 Enterprise). L'ultimo passaggio del processo consiste nell'eseguire un'applicazione situata in una condivisione di rete. Sfortunatamente non conosco il nome della cartella in cui si trova l'applicazione (la cartella è il numero di versione), quindi sto usando PowerShell per trovarlo:

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

Se apro una finestra di PowerShell su SQL Server, funziona perfettamente. Quando eseguo questo in SQL Server Agent ricevo il seguente errore:

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

Ho pensato che potesse essere un problema di autorizzazioni, quindi ho provato SQL Server Agent in esecuzione con le mie credenziali (è un server di prova, non di produzione) ma ho ancora lo stesso errore. Ho anche provato a mappare un'unità di rete sulla cartella condivisa anziché sui percorsi UNC, ma lo stesso errore.

Qualcuno può suggerire come posso connettermi a questa cartella?

Risposte:


9

Credo che il tuo problema sarà il SQLPSfornitore. Poiché i passaggi di PowerShell in SQL Server Agent ti inseriscono automaticamente nel contesto di quel provider, alcuni comandi che funzionano nella tua normale console non funzioneranno allo stesso modo. Una scrittura è stata fatta qui con Set-Location. Fondamentalmente devi dire SQLPSal provider che vuoi usare.

Il tuo codice sarebbe simile al seguente:

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

Puoi anche avvolgere il resto in due righe se volessi:


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

@ShawnMelton che dire dell'esecuzione dei comandi PowerShell su un server remoto? dba.stackexchange.com/questions/83068/…
Marcello Miorelli,

Abbiamo riscontrato lo stesso problema e riscontrato che cd c:all'inizio dello script è stato risolto il problema di contesto / posizione. Quindi tutti i percorsi UNC hanno funzionato come previsto.
James Khoury,

cd c:è un alias da usare Set-Location C:, quindi è lo stesso comando.

2

L'altra alternativa sarebbe usare il comando del sistema operativo e dare powershell.exe c: /path/script.ps1 come comando e salvare lo script in script.ps1. Ciò garantirà l'utilizzo del sistema operativo PowerShell invece di utilizzare il provider.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.