2012-08-16 102 views
0

我試圖按照post here解析w32tm的輸出,並將這些項目排列在一個易於閱讀的數據表中。我注意到,我得到了無序的,不正確的結果放在不同的列。運行w32tm並將結果賦值給變量給出不同的輸出

在測試中,如果我輸入:

w32tm /monitor /domain:mydomain.com.au /Threads:5 

我得到命令和格式正確無誤,它的每個服務器的NTP偏移和ICMP延遲出現的完美,像這樣:

kesvm001.mydomain.com.au[xxx.xxx.xxx.x:xxx]: 
    ICMP: 37ms delay 
    NTP: -0.0446479s offset from VM021.mydomain.com.au 
     RefID: VM021.mydomain.com.au [xxx.xxx.xx.xxx] 
     Stratum: 4 
VM033.mydomain.com.au[xxx.xxx.xxx.xx:xxx]: 
    ICMP: 50ms delay 
    NTP: -0.0640493s offset from VM021.mydomain.com.au 
     RefID: 80.84.77.86.rev.sfr.net [xx.xx.xx.xx] 
     Stratum: 2 

如果我那麼這樣做:

$output = & w32tm /monitor /domain:mydomain.com.au /Threads:5 
$output 

我能解釋它做的唯一方法是,它似乎outp UT所有的詳細信息,以及...

Getting AD DC list for mydomain.com.au 
Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:Analyzing:delayoffset from VM021.mydomain.com.au 
Stratum: 4 

    1 2 -- (0 of 48) 
11 12 3 (9 of 48) 
16 13 17 (14 of 48) 
21 18 20 (18 of 48) 
26 18 27 (24 of 48) 
26 18 28 (25 of 48) 
26 18 30 (27 of 48) 
26 18 31 (28 of 48) 
26 18 32 (29 of 48) 
26 18 32 (29 of 48) 
33 34 32 (31 of 48) 
39 40 41 (38 of 48) 
42 46 41 (43 of 48) 
42 -- 41 (46 of 48) 
-- -- 41 (47 of 48) 
-- -- 41 (47 of 48) 
-- -- 41 (47 of 48) 
-- -- 41 (47 of 48) 




kesvm001.mydomain.com.au[xxx.xxx.xxx.xxx:xxx]: 
    ICMP: 37ms 
    NTP: -0.1127470s   RefID: VM021.mydomain.com.au [192.168.48.150] 
     VM033.mydomain.com.au[xxx.xxx.xxdelayoffset from VM021.mydomain.com.au 
Stratum: 2 
delayoffset from VM021.mydomain.com.au 
Stratum: 4 
delayoffset from VM021.mydomain.com.au 
Stratum: 3 
delayoffset from VM021.mydomain.com.au 
Stratum: 4 
delayoffset from VM021.mydomain.com.au 
Stratum: 4 
delayoffset from VM021.mydomain.com.au 
Stratum: 4 
delayoffset from VM021.mydomain.com.au 
Stratum: 4 
delayoffset from VM021.mydomain.com.au 

我認爲這可能與使用多線程做的,但即使改變線程1後,它沒有什麼區別。這裏發生了什麼?我所做的一切(我認爲)是採取任何通常出現在屏幕上的輸出,並將其放置在一個變量中...

回答

0

它實際上做它應該做的事情。它是所有產量的主要來源。如果您將在cmd控制檯中運行它,您會注意到在顯示結果之前它實際上會打印出一些進度信息。在PowerShell中捕獲所有內容。如果你想過濾掉一些東西出來,你可以做這樣的事情:

$output = & w32tm /monitor /domain:mydomain.com /threads:5 
$output | Where-Object{!$_.StartsWith("Analyzing") -and !$_.StartsWith("   ") -and !$_.Contains(" of ") -and !$_.StartsWith("Stratum") -and !$_.StartsWith("delayoffset")} 
+0

是的,你是正確的,感謝這個!你認爲無論如何只是簡單地捕捉屏幕上最終留下的內容('最終'輸出),而不是所有其他進度信息? – 2012-08-19 23:44:49

+0

@ ChristopherO'Neil從未聽說過。我想不是 – 2012-08-20 06:32:46