我想从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"'
我已经在文件夹安全性中添加了 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。但以下内容记录在我创建的作业的历史记录中。
但是,如果我将bat文件的内容更改为仅包含hostname
。工作顺利完成。所以我得出结论,当被称为SQL Server代理作业时,psexec并没有真正正常运行。这有什么办法可行吗?或者我只是做错了什么?
答案 0 :(得分:0)
psexec(与所有当前的sysinternals工具一样)在首次运行时提示任何用户接受许可证。它可能是由于服务帐户正在运行而被阻止。
如果是64位操作系统psexec64 / accepteula,请在psexec命令中添加/ accepteula