Powershell Script needed

I would like a script that does the following. Compare two text files and find duplicates. Then take the duplicates and try to ping them. If the address can't be resolved(only this case "Ping request could not find host $hostname") then output to file. I'm looking for the exact code, I'm pretty sure it's out there, just don't have the time right now and it's an easy 500 points.
LouisSanchezAsked:
Who is Participating?
 
Chris DentPowerShell DeveloperCommented:

I've used Compare-Object to find the matching entries between the files, and System.Net.Dns to tell you if the name resolves to an IP rather than Ping.

If you set $VerbosePreference = "continue" you'll see the verbose messages as well, useful for checking it's doing something.

Chris
Compare-Object $(Get-Content File1.txt) $(Get-Content File2.txt) -ExcludeDifferent -IncludeEqual | ForEach-Object {
  $Entry = $Null
  Try {
    $Entry = [Net.Dns]::GetHostEntry($_.InputObject)
  } Catch { }
  If (!$?) {
    "Ping request could not find host $($_.InputObject)"
  }
  Write-Verbose "$($_.InputObject) : $($Entry.AddressList)"
}

Open in new window

0
 
bobalobCommented:
Ok here's one - cheap and dirty - doesn't do any exception catching, makes nasty red exception text appear on the screen, but only had 5 mins to do it. I have't done any testing with this apart from making sure it kinda works. If you get *any* exception from the ping the host will be added to the output file.

I'll do it again with DNS lookup when I get some time but this will be a start...
$file1 = gc c:\temp\file1.txt
$file2 = gc c:\temp\file2.txt

$FinalResultsArry

foreach ($server in $file1)
{
	if ($file2 -contains $server)
	{
		write-host "Duplicate-Found - Pinging $($server)..." -nonewline
		$pingObj,$pingresult = $null
		$pingObj = new-object System.Net.NetworkInformation.Ping
		$PingResult = $pingObj.send($server)
		Write-host "$($pingresult.status)"
		if ($Pingresult.status -eq $null) {$FinalResultsArry += $server}
	}
}

$FinalResultsArry | Out-File -file "c:\temp\output.txt" -enc ASCII

Open in new window

0
 
bobalobCommented:
oh, it *won't* add a host which just times out to the output.txt by the way...
0
On-Demand: Securing Your Wi-Fi for Summer Travel

Traveling this summer?Check out our on-demand webinar to learn about the importance of Wi-Fi security and 3 easy measures you can start taking immediately to protect your private data while using public Wi-Fi. Follow us today to learn more!

 
Chris DentPowerShell DeveloperCommented:

I forgot to add file output, if you redirect at the end it'll deal with that.

That is, add this after the last curly bracket:  > OutputFile.txt

Chris
0
 
LouisSanchezAuthor Commented:
I guess I need more of a merge of duplicates not just only duplicates. This is what I have. If one of you guys could spruce it up I'll be all set.

#delete
$NULL>test.txt

#Merge Files
$file = gc file1.txt
$file += gc file2.txt
$file=$file | sort | get-unique
$file | Out-File -file "merge.txt" -enc ASCII

Compare-Object $(Get-Content merge.txt) $(Get-Content merge.txt) -IncludeEqual | ForEach-Object {
  $Entry = $Null
  Try {
    $Entry = [Net.Dns]::GetHostEntry($_.InputObject)
  } Catch { }
  If (!$?) {
    "Ping request could not find host $($_.InputObject)"
    $_.InputObject>> test.txt
  }
  Write-Verbose "$($_.InputObject) : $($Entry.AddressList)"
  }
0
 
Chris DentPowerShell DeveloperCommented:

You mean you need a unique list of machines from both files?

Chris
0
 
LouisSanchezAuthor Commented:
Yes in other words merge, remove duplicates, process remaining machines.
0
 
bobalobCommented:
i guessed thats what he ment - i've plagurised your code to make something horrific but works as requested.


#Merge Files
$file = gc c:\temp\file1.txt
$file += gc c:\temp\file2.txt
$file=$file | sort | get-unique


$output = $file | ForEach-Object {
  $Entry = $Null
  Try {
    $Entry = [Net.Dns]::GetHostEntry($_)
  } Catch { }
  If (!$?) {
    "$($_) : Ping request could not find host"
    $_.InputObject>> test.txt
  } else {
  "$($_) : $($Entry.AddressList)"}
  } 

$output | out-file -file c:\temp\output.txt -enc ASCII

gc c:\temp\output.txt | ? {$_ -match "Ping request could not find host"}

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.