2013-05-08 1 views
1

J'ai un script qui est plutôt simple, il démarre WinSCP et vérifie le répertoire pour un fichier qui commence par "TSA". Si le fichier existe, il se ferme, s'il n'existe pas, il transfère sur un nouveau fichier.Script fonctionne sur Win 7, pas sur le serveur 2003

Son fonctionnement sur mon ordinateur Windows 7, c'est là que je l'ai créé - mais quand je le transfère sur mon serveur [Windows Server 2003] il ne trouve jamais le fichier.

Mon script:

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); 
} 

Après enquête beaucoup, je pense que je l'ai trouvé le morceau de code qui ne fonctionne pas correctement:

// 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'"); 

Le seul problème est, je ne sais pas Pourquoi. Le fichier journal à ce stade doit être écrit avec le code XML, mais cela ne se produit pas.

Merci d'avance pour toute aide.

Répondre

1

Et la réponse est ............ WinSCP sur Windows Server 2003 était obsolète. Donc, le journal était complètement différent d'une version à l'autre. Mis à jour et VIOLA! Problème résolu. Merci de votre aide.

0

Peut-être que vous devez installer MSXML2.DOMDocument.6.0

http://msdn.microsoft.com/en-us/library/windows/desktop/cc507436%28v=vs.85%29.aspx

Si vous ouvrez regedit et recherchez "MSXML2.DOMDocument.6.0" faut-il trouver? Si c'est le cas, les paramètres de sécurité du script doivent être définis pour pouvoir créer un objet ActiveX.

Que pouvez-vous voir lorsque vous mettez des choses dans essayer attraper?

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

J'ai ouvert regedit et recherché "MSXML2.DOMDocument.6.0" et il a trouvé une valeur. Je cours également le dossier en tant qu'administrateur. – user2241406

+0

Il y a aussi un fichier dans system32 nommé msxml6.dll – user2241406

+0

Ajouté try try à ma réponse, vous pouvez essayer de voir si vous pouvez attraper des erreurs et inspecter le message d'erreur. – HMR

Questions connexes