2013-05-08 60 views
1

我有一個非常簡單的腳本,它引導WinSCP並檢查以「TSA」開頭的文件的目錄。如果文件存在,它將退出,如果它不存在,它將通過一個新文件進行傳輸。腳本在Win 7上運行,不在Server 2003上

它啓動並運行在我的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代碼寫入,但這不會發生。

在此先感謝您的幫助。

回答

1

答案是........... Windows Server 2003上的WinSCP過時了。因此,過時的日誌完全不同於一個版本。更新和VIOLA!問題解決了。謝謝你的幫助。

0

也許你需要如果你打開註冊表編輯器並查找「MSXML2.DOMDocument.6.0」它發現它安裝MSXML2.DOMDocument.6.0

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

?如果是這樣,可能需要設置腳本的安全設置,以便能夠創建一個activeX對象。

當你把一些東西放在try catch中時,你會看到什麼?

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

我打開註冊表並搜索「MSXML2.DOMDocument.6.0」,它發現一個值。我也以管理員身份運行該文件。 – user2241406 2013-05-08 14:53:22

+0

system32中還有一個名爲msxml6.dll的文件 – user2241406 2013-05-08 14:59:32

+0

在我的答案中添加了try catch,您可以嘗試查看是否可以捕獲任何錯誤並檢查錯誤消息。 – HMR 2013-05-08 15:20:18