2017-04-20 1 views
3

Ich habe einig Powershell-Code, den ich in einem SQL Server-Agent-Auftrag verwenden. Der Job selbst verbindet sich mit einer FTP-Site und zieht alle Dateinamen in einem bestimmten Verzeichnis herunter.SQL-Syntax-Fehler, wenn Powershell-Aufruf

Die Powershell funktioniert gut, wenn durch Powershell ISE ohne Fehler laufen, aber wenn es in SQL ausgeführt wird, wirft es einen Syntaxfehler.

Die Codezeile ist die erste Zeile, die

$FTPRequest = [System.Net.FtpWebRequest]::Create("$($Server)$($Directory)") 

ich einige der Forschung getan haben, ist und festgestellt, dass SQL nicht die $($ mag und die ersten 2 Zeichen $( zu entfernen. Dies funktioniert jedoch nicht, weil es einen anderen gibt, der sofort folgt (ich entfernte auch diesen) und jetzt läuft der Code, tut aber überhaupt nichts.

Der Fehler, der in der Job-Geschichte zeigt, ist

Message 
Unable to start execution of step 1 (reason: line(8): Syntax error). The step failed. 

Alle Ideen, wie dies in SQL zur Arbeit kommen?

+0

Wie genau werden Sie diese in/durch Sql läuft? – Igor

+0

In einem SQL-Agent-Jobschritt – Cornflake2068

+0

Dies könnte ein esoterisches Agentenproblem sein. Siehe ähnliche Frage zu [DBA.so] (https://dba.stackexchange.com/a/58679). Wenn das nicht der Fall ist, fügen Sie bitte weitere Details wie die genaue Fehlermeldung und MCVE vielleicht hinzu. – vonPryz

Antwort

2

Der subexpression Betreiber $() ist nicht notwendig, innerhalb dieser Zeichenfolge als Powershell die beiden Variablen in Zeichenfolgen korrekt, ohne es erweitern:

$FTPRequest = [System.Net.FtpWebRequest]::Create("$Server$Directory") 
2

Sie erhalten den Fehler selbst user tokens wegen SQL Server-Agent. Der SQL Server-Agent behandelt $() als Sonderzeichenfolge. Wenn er gefunden wird, versucht er, den Wert innerhalb eines bestimmten Benutzer-Tokens aufzulösen. Da Sie nicht übereinstimmen, erhalten Sie einen Syntaxfehler. Offensichtlich behandelt PowerShell diese Sequenz auf eine völlig andere Art und Weise, daher führt das Ausführen desselben Codes in der ISE keinen Fehler aus.

Die einfache Antwort ist, wenn es um die Verwendung Powershell in SQL Server-Agent-Auftrag kommt Schritte, die Sie nicht Unterausdruck Syntax in Ihrem Code verwenden können. Sie müssen es neu codieren. A bit more background on my experience with it.