从xp_cmdshell

时间:2016-10-20 05:16:13

标签: sql-server tsql jar psexec xp-cmdshell

我想从SQL Server远程运行 jarfile 到另一台机器。为此,我发现我可以使用 PSEXEC 将命令远程发送到目标计算机并使用 xp_cmdshell ,这样我就可以从存储过程调用psexec命令。

我已经提取了从technet website下载的PSTools。我将PsExec.exe,PsExec64.exe和Eula.txt复制到SQL Server的C:\ Windows文件夹中。我已经使用以下命令在SQL Server的命令提示符中对其进行了测试,

psexec \\mymachine -u mydomain\myuser -p mypassword cmd /c "java -jar C:\WriteToFile.jar"

WriteToFile_U4.jar写入共享文件夹中的文本文件。此共享文件夹实际上位于SQL Server中。运行上面的命令会更新文本文件。但是,当我尝试使用下面的代码通过xp_cmdshell运行WriteToFile_U4.jar时,文件不会更新。

EXEC master..xp_cmdshell 'psexec \\mymachine -u mydomain\myuser -p mypassword cmd /c "java -jar C:\WriteToFile.jar"'

SSMS的“结果”窗格中还会显示一个奇怪的输出。 enter image description here

我已经在文件夹安全性中添加了 SQL Service Agent ,其中WriteToFile_U4.jar更新了文本文件。

有谁知道如何处理这个问题? 在我的问题中,我正在执行的T-SQL命令是作为SQL服务代理执行的吗?而不是服务器管理员帐户?

更新

我尝试放弃xp_cmdshell的想法,只创建了一个 SQL Server代理作业,其类型为操作系统(CmdExec)。该步骤的内容是,

cmd.exe /c "D:\runjarfileremote.bat"

bat文件的内容是,

psexec \\computer-name -u domain\user -p password cmd /c "hostname"

只是为了检查我是否可以在SQL Server代理作业中运行psexec。但以下内容记录在我创建的作业的历史记录中。 enter image description here

但是,如果我将bat文件的内容更改为仅包含hostname。工作顺利完成。所以我得出结论,当被称为SQL Server代理作业时,psexec并没有真正正常运行。这有什么办法可行吗?或者我只是做错了什么?

1 个答案:

答案 0 :(得分:0)

psexec(与所有当前的sysinternals工具一样)在首次运行时提示任何用户接受许可证。它可能是由于服务帐户正在运行而被阻止。

如果是64位操作系统psexec64 / accepteula,请在psexec命令中添加/ accepteula