我正在尝试读取主机文件并尝试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。
感谢。
答案 0 :(得分:0)
假设为时太晚没有太多帮助,但这应该解决您使用Test-Connection报告的问题。
Test-Connection -ComputerName $IP -Count 1 -ErrorAction SilentlyContinue
这会将ping计数限制为1,并且将忽略错误。然后,您可以使用它生成的对象,而不必解析行。