我有一个相当简单的脚本,它启动WinSCP并检查目录中是否以“TSA”开头的文件。如果该文件存在,则退出,如果该文件不存在,则将其传输到新文件。
它在我的Windows 7机器上启动并运行,这是我创建它的地方 - 但是当我将它转移到我的服务器[windows server 2003]时,它永远不会找到该文件。
我的剧本:
var FILEPATH = "../zfinance/TSA";
// Session to connect to
var SESSION = "someplace@somewhere.com";
// Path to winscp.com
var WINSCP = "c:\\program files\\winscp\\winscp.com";
var filesys = WScript.CreateObject("Scripting.FileSystemObject");
var shell = WScript.CreateObject("WScript.Shell");
var logfilepath = filesys.GetSpecialFolder(2) + "\\" + filesys.GetTempName() + ".xml";
var p = FILEPATH.lastIndexOf('/');
var path = FILEPATH.substring(0, p);
var filename = FILEPATH.substring(p + 1);
var exec;
// run winscp to check for file existence
exec = shell.Exec("\"" + WINSCP + "\" /log=\"" + logfilepath + "\"");
exec.StdIn.Write(
"option batch abort\n" +
"open \"" + SESSION + "\"\n" +
"ls \"" + path + "\"\n" +
"exit\n");
// wait until the script finishes
while (exec.Status == 0)
{
WScript.Sleep(100);
WScript.Echo(exec.StdOut.ReadAll());
}
if (exec.ExitCode != 0)
{
WScript.Echo("Error checking for file existence");
WScript.Quit(1);
}
// look for log file
var logfile = filesys.GetFile(logfilepath);
if (logfile == null)
{
WScript.Echo("Cannot find log file");
WScript.Quit(1);
}
// parse XML log file
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.async = false;
doc.load(logfilepath);
doc.setProperty("SelectionNamespaces",
"xmlns:w='http://winscp.net/schema/session/1.0'");
doc.setProperty("SelectionLanguage", "XPath");
var nodes = doc.selectNodes("//w:file/w:filename[starts-with(@value, '" + filename + "')]");
if (nodes.length > 0)
{
WScript.Echo("File found");
WScript.Quit(0);
}
else
{
WScript.Echo("File not found");
WScript.Quit(1);
}
经过多次调查,我认为我发现这段代码无法正常运行:
// parse XML log file
var doc = new ActiveXObject("MSXML2.DOMDocument.6.0");
doc.async = false;
doc.load(logfilepath);
doc.setProperty("SelectionNamespaces",
"xmlns:w='http://winscp.net/schema/session/1.0'");
唯一的问题是,我不知道为什么。此时的日志文件应该用xml代码覆盖,但这不会发生。
提前感谢您的帮助。
答案 0 :(得分:1)
答案是............ Windows Server 2003上的WinSCP已经过时了。所以过时的日志与一个版本完全不同。更新和VIOLA!问题解决了。谢谢你的帮助。
答案 1 :(得分:0)
也许您需要安装MSXML2.DOMDocument.6.0
http://msdn.microsoft.com/en-us/library/windows/desktop/cc507436%28v=vs.85%29.aspx
如果你打开regedit并查找“MSXML2.DOMDocument.6.0”,它会找到它吗?如果是这样,可能需要设置脚本的安全设置,以便能够创建activeX对象。
当你把一些东西放在try catch中时,你能看到什么?
try{
//stuff
}catch(e){
WScript.Echo(e.message);
}