1

xp_cmdshell を使用して、SQL Server 2008 Express でバッチ ファイルを実行しようとしています。それを使用して、次のコマンドを含むバッチ ファイルを実行するとします。

エコー > C:\development\test\itworks.txt

「itworks.txt」というファイルが作成され、その中に「ECHO is on」というテキストが表示されます。しかし、コマンドを含むバッチ ファイルを実行すると、次のようになります。

CD。>test1.txt

それは機能しません(エラーはなく、何も作成されませんでした)。

タイプ NUL > test2.txt

コマンドプロンプトからダブルクリック/実行すると、これらのバッチファイルは両方ともファイルを作成します。アクセス許可エラーである可能性があると考えたので (その時点で echo コマンドを試していませんでした)、ファイルのアクセス許可を変更して、NTAuthority (SQLServer サービスが実行されるもの) がフォルダーを完全に制御できるようにしましたが、それでもそうではありませんでした。動作しません。イベントログには何もありません。私は DOS コマンドの初心者なので、さまざまなコマンドがよくわかりません。何が起こっているのか誰にも分かりませんか?

4

1 に答える 1

2

コマンド プロンプトでコマンドを直接テストすると、機能します。このcdステートメントは、現在のディレクトリの名前を含むテキスト ファイルを生成します。このtypeステートメントは 0 バイトのファイルを生成しますが、実際にはファイルを生成します。

ほとんどの場合、xp_cmdshell実行中のアカウントに書き込み権限がないフォルダーで実行されており、ファイルを書き込む別の場所を指定していません。(echo機能するステートメントは、テキスト ファイルのフォルダーの場所を指定しますが、他の 2 つのステートメントは指定しません。)

バッチ ファイルを次のように変更します。

cd > C:\development\test\test1.txt 

また

type NUL > C:\development\test\test1.txt 

echo経由で実行したときにステートメントが機能する場合はxp_cmdshell、NTAuthority アカウントで書き込み可能であることがわかります。

于 2013-06-22T20:25:40.777 に答える