从xp_cmdshell调用时,psexec无法正常工作

问题描述 投票:3回答:1

我想远程将SQL文件从SQL Server运行到另一台机器。为此,我发现我可以使用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的想法,只是创建了一个类型为操作系统(CmdExec)的SQL Server代理作业。该步骤的内容是,

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并没有真正正常运行。这有什么办法可行吗?或者我只是做错了什么?

sql-server tsql jar psexec xp-cmdshell
1个回答
0
投票

psexec(与所有当前的sysinternals工具一样)在第一次运行时提示任何用户接受许可。由于它是由服务帐户运行的,因此它可能会受到阻碍。

如果是64位OS psexec64 / accepteula,则将/ accepteula添加到psexec命令

© www.soinside.com 2019 - 2024. All rights reserved.