Błąd podczas uruchamiania skryptu Powershell w SQL Server Agent

9

Mam zadanie SQL, które działa za pośrednictwem SQL Server Agent (z uruchomionym SQL Server 2012 Enterprise). Ostatnim krokiem zadania jest uruchomienie aplikacji znajdującej się w udziale sieciowym. Niestety nie znam nazwy folderu, w którym znajduje się aplikacja (folder to numer wersji), więc używam PowerShell, aby go znaleźć:

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

Jeśli otworzę okno programu PowerShell na SQL Server, to działa dobrze. Po uruchomieniu tego w programie SQL Server Agent pojawia się następujący błąd:

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

Pomyślałem, że może to być problem z uprawnieniami, więc wypróbowałem SQL Server Agent działający na moich poświadczeniach (jest to serwer testowy, a nie produkcyjny), ale wciąż pojawia się ten sam błąd. Próbowałem również mapować dysk sieciowy do folderu współdzielonego zamiast ścieżek UNC, ale ten sam błąd.

Czy ktoś może zasugerować, jak mogę połączyć się z tym folderem?

Greg
źródło

Odpowiedzi:

9

Uważam, że Twoim problemem będzie SQLPSdostawca. Ponieważ kroki programu PowerShell w SQL Server Agent automatycznie wprowadzają cię w kontekst tego dostawcy, niektóre polecenia działające w normalnej konsoli nie będą działać w ten sam sposób. Odpisy się stało tutaj z Set-Location. Zasadniczo musisz poinformować SQLPSdostawcę, którego chcesz użyć.

Twój kod wyglądałby mniej więcej tak:

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

Możesz także zawinąć resztę w dwie linie, jeśli chcesz:


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

źródło
@ShawnMelton co z uruchamianiem poleceń programu PowerShell na zdalnym serwerze? dba.stackexchange.com/questions/83068/…
Marcello Miorelli
Mieliśmy ten sam problem i stwierdziliśmy, że wykonanie cd c:na początku skryptu posortowało problem dotyczący kontekstu / lokalizacji. Następnie wszystkie ścieżki UNC działały zgodnie z oczekiwaniami.
James Khoury
cd c:to alias do używania Set-Location C:, więc jest to to samo polecenie.
2

Inną alternatywą byłoby użycie polecenia systemu operacyjnego i podanie powershell.exe c: /path/script.ps1 jako polecenia i zapisanie skryptu w script.ps1. Zapewni to użycie PowerShell systemu operacyjnego zamiast dostawcy.

Ketan
źródło