Ich habe einen SQL-Job, der über den SQL Server-Agenten (Ausführen von SQL Server 2012 Enterprise) ausgeführt wird. Der letzte Schritt des Jobs besteht darin, eine Anwendung auszuführen, die sich auf einer Netzwerkfreigabe befindet. Leider kenne ich den Namen des Ordners, in dem sich die Anwendung befindet, nicht (der Ordner ist die Versionsnummer), daher verwende ich PowerShell, um ihn zu finden:
set-location "\\server\companydocuments\MyApp\Application Files\"
$name = Get-ChildItem | sort name -desc | select -f 1 | select name
cd $name.name
& ".\Application.exe"
Wenn ich ein PowerShell-Fenster auf dem SQL Server öffne, funktioniert es einwandfrei. Wenn ich dies in SQL Server Agent ausführe, wird folgende Fehlermeldung angezeigt:
A job step received an error at line 1 in a PowerShell script.
The corresponding line is 'set-location "\\server\companydocuments\MyApp\Application Files\'"
Ich dachte, es könnte ein Berechtigungsproblem sein, also habe ich versucht, SQL Server Agent unter meinen Anmeldeinformationen auszuführen (es ist ein Testserver, keine Produktion), aber ich erhalte immer noch den gleichen Fehler. Ich habe auch versucht, ein Netzwerklaufwerk anstelle von UNC-Pfaden dem freigegebenen Ordner zuzuordnen, aber der gleiche Fehler.
Kann jemand vorschlagen, wie ich mich mit diesem Ordner verbinden kann?
cd c:
beim Ausführen eines Skripts am Anfang des Skripts das Kontext- / Speicherortproblem behoben wurde. Dann funktionierten alle UNC-Pfade wie erwartet.cd c:
ist ein Alias für die VerwendungSet-Location C:
, es ist also der gleiche Befehl.Die andere Alternative wäre, den Betriebssystembefehl zu verwenden und Powershell.exe c: /path/script.ps1 als Befehl anzugeben und Ihr Skript in script.ps1 zu speichern. Dadurch wird sichergestellt, dass die Betriebssystem-Powershell anstelle des Providers verwendet wird.
quelle