2011-09-07 2 views
4

J'ai un script qui exécute Invoke-SQLCmd sur un serveur SQL Server1. Les données collectées sont transmises à un autre script déclenché sur Server2 et les résultats sont réinsérés dans une table sur le serveur 1. Sur chaque Invoke-SQLCmd, j'ai utilisé le mot de passe -user avec un compte autorisations sur les deux systèmes. Lorsque j'exécute le script à partir du shell de commande ou de l'ISE Poershell, mes données sont insérées dans la table et tout fonctionne correctement; Quand je l'exécute depuis SQL, rien ne se passe. Je n'ai pas de sortie ("null" est retourné) quand j'utilise xp_cmdshell comme ci-dessous.Exécution de scripts Powershell via SQL

xp_cmdshell 'powershell.exe -file c:\script.ps1 -ExecutionPolicy Unrestricted' 

Je l'ai mis dans un SQLjob et utilisé un compte proxy qui relie à mon compte de domaine qui a des droits d'administrateur sur les deux cases encore toujours pas de résultats enregistrés dans l'histoire du travail et pas de données dans ma table sur Server1.

Qu'est-ce que je fais de mal? cela devrait sûrement fonctionner si cela fonctionne à partir de l'ISE?

Répondre

4

Je n'ai pas eu de problème à faire cela et a même créé quelques messages de blog:

http://sev17.com/2009/04/05/executing-powershell-in-sql-server

http://sev17.com/2010/11/29/executing-powershell-in-sql-server-redux

La seule chose que je fais différemment est d'utiliser la -command paramètre avec un nom de fichier au lieu de -file, mais cela ne devrait pas faire de différence. Je joins également le nom de fichier entre guillemets mais cela ne devrait pas non plus faire de différence si le fichier script n'a pas d'espaces dans le chemin du fichier. En dehors de cela, il faudrait que je voie ce que fait votre script. Par exemple, est-ce qu'il se connecte à d'autres machines? Pouvez-vous exécuter une commande simple dans powershell comme 'powershell -commande get-command'?

+0

vos liens sont rompus –

1

Il semblerait que je ne chargeais pas les snapins correctement. Bien que mes SQLsnapins aient été chargés pour la première session, ils ne l'ont pas transmis au deuxième script PS qui exécutait invoke-SQLcmd. Mon second script a ajouté le snapin de cmdlet mais cela n'a peut-être pas suffi.

Cela aurait dû fonctionner mais pour une raison quelconque, l'ajout du bloc de script à partir d'ici l'a corrigé. :/

http://msdn.microsoft.com/en-us/library/cc281962.aspx

Merci à tous ceux qui ont répondu.

0

Qu'est-ce que je fais de mal?

Je pense qu'il y a une erreur dans l'exemple fourni. Je me serais attendu:

xp_cmdshell 'powershell.exe -ExecutionPolicy Unrestricted -file c:\script.ps1' 

Parce que: "fichier doit être le dernier paramètre dans la commande, parce que tous les caractères tapés après le nom du paramètre du fichier sont interprétés comme le chemin du fichier de script suivi des paramètres de script et leurs valeurs. "

Source: PowerShell.exe Command-Line Help

Questions connexes