web-dev-qa-db-fra.com

Erreur SQL Agent PowerShell Syntaxe

Je tente de configurer un script PowerShell dans un poste d'agent SQL (SQL Server 2016). J'utilise un module tiers, dbatools.psd1 qui semble être où je reçois mon erreur de syntaxe. Actuellement, mon travail SQL a une ligne de code qui échoue:

Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1

Pourquoi le travail échoue-t-il avec l'erreur suivante? Cette commande fonctionne très bien lorsque je l'exécute à travers le PowerShell Ise.

Error Message: Unable to start execution of step 1 (reason: line(5): Syntax error).  The step failed.
6
Geoff Dawdy

Si vous exécutez cette étape sous forme d'étape de travail SQL Server Agent, vous devez utiliser le type d'étape Operating system (CmdExec), pas un type PowerShell Type.

Dans le CmdExec Il serait préférable de créer un fichier sur la machine avec toutes les étapes que vous avez besoin, puis appelez cela.

Par exemple Créer un fichier C:\PowerShellScripts\MyScript.ps1 qui contient...

Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1
Copy-SqlLogin -Source ServerA -Destination ServerB

Puis appelez ce script en utilisant powershell.exe "& 'C:\PowerShellScripts\MyScript.ps1'" Dans l'étape de travail CmdExec.

5
Nic

Pour développer la raison pour laquelle vous ne pouvez généralement pas utiliser l'étape PowerShell avec un autre module est le fournisseur SQL Server. Il ne joue pas bien et il y a un Connectez l'élément pour obtenir la SM pour la corriger .

Si vous ajoutez $erroractionpreference = 'stop' À l'étape de votre travail, vous verrez la sortie complète de la raison pour laquelle la commande est erronée:

Exécuté en tant qu'utilisateur: Service NT\SQLServeragent. Une étape de travail a reçu une erreur à la ligne 92 dans un script PowerShell. La ligne correspondante est 'if (Tabexpansionplusplus\regispansionplusplus\EngumentComplet -erroraction Ignore)'. Corrigez le script et reprogrammez le travail. Les informations d'erreur renvoyées par PowerShell sont les suivantes: 'SQL Server PowerShell Fournisseur d'erreur: chemin SQLServer:\tabexpansionplusplus n'existe pas . Veuillez spécifier un chemin valide. '. Code de sortie de processus -1. L'étape a échoué.

Le fournisseur est le problème dans la plupart des cas car il ne sait pas comment interpréter certains caractères/commandes. Si le type de pas de PowerShell vous met dans le contexte de l'hôte PowerShell.exe, notre vie serait tellement plus facile et des choses géniales pourraient arriver.

2
user507

Intéressant, ne fonctionne pas pour moi dans mon laboratoire, mais j'ai une erreur différente. J'utilise PowerShell dans notre environnement SQL2014, mais j'ai rencontré des problèmes, je pense que je suis lié au fournisseur PS en 2014 et j'utilise la commande CMDEXEC pour enfiler des scripts PowerShell.

Mon étape de SQL Agent ressemble à ceci en 2016 et cela a fonctionné: -enter image description here

1
sqlpadawan