2015-02-23 66 views
-1

我正在使用Try :: Tiny語句來避免因爲無法向主機發送rsh而失敗。但似乎rsh無限期地重試。Perl Try :: Tiny停留在循環中

在這種特殊情況下,Host2關閉,代碼只是反覆嘗試聯繫Host2,直到我用CTRL + C取消執行。我期望的是Host2 rsh命令失敗,腳本移動到Host3。

任何想法,爲什麼這不起作用,我怎麼能做不同?

@Win_Clients = ("Host1","Host2","Host2"); 

foreach $Win_Client (@Win_Clients){ 
    try { 
     @mem= rsh ($Win_Client, "wmic memphysical get MaxCapacity"); 
     print "host=$Win_Client, mem=$mem"; 
    }; 
} 
+0

你需要'rsh'來使用'wmic'嗎?你不能使用'/ node:host'嗎? – Sobrique 2015-02-23 16:28:01

+0

我不熟悉/ node:host。一個快速的谷歌搜索沒有變成什麼。你有更多的細節鏈接? – broncofan7 2015-02-23 16:35:46

+0

試試'help wmic':'/ NODE服務器別名將對其操作.'。例如。 'wmic/node:localhost partition get' – Sobrique 2015-02-23 16:42:28

回答

0

我覺得你最好的解決辦法是不使用rsh運行WMIC,而是使用內置的遠程訪問機制/node

C:\Users\ME>wmic /node:localhost memphysical get MaxCapacity 
MaxCapacity 
4194304 


C:\Users\ME>wmic /node:narf memphysical get MaxCapacity 
Node - narf 
ERROR: 
Description = The RPC server is unavailable. 

然後你不需要做任何事情一樣運行rshtry。您可以簡單地以「常規方式」捕獲錯誤級別。 ($?在你的perl客戶端)

C:\Users\ME>wmic /? 

[global switches] <command> 

The following global switches are available: 
/NAMESPACE   Path for the namespace the alias operate against. 
/ROLE    Path for the role containing the alias definitions. 
/NODE    Servers the alias will operate against. 
+0

不幸的是,運行這個腳本的主機是一個linux系統,所以用這種方式運行它並不是一種選擇。我試圖從Linux運行遠程命令到Windows盒子。 – broncofan7 2015-02-23 16:51:33

+0

你在Windows主機上運行'rshd'嗎?這很不尋常。 – Sobrique 2015-02-23 16:52:04

+0

是的。我是MegaCorp的一部分,這是他們的自動化如何與Windows盒子一起實現的。 – broncofan7 2015-02-23 16:59:28