我有一个 Windows cmd 批处理文件,它应该使用 PuTTY PSFTP exe 通过 sFTP 检索 FTP 服务器上的文件列表,并将其用于进一步处理。命令是:
echo ls | psftp -l myusername -pw mycomplexpwd FTPServerHostname > C:/Users/myuser/Desktop/ls.txt
它应该在ls.txt
我在其他脚本中使用的文件中输出列表。以普通用户身份运行时,我得到了列表。但是,当使用任务计划程序并将脚本安排为SYSTEM
用户时,我在输出文件中只得到这个:
远程工作目录是 /
psftp>quit
我猜想管道使用有问题|
或其他什么,所以我也尝试使用这种语法但也有相同的输出:
psftp -l myusername -pw mycomplexpwd FTPServerHostname < C:/Users/myuser/Desktop/lscmd.txt > C:/Users/myuser/Desktop/ls.txt
将作业安排为 SYSTEM 而不是我的用户时可能导致问题的原因是什么?以及如何获得 SYSTEM 列表?请注意,当以管理员身份运行脚本时(右键单击 - 以管理员身份运行),我得到的列表很好,问题仅在使用任务计划程序并将任务安排为 SYSTEM 时。
操作系统是 Windows Server 2012 R2。
因此,经过一番挖掘,结果证明 PSFTP 无法识别 ftp 服务器的密钥。我打开 cmd 为
SYSTEM
(这可能有点棘手!)并通过 PSFTP 连接,接受信任主机(sFTP 服务器),然后脚本按预期工作!它没有给其他用户带来问题,因为他们在测试中使用并且更早地得到了提示!仅供参考,该密钥也存储在注册表中
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
,因此如果您不想手动登录,可以为其他用户添加它(我在我的脚本中添加了检查以添加它,如果缺少运行脚本的任何用户)..编辑:我相信我最大的问题是获取 cmd
SYSTEM
以便我可以调试正在发生的事情,一旦我可以(请参阅上面的链接了解我是如何做到的),我就清楚了。为了参考和更清晰,下面是添加密钥之前的命令输出,只是屏蔽了敏感部分: