Помилка запуску сценарію Powershell в агенті SQL Server


9

У мене є завдання SQL, яке працює через агент SQL Server (Запуск SQL Server 2012 Enterprise). Останнім кроком завдання є запуск програми, розміщеної на загальній мережі. На жаль, я не знаю назви папки, в якій знаходиться додаток (папка - номер версії), тому я використовую PowerShell, щоб знайти її:

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

Якщо я відкрию вікно PowerShell на SQL сервері, то воно прекрасно працює. Коли я запускаю це в агенті SQL Server, я отримую таку помилку:

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

Я думав, що це може бути проблема дозволів, тому я спробував агент SQL Server, який працює під моїми обліковими записами (це тестовий сервер, а не виробництво), але я все одно отримую ту ж помилку. Я також спробував зіставити мережевий диск у загальну папку замість UNC-шляхів, але така ж помилка.

Хтось може підказати, як я можу підключитися до цієї папки?

Відповіді:


9

Я вважаю, що ваша проблема буде SQLPSпостачальником. Оскільки кроки PowerShell в агенті SQL Server автоматично ставлять вас у контекст цього постачальника, деякі команди, які працюють у вашій звичайній консолі, не працюватимуть однаково. Записуваний на це було зроблено тут з Set-Location. Ви, як правило, повинні повідомити SQLPSпровайдера, якого ви хочете використовувати.

Ваш код виглядатиме приблизно так:

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

Ви також можете обернути залишок у два рядки, якщо хочете:


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

@ShawnMelton, як щодо запуску команд powerhell на віддаленому сервері? dba.stackexchange.com/questions/83068/…
Marcello Miorelli

У нас був цей самий випуск, і ми виявили, що cd c:на початку сценарію сортували питання контексту / місця. Тоді всі шляхи УНК працювали як очікувалося.
Джеймс Хоурі

cd c:Псевдонім для використання Set-Location C:, тому це та сама команда.

2

Іншою альтернативою було б використовувати команду операційної системи та надати powershell.exe c: /path/script.ps1 як команду та зберегти свій скрипт у script.ps1. Це забезпечить використання повноважень ОС замість використання провайдера.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.