Erreur lors de l'exécution du script Powershell dans l'Agent SQL Server


9

J'ai un travail SQL qui s'exécute via l'Agent SQL Server (Exécution de SQL Server 2012 Enterprise). La dernière étape du travail consiste à exécuter une application située sur un partage réseau. Malheureusement, je ne connais pas le nom du dossier dans lequel se trouve l'application (le dossier est le numéro de version), donc j'utilise PowerShell pour le trouver:

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

Si j'ouvre une fenêtre PowerShell sur SQL Server, cela fonctionne bien. Lorsque j'exécute cela dans l'Agent SQL Server, j'obtiens l'erreur suivante:

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

Je pensais que cela pourrait être un problème d'autorisations, j'ai donc essayé SQL Server Agent en cours d'exécution sous mes informations d'identification (c'est un serveur de test, pas de production) mais j'obtiens toujours la même erreur. J'ai également essayé de mapper un lecteur réseau vers le dossier partagé au lieu des chemins UNC, mais la même erreur.

Quelqu'un peut-il suggérer comment je peux me connecter à ce dossier?

Réponses:


9

Je crois que votre problème va être le SQLPSfournisseur. Étant donné que les étapes PowerShell dans l'Agent SQL Server vous placent automatiquement dans le contexte de ce fournisseur, certaines commandes qui fonctionnent dans votre console normale ne fonctionneront pas de la même manière. Une rédaction a été faite ici avec Set-Location. Vous devez essentiellement dire SQLPSau fournisseur que vous souhaitez utiliser.

Votre code ressemblerait à quelque chose comme ci-dessous:

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

Vous pouvez également envelopper le reste en deux lignes si vous le souhaitez:


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

@ShawnMelton qu'en est-il de l'exécution de commandes powershell sur un serveur distant? dba.stackexchange.com/questions/83068/…
Marcello Miorelli

Nous avons eu ce même problème et nous avons trouvé que faire cd c:au début du script triait le problème de contexte / emplacement. Ensuite, tous les chemins UNC ont fonctionné comme prévu.
James Khoury

cd c:est un alias à utiliser Set-Location C:, il s'agit donc de la même commande.

2

L'autre alternative serait d'utiliser la commande du système d'exploitation et de donner powershell.exe c: /path/script.ps1 en tant que commande et d'enregistrer votre script dans script.ps1. Cela garantira l'utilisation du PowerShell du système d'exploitation au lieu d'utiliser le fournisseur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.