Запуск скриптов Powershell через SQL - PullRequest
4 голосов
/ 08 сентября 2011

У меня есть скрипт, который запускает Invoke-SQLCmd для SQLServer с именем Server1.Собранные данные передаются другому сценарию, который запускается на сервере Server2, и результаты помещаются обратно в таблицу на сервере 1. В каждом Invoke-SQLCmd я использовал -user -password с учетной записью, которая имеетразрешения на обеих системах.

Когда я запускаю скрипт из командной оболочки или из ISE Poershell, мои данные вставляются в таблицу, и все работает нормально;Когда я запускаю его изнутри SQL, ничего не происходит.Я не получаю никаких выходных данных (возвращается «null»), когда я использую xp_cmdshell, как показано ниже.

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

Я поместил его в SQLjob и использовал прокси-учетную запись, которая ссылается на мою учетную запись домена с правами администратора нав обоих полях все еще нет результатов, зарегистрированных в истории заданий, и нет данных в моей таблице на сервере 1.

Что я делаю не так?конечно, это должно работать, если это работает от ISE?

Ответы [ 3 ]

4 голосов
/ 08 сентября 2011

У меня не было никаких проблем с этим, и я даже создал пару постов в блоге:

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

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

Единственное, что яя по-другому использую параметр -command с именем файла вместо -file, но это не должно иметь значения.Я также заключаю имя файла в двойные кавычки, но это также не должно иметь значения, если в файле скрипта нет пробелов в пути к файлу.

Вне этого мне нужно будет посмотреть, какой у вас скриптделает.Например, он подключается к другим машинам?Можете ли вы запустить простую команду в powershell, например «powershell -command get-command»?

2 голосов
/ 09 сентября 2011

Казалось бы, я неправильно загружал оснастки. Хотя мои SQLsnapins были загружены для первого сеанса, он не передавал его второму сценарию PS, на котором выполнялся invoke-SQLcmd. Мой второй скрипт добавил оснастку для командлета, но этого может быть недостаточно.

Это должно было сработать, но по какой-то причине добавление блока скрипта исправило это. : /

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

Спасибо тем, кто откликнулся.

1 голос
/ 11 августа 2017

Что я делаю не так?

Я думаю, что в приведенном примере есть ошибка. Я бы ожидал:

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

Поскольку: " Файл должен быть последним параметром в команде, поскольку все символы, введенные после имени параметра Файл , интерпретируются как путь к файлу сценария, за которым следуют параметры сценария и их значения. "

Источник: Справка командной строки PowerShell.exe

...