2

我在命令提示符中编写了一个命令,该命令旨在使用 psftp.exe 连接到远程服务器并在删除文件之前从中检索文件。当我在命令提示符下运行它时,它可以完美运行。当我尝试将其放入 SQL 代理作业的命令窗口然后运行该作业时,它只是挂起。查看命令有什么会导致这种情况吗?

我听说如果可执行文件显示提示,那么它会导致这种行为,但当然 psftp.exe 不会,所以我认为这不是问题。

我正在我的本地用户下运行该作业,该用户也具有完全的管理员权限。

我应该补充一点,作业中的命令将打开一个文本文件,以便读出 psftp.exe 的命令。我也包含了这个命令。

主要 CmdExec 命令:

W:\Software\psftp\psftp.exe -pw password1 -b W:\Software\psftp\Retrieval.txt -batch account@123.123.123.123

文本文件 psftp.exe 命令

cd out
lcd "C:\Documents and Settings\MyUser\My Documents\"
mget /out/*.txt
rm /out/*txt
quit
4

2 回答 2

1

这里的问题是双重的。首先是 SQL 代理作业在我们的生产服务器上的“服务”帐户下运行。这是我们服务器上用于运行服务等的单独用户帐户。虽然这本身不是问题,但我将解释它是根本原因。

当我第一次手动运行 PSFTP.exe 并提出满足要求的解决方案时(读作管理器松散耦合的解释),我被要求向注册表添加一个键。我没有注意到这一点,当我想要自动化这个过程时,它让我陷入了困境。由于我在通过命令行调试时大部分时间都在本地用户下运行,所以我从来没有遇到任何问题。当我尝试将批处理文件等放入 SQL 代理作业时,我有效地更改了我正在运行的用户,因为我们总是将我们的“服务”用户帐户用于此类作业。该用户当然不会为连接到外部 sFTP 服务器添加注册表项。

为了解决这个问题,我必须在单独的用户下手动运行 PSFTP.exe 程序(通过在“服务”帐户下登录机器)并添加注册表项。完成此操作后,SQL 代理作业成功运行。这么简单的事情,但它让我很头疼,因为我当然没有看到任何异常或日志。

于 2012-12-28T10:01:54.927 回答
0

它会像密码问题这样简单吗?你检查过事件日志吗?您可以在此处发布事件日志报告吗?

于 2012-12-17T12:28:18.173 回答