我正在使用以下内容来衡量域控制器和ntp服务器之间的时间偏移。
$Servers = "ntp.xxxxx,ntp.xxxxx,dc1,dc2,dc3,dca,dcb,dcc" $ListDomains = "domain1","domain2" Foreach ($Server in $ListServers) { $time = (w32tm /stripchart /dataonly /computer:$Server /samples:1)[-1].split("[")[0] "$Server`: `t $Time" #| out-file $timeFile -append $time = "" } ForEach ($Domain in $ListDomains) { "** $Domain **" w32tm /monitor /domain:"$Domain.unisa.edu.au" /nowarn /threads:5 }
这很有效,但输出很糟糕。 域名1
itupw-xxxxx.xxxxxxxxxxxxxx[666.666.6.76:123]:
ICMP: 0ms delay
NTP: -0.0099384s offset from itupw-xxxxx.xxxxxxxxxxxxxx
RefID: itupw-xxxxx.xxxxxxxxxxxxxx[22222222222222]
Stratum: 5
itupw-xxxxx.xxxxxxxxxxxxxx[999.666.6.76:123]:
ICMP: 0ms delay
NTP: -0.0093544s offset from itupw-xxxxx.xxxxxxxxxxxxxx
RefID: itupw-xxxxx.xxxxxxxxxxxxxx[22222222222222]
Stratum: 5
任何人都可以建议一种格式化方法,以便更容易比较数据吗?我们只对Name,ICMP,NTP(偏移)感兴趣。
由于NTP框是Solaris,我们无法使用WMI查询。
谢谢, 阿米莉亚
答案 0 :(得分:4)
尝试一下。它读取w32tm
stdout并将其解析为自定义对象并将它们放入数组中。您可以像处理任何其他对象一样处理数组。
$output1 = & w32tm /monitor /domain:yourdomain.com /threads:5 $stdOutStart = 8 $output = $output1[$stdOutStart..$output1.Length] $timeInfos = @() for ($i = 0 ; $i -lt $output.Length ; $i+=4) { $server = $output[$i].Split(' ')[0] $icmp = $output[$i+1].Trim().Split(' ')[1] $offset = $output[$i+2].Trim().Split(' ')[1] $timeInfos += New-Object PsObject -Property @{ Server = $server ICMP = $icmp Offset = $offset } } $timeInfos