【问题标题】:Script Works on Win 7, Not on Server 2003脚本在 Win 7 上工作,而不是在 Server 2003 上
【发布时间】:2013-05-08 14:43:57
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

    标签: vbscript windows-server-2003 windows-server


    【解决方案1】:

    答案是............ Windows Server 2003 上的 WinSCP 已经过时了。如此过时,日志与一个版本完全不同。更新和中提琴!问题解决了。谢谢你的帮助。

    【讨论】:

      【解决方案2】:

      也许你需要安装 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);
      }
      

      【讨论】:

      • 我打开 regedit 并搜索“MSXML2.DOMDocument.6.0”,它找到了一个值。我也以管理员身份运行该文件。
      • system32中还有一个名为msxml6.dll的文件
      • 在我的回答中添加了try catch,你可以试试看是否能捕捉到任何错误并检查错误信息。
      • 不返回错误。关于这段代码的奇怪之处。它的功能就像它正在工作一样,但它永远不会找到该文件。我发现 xml 代码永远不会被写入。它应该(并且在 win 7 上确实如此)将日志文件替换为 FTP 目录的 xml 格式,但事实并非如此。生成 xml 代码时出现了问题。尝试 catch 不会返回任何内容。
      猜你喜欢
      • 2011-12-26
      • 2011-09-11
      • 2013-06-22
      • 1970-01-01
      • 2014-03-28
      • 2015-12-25
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多