首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过向WinSCP中的StdIn提供命令来编写JScript脚本--脚本挂起并且永远不会完成

通过向WinSCP中的StdIn提供命令来编写JScript脚本--脚本挂起并且永远不会完成
EN

Stack Overflow用户
提问于 2017-10-17 21:44:41
回答 1查看 352关注 0票数 1

我试图从SFTP服务器下载大约40个文件,而它只下载了30个文件并挂起。

请帮助解决这个问题。

这就是我要用的剧本。

代码语言:javascript
复制
var exec = shell.Exec("winscp.com /xmllog=\"C:\\download\\log\\download.xml\" "); 
exec.StdIn.Write( 
    "option batch abort\n"+ 
    "option confirm off\n"+ 
    "open sftp://xxx:xxx@xxx -hostkey=\"xxxx\" \n"+ 
    "get /download/* \"C:\\download\\\" \n"+ 
    "exit"); 

请看下面的日志。

我在日志文件中找不到任何问题:

代码语言:javascript
复制
> 2017-10-18 13:09:10.232 Type: SSH_FXP_REMOVE, Size: 54, Number: 99341
< 2017-10-18 13:09:10.233 Type: SSH_FXP_STATUS, Size: 24, Number: 99076
. 2017-10-18 13:09:10.233 Discarding reserved response
< 2017-10-18 13:09:10.235 Type: SSH_FXP_STATUS, Size: 24, Number: 99341
< 2017-10-18 13:09:10.235 Status code: 0
. 2017-10-18 13:09:10.236 File: '/compliance/2016_QTR2_DepreciationSummary.xlsx' [2017-10-18T17:07:08.000Z] [19819]
. 2017-10-18 13:09:10.236 Copying "/compliance/2016_QTR2_DepreciationSummary.xlsx" to local directory started.
. 2017-10-18 13:09:10.236 Binary transfer mode selected.
. 2017-10-18 13:09:10.236 Opening remote file.
> 2017-10-18 13:09:10.236 Type: SSH_FXP_OPEN, Size: 63, Number: 99587
< 2017-10-18 13:09:10.239 Type: SSH_FXP_HANDLE, Size: 13, Number: 99587
> 2017-10-18 13:09:10.239 Type: SSH_FXP_FSTAT, Size: 13, Number: 99848
< 2017-10-18 13:09:10.241 Type: SSH_FXP_ATTRS, Size: 37, Number: 99848
> 2017-10-18 13:09:10.242 Type: SSH_FXP_READ, Size: 25, Number: 100101
< 2017-10-18 13:09:10.250 Status code: 1
. 2017-10-18 13:09:10.250 3 skipped SSH_FXP_WRITE, SSH_FXP_READ, SSH_FXP_DATA and SSH_FXP_STATUS packets.
> 2017-10-18 13:09:10.250 Type: SSH_FXP_CLOSE, Size: 13, Number: 100612
. 2017-10-18 13:09:10.250 Preserving timestamp [2017-10-18T17:07:08.000Z]
. 2017-10-18 13:09:10.251 Transfer done: '/compliance/2016_QTR2_DepreciationSummary.xlsx' => 'C:\Users\Arman\Desktop\Work\pwc\final\servers\comerit_final_download_from_sftp\src\main\webapp\compliance\2016_QTR2_DepreciationSummary.xlsx' [19819]
. 2017-10-18 13:09:10.251 Deleting file "/compliance/2016_QTR2_DepreciationSummary.xlsx".
> 2017-10-18 13:09:10.251 Type: SSH_FXP_REMOVE, Size: 55, Number: 100877
< 2017-10-18 13:09:10.253 Type: SSH_FXP_STATUS, Size: 24, Number: 100612
. 2017-10-18 13:09:10.253 Discarding reserved response
< 2017-10-18 13:09:10.256 Type: SSH_FXP_STATUS, Size: 24, Number: 100877
< 2017-10-18 13:09:10.256 Status code: 0
. 2017-10-18 13:09:10.256 File: '/compliance/2016_QTR2_GainLossSummary.pdf' [2017-10-18T17:07:08.000Z] [120260]
< 2017-10-18 13:09:37.004 Script: Terminated by user.
. 2017-10-18 13:09:37.004 Copying "/compliance/2016_QTR2_GainLossSummary.pdf" to local directory started.
. 2017-10-18 13:09:37.004 Binary transfer mode selected.
. 2017-10-18 13:09:37.004 Checking existence of partially transferred file.
. 2017-10-18 13:09:37.005 Opening remote file.
> 2017-10-18 13:09:37.005 Type: SSH_FXP_OPEN, Size: 58, Number: 101123
< 2017-10-18 13:09:37.009 Type: SSH_FXP_HANDLE, Size: 13, Number: 101123
> 2017-10-18 13:09:37.009 Type: SSH_FXP_FSTAT, Size: 13, Number: 101384
< 2017-10-18 13:09:37.012 Type: SSH_FXP_ATTRS, Size: 37, Number: 101384
> 2017-10-18 13:09:37.013 Type: SSH_FXP_READ, Size: 25, Number: 101637
. 2017-10-18 13:09:37.047 9 skipped SSH_FXP_WRITE, SSH_FXP_READ, SSH_FXP_DATA and SSH_FXP_STATUS packets.
> 2017-10-18 13:09:37.047 Type: SSH_FXP_CLOSE, Size: 13, Number: 102916
> 2017-10-18 13:09:37.048 Script: exit
. 2017-10-18 13:09:37.048 Script: Exit code: 0
. 2017-10-18 13:09:37.048 Closing connection.
. 2017-10-18 13:09:37.048 Sending special code: 12
. 2017-10-18 13:09:37.048 Sent EOF message

这是添加"var output =exec.StdOut.ReadAll()“之后的完整工作代码;

代码语言:javascript
复制
var exec = shell.Exec("winscp.com /log=\"C:\\log\\download.log\" ");
exec.StdIn.Write(
    "option batch abort\n"+
    "option confirm off\n"+
    "open sftp://xxx:xxx@xxx  -hostkey=\"xxx\" \n"+
    "get -delete /compliance/* \"C:\\compliance\\\"  \n"+
    "exit");

exec.StdIn.Close();
var output = exec.StdOut.ReadAll();

谢谢

阿曼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-19 05:43:41

你没有向我们展示,你在exec.StdIn.Write()之后做了什么。

确保读取程序输出,例如如下所示(如官方访问输入/输出流的JScript示例所示):

代码语言:javascript
复制
var output = exec.StdOut.ReadAll();

还请参见捕获WinSCP过程的输出 (同样的问题,但对于C#):

在脚本运行时,需要不断地收集输出。输出流容量有限。一旦它被填满,WinSCP就会挂起等待空闲的空间,永远不会结束。

此外,您还必须使用exit终止\n命令。尽管在您的示例中,使用标准输入提供命令没有多大意义。只需使用打开WinSCP命令行

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46799712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档