Ошибка запуска скрипта 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 Server, то оно будет работать нормально. Когда я запускаю это в агенте 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, но та же ошибка.

Кто-нибудь может подсказать, как можно подключиться к этой папке?

Greg
источник

Ответы:

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 как насчет запуска команд powershell на удаленном сервере? dba.stackexchange.com/questions/83068/…
Марчелло Миорелли
У нас была такая же проблема, и мы обнаружили, что cd c:в начале скрипта выполняется сортировка проблемы контекста / местоположения. Тогда все пути UNC работали как ожидалось.
Джеймс Хоури
cd c:это псевдоним для использования Set-Location C:, поэтому это та же команда.
2

Другой альтернативой будет использование команды операционной системы и предоставление в качестве команды powershell.exe c: /path/script.ps1 и сохранение сценария в script.ps1. Это обеспечит использование PowerShell для ОС вместо поставщика.

Ketan
источник