0

我正在尝试读取主机文件并尝试 ping 每个主机名,然后在响应中捕获 IP 地址并尝试与主机文件中提到的 IP 地址匹配。

我有三种情况:-

1)它 ping 主机并以正确的 IP 结果返回回复:-已解决并已回复 2)它根本不 ping 且未解析 IP 结果:-未解决且未回复 3)它正在 Ping 但未解析 IP正确提及主机文件中的 IP 结果:-未解决和回复

我正在尝试使用以下脚本来实现该场景,但由于需要使用不同的表达式而没有完全实现。

有人可以帮我完成吗

$lines = Get-Content myfile.txt | Where {$_ -notmatch "((^#)|(^\s+$))"}
# get all test pairs
$tests=$lines |
    ForEach-Object{
        $fields = $_ -split '\s+'
    echo " Fields are $fields"
        for ($i = 1; $i -lt $fields.Length; $i++){
            New-Object PsObject -Property @{IP=$fields[0];Host=$fields[$i]}
        }
    }

$tests |
    ForEach-Object{
        $props=@{
            IPAddress=$_.ip
            Hostname=$_.Host
            Resolve =' '
        Reply = ' '
        }



    $PingResult = ping -n 1 -w 10 $_.host 
    #echo "$PingResult"
    foreach ($line in $PingResult)
    {
    if ($line.StartsWith("Pinging") -eq $true)
    {
    $_.ip= $line -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' 
    echo "IP is $IP"
      if   ($matches[0])
        {

                $props.Resolve ='Y'
                $props.Reply='Y'
        }

      else 
                {

                $props.Resolve ='Y'
                $props.Reply='N'

                }

    }
}New-Object PsCustomObject -Property $props



}|
Format-Table -AutoSize | Out-String | Out-File D:\CEP\testlogging.txt 

注意:- 不能使用 Test-Connection,因为当服务器不回复或不存在并且需要更多时间来 ping 时,它会引发异常。

谢谢。

4

1 回答 1

0

假设为时已晚,无法提供太多帮助,但这应该可以解决您使用 Test-Connection 报告的问题。

Test-Connection -ComputerName $IP -Count 1 -ErrorAction SilentlyContinue

这会将 ping 计数限制为 1,并且错误将被忽略。然后您可以使用它生成的对象,而不必解析行。

于 2016-03-27T16:37:43.540 回答