Скрипт работает на Win 7, а не на Server 2003

У меня есть довольно простой сценарий, он загружает WinSCP и проверяет каталог на наличие файла, который начинается с «TSA». Если файл существует, он завершается, если он не существует, он переходит на новый файл.

Он запущен и работает на моем компьютере с Windows 7, где я его создал, но когда я переношу его на свой сервер [windows server 2003], он никогда не находит файл.

Мой сценарий:

var FILEPATH = "../zfinance/TSA";

// Session to connect to
var SESSION = "[email protected]";

// 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, но этого не происходит.

Заранее благодарю за любую помощь.


person user2241406    schedule 08.05.2013    source источник


Ответы (2)


И ответ........... WinSCP на Windows Server 2003 был НАМНОГО устаревшим. Настолько устаревший, что журнал полностью отличался от одной версии к другой. Обновлено и ВИОЛА! Задача решена. Спасибо за вашу помощь.

person user2241406    schedule 08.05.2013

Возможно, вам нужно установить 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);
}
person HMR    schedule 08.05.2013
comment
Я открыл regedit и искал MSXML2.DOMDocument.6.0, и он нашел значение. Я также запускаю файл как администратор. - person user2241406; 08.05.2013
comment
В system32 также есть файл с именем msxml6.dll. - person user2241406; 08.05.2013
comment
К моему ответу добавлена ​​попытка поймать, вы можете попробовать поймать какие-либо ошибки и проверить сообщение об ошибке. - person HMR; 08.05.2013
comment
Не возвращает ошибок. Что странно в этом коде. Он работает так, как если бы он работал, но никогда не находит файл. Я обнаружил, что код xml никогда не записывается. Он ДОЛЖЕН (и это происходит в win 7) заменить файл журнала форматом xml каталога FTP, но это не так. Что-то не так, когда идет генерация xml-кода. Try catch ничего не возвращает. - person user2241406; 08.05.2013