运行w32tm并将结果赋值给变量给出不同的输出

问题描述:

我试图按照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后,它没有什么区别。这里发生了什么?我所做的一切(我认为)是采取任何通常出现在屏幕上的输出,并将其放置在一个变量中...

它实际上做它应该做的事情。它是所有产量的主要来源。如果您将在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