我正在尝试使用xp_cmdshell在SQL Server 2008 Express中执行批处理文件。如果我用它来执行包含以下命令的批处理文件:
echo> C:\ development \ test \ itworks.txt
创建一个名为“itworks.txt”的文件,在其中文本显示“ECHO is on”。 但是,如果我运行包含命令的批处理文件:
CD。 > test1.txt的
它不起作用(没有错误,只是没有创建) 并且都没有:
类型NUL>的test2.txt
虽然如果从命令提示符双击/运行,这两个批处理文件都会创建该文件。我认为这可能是一个权限错误(我当时没有尝试过echo命令),所以更改了文件权限,以便NTAuthority(这是SQLServer服务运行的那个)完全控制文件夹,但它仍然没有'工作。事件日志中没有任何内容。我是DOS命令的新手,所以我真的不明白不同的命令。有谁知道可能会发生什么?
答案 0 :(得分:2)
如果直接在命令提示符下测试命令,则它们可以正常工作。 cd
语句生成一个包含当前目录名称的文本文件; type
语句生成一个零字节文件,但它确实生成了一个文件。
最有可能的是,xp_cmdshell
正在其运行的帐户没有写权限的文件夹中执行,并且您没有为要写入的文件指定其他位置。 (有效的echo
语句指定文本文件的文件夹位置,而其他两个则不指定。)
将批处理文件更改为:
cd > C:\development\test\test1.txt
或
type NUL > C:\development\test\test1.txt
如果echo
语句在xp_cmdshell
运行时有效,则您知道它可由NTAuthority帐户写入。