使用Ping命令时Power shell脚本中的问题

时间:2013-08-02 06:57:16

标签: powershell

我正在尝试读取主机文件并尝试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。

感谢。

1 个答案:

答案 0 :(得分:0)

假设为时太晚没有太多帮助,但这应该解决您使用Test-Connection报告的问题。

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

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