2017-04-20 11 views
3

SQL Serverエージェントジョブで使用するPowerShellコードがあります。ジョブ自体がFTPサイトに接続し、特定のディレクトリ内のすべてのファイル名をプルダウンします。PowerShellを呼び出すときのSQL構文エラー

PowerShellはエラーなしでPowerShell ISEを実行するとうまく動作しますが、SQLで実行すると構文エラーがスローされます。

問題のある行は、私はいくつかの研究を行い、SQLは$($を好きではないし、最初の2つの文字$(を削除することを発見した

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

ある最初の行です。しかし、これはすぐに続く(私もそれらを削除した)とコードが実行されますが、まったく何もしない別のものが存在するため、動作しません。ジョブ履歴に示し

エラーが

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

これはSQLで動作するように取得する方法上の任意のアイデアですか? PowerShellはそれなしで正しく文字列に2つの変数を拡大するよう

+0

これはSqlでどのように正確に実行していますか? – Igor

+0

SQLエージェントジョブのステップ – Cornflake2068

+0

これは難解なエージェントの問題です。 [DBA.so](https://dba.stackexchange.com/a/58679)に関する同様の質問を参照してください。そうでない場合は、正確なエラーメッセージやMCVEのような詳細を追加してください。 – vonPryz

答えて

2

部分式演算子$()は、この文字列内で不要です。

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

あなたが原因でSQL Serverエージェントuser tokensのエラー自体を受け取ります。 SQL Serverエージェントは$()を特殊文字シーケンスとして扱い、見つかった場合はその値を特定のユーザートークンに解決しようとします。 1つは一致しないので、構文エラーが発生しています。明らかに、PowerShellはこのシーケンスを完全に異なる方法で扱います。したがって、ISE内で同じコードを実行するとエラーは返されません。

簡単な答えは、SQL ServerエージェントのジョブステップでPowerShellを使用する場合、コード内で式の構文を使用できないことです。再コーディングする必要があります。 A bit more background on my experience with it.

関連する問題