我有一些在SQL Server代理作业中使用的PowerShell代码。作业本身连接到FTP站点并下拉特定目录中的所有文件名。
PowerShell在没有错误的情况下通过PowerShell ISE运行时工作正常,但是当它在SQL中运行时会引发语法错误。
违规行是第一行
$FTPRequest = [System.Net.FtpWebRequest]::Create("$($Server)$($Directory)")
我做了一些研究,发现SQL不喜欢$($
并删除前2个字符$(
。然而,这不起作用,因为还有另一个紧随其后(我也删除了),现在代码运行但什么也没做。
作业历史记录中显示的错误是
Message
Unable to start execution of step 1 (reason: line(8): Syntax error). The step failed.
关于如何在SQL中使用它的任何想法?
答案 0 :(得分:2)
子字符串操作符$()
在此字符串中是不必要的,因为PowerShell会在没有它的情况下将两个变量正确扩展为字符串:
$FTPRequest = [System.Net.FtpWebRequest]::Create("$Server$Directory")
答案 1 :(得分:2)
由于SQL Server代理user tokens,您自己收到错误。 SQL Server代理将$()
视为特殊字符序列,找到后将尝试将内部值解析为特定用户令牌。由于一个不匹配,您将收到语法错误。显然,PowerShell以完全不同的方式处理此序列,因此在ISE中运行相同的代码不会返回错误。
简单的答案是,在SQL Server代理作业步骤中使用PowerShell时,不能在代码中使用子表达式语法。您需要重新编码。 A bit more background on my experience with it.