1

我正在尝试使用 xp_cmdshell 在 SQL Server 2008 Express 中执行批处理文件。如果我使用它来执行包含以下命令的批处理文件:

回声 > C:\development\test\itworks.txt

创建了一个名为“itworks.txt”的文件,其中的文本显示“ECHO 已开启”。但是如果我运行一个包含命令的批处理文件:

光盘。>test1.txt

它不起作用(没有错误,只是没有创建任何内容),也没有:

输入 NUL > test2.txt

尽管如果从命令提示符双击/运行,这两个批处理文件都会创建文件。我认为这可能是权限错误(当时我还没有尝试过 echo 命令),所以更改了文件权限,以便 NTAuthority(这是 SQLServer 服务运行的方式)可以完全控制文件夹,但它仍然没有不工作。事件日志中没有任何内容。我是 DOS 命令的新手,所以我不太了解不同的命令。有谁知道会发生什么?

4

1 回答 1

2

如果您直接在命令提示符下测试这些命令,它们就可以工作。该cd语句生成一个包含当前目录名称的文本文件;该type语句生成一个零字节文件,但它确实生成了一个文件。

最有可能的是,xp_cmdshell正在运行它的帐户没有写入权限的文件夹中执行,并且您没有为要写入的文件指定另一个位置。(echo有效的语句指定了文本文件的文件夹位置,而其他两个则没有。)

将批处理文件更改为:

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

或者

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

如果该echo语句在 via 运行时在那里有效xp_cmdshell,则您知道它可以由 NTAuthority 帐户写入。

于 2013-06-22T20:25:40.777 回答