Vbscript 脚本在Win7上工作,而不是在Server2003上

Vbscript 脚本在Win7上工作,而不是在Server2003上,vbscript,windows-server-2003,windows-server,Vbscript,Windows Server 2003,Windows Server,我有一个相当简单的脚本,它启动WinSCP并检查目录中以“TSA”开头的文件。如果文件存在,则退出;如果文件不存在,则通过新文件传输 它在我的Windows 7机器上启动并运行,这是我创建它的地方——但当我将它传输到我的服务器[Windows server 2003]时,它从未找到该文件 我的剧本: var FILEPATH = "../zfinance/TSA"; // Session to connect to var SESSION = "someplace@somewhere.com"

我有一个相当简单的脚本,它启动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代码重写,但这不会发生


提前感谢您的帮助

也许您需要安装MSXML2.DOMDocument.6.0

如果打开regedit并查找“MSXML2.DOMDocument.6.0”,它会找到它吗?如果是这样,可能需要设置脚本的安全设置,以便能够创建activeX对象

当你把一些东西放进试捕时,你能看到什么

try{
//stuff
}catch(e){
  WScript.Echo(e.message);
}

也许您需要安装MSXML2.DOMDocument.6.0

如果打开regedit并查找“MSXML2.DOMDocument.6.0”,它会找到它吗?如果是这样,可能需要设置脚本的安全设置,以便能够创建activeX对象

当你把一些东西放进试捕时,你能看到什么

try{
//stuff
}catch(e){
  WScript.Echo(e.message);
}

答案是。。。。。。。。。。。WindowsServer2003上的WinSCP已经过时了。因此,日志已经过时,不同版本的日志完全不同。更新和中提琴!问题解决了。谢谢你的帮助

答案是。。。。。。。。。。。WindowsServer2003上的WinSCP已经过时了。因此,日志已经过时,不同版本的日志完全不同。更新和中提琴!问题解决了。谢谢你的帮助

我打开regedit并搜索“MSXML2.DOMDocument.6.0”,它找到了一个值。我还以管理员身份运行该文件。system32中还有一个名为msxml6.dllAdded try catch的文件。对于我的答案,您可以尝试查看是否可以捕获任何错误并检查错误消息。不返回任何错误。这就是这个代码的奇怪之处。它的功能就像它正在工作一样,但它从未找到该文件。我发现xml代码从未被编写过。它应该(在Win7上也是如此)将日志文件替换为FTP目录的xml格式,但事实并非如此。在生成xml代码时,会出现一些问题。Try-catch没有返回任何内容。我打开regedit并搜索“MSXML2.DOMDocument.6.0”,它找到了一个值。我还以管理员身份运行该文件。system32中还有一个名为msxml6.dllAdded try catch的文件。对于我的答案,您可以尝试查看是否可以捕获任何错误并检查错误消息。不返回任何错误。这就是这个代码的奇怪之处。它的功能就像它正在工作一样,但它从未找到该文件。我发现xml代码从未被编写过。它应该(在Win7上也是如此)将日志文件替换为FTP目录的xml格式,但事实并非如此。在生成xml代码时,会出现一些问题。Try-catch不会返回任何内容。