1

我正在使用以下方法来测量我们的域控制器和 ntp 服务器之间的时间偏移。

$Servers = "ntp.xxxxx,ntp.xxxxx,dc1,dc2,dc3,dca,dcb,dcc"
$ListDomains = "domain1","domain2"

Foreach($ListServers 中的 $Server){
    $time = (w32tm /stripchart /dataonly /computer:$Server /samples:1)[-1].split("[")[0]
    "$Server`: `t $Time" #| 输出文件 $timeFile -append
    $时间 = ""  
}

ForEach ($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(offset) 感兴趣。

由于 NTP 框是 Solaris,我们不能使用 WMI 查询。

谢谢,阿米莉亚

4

1 回答 1

4

试试这个。它读取w32tm标准输出并将其解析为自定义对象并将它们放入数组中。您可以像处理任何其他对象集合一样处理数组。

    $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 += 新对象 PsObject -Property @{
            服务器 = $服务器
            ICMP = $icmp
            偏移量 = $offset
        }
    }

    $timeInfos
于 2012-03-21T10:24:55.080 回答