차이점을 다른 파일로 내보내는 Powershell의 2개 CSV 파일 비교

차이점을 다른 파일로 내보내는 Powershell의 2개 CSV 파일 비교

나는 이 스크립트를 작성했고 오늘 아침 일찍 실패했다고 맹세할 수도 있었지만 지금은 아무것도 얻지 못하고 이유도 모르겠습니다.

기본적으로 파일 간의 차이점을 비교하고 다른 CSV로 내보내야 $SourceAddress합니다 . $OutputAddress출력 파일을 얻는 방법에 대한 도움을 주시면 감사하겠습니다. 또는 'Compare-Object' cmdlet 이외의 비교를 수행하는 더 좋은 방법이 좋을 것입니다. 감사해요.

###########################################################
#
# Douglas Francis
# DNS Audit Script
# V 1.2
# Date: 05/06/2014
#
# Pulls IP address from a text file. Parses the IP's in the text file for their DNS entry and exports to a CSV file. 
# For IP address' that do not resolve get parsed to a new file.
#
#
###########################################################

#This creates an ouput folder called Script_Results to put the results in.

    $CheckFolder = Test-Path -PathType Container Script_Results
    if($CheckFolder -eq $false)
    {
        New-Item 'Script_Results' -Type Directory
    }



#This gets the IP address' from the file

    $IPADDR = Get-Content "C:\Users\douglasfrancis\Desktop\IP_test.txt"



#This logic runs through each line in the text file to get the IP's perform a reverse DNS search and pulls the IP and hostname to be outputted and sorted later. It also ignores the errors from failed results

    $SortIP =@()
    ForEach ($IPADDR in $IPADDR)
    {
        $ErrorActionPreference = "SilentlyContinue"
        $SortIP += [System.Net.DNS]::GetHostbyAddress($IPADDR)  | Add-Member -Name IP -Value $IPADDR -MemberType NoteProperty -PassThru | Select Hostname, IP 
    }



#Running through the data from $SortIP sorts by hostname and exports to CSV

    $SortIP | Sort -Property Hostname | Export-Csv     "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup.csv" -NoTypeInformation



#Here we start to work some voodoo magic. Instead of attempting to parse the errors from the failed DNS results we're going to compare the orginal IP address txt file to the output file of the DNS
#By comparing those two files we can determine what files failed to resolve a DNS and output that to a file for review.

    #Here we're reimporting the exported CSV file of the DNS results. Pulling the IP address column from it and then exporting it again with only the IP info.
    Import-csv "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup.csv" | Select IP | Export-csv -Path "C:\Users\douglasfrancis\Desktop\Script_Results\OutputAddress.csv" -NoTypeInformation

    #Now for some futher voodoo data manipulation. Going to take the source IP address file import it back in as a CSV file with a IP column header.
    # After that we will then reexport it back again as a CSV file so a comparision can be done between the two files.
    Import-csv "C:\Users\douglasfrancis\Desktop\IP_Test.txt" -Header "IP" | Export-csv -Path "C:\Users\douglasfrancis\Desktop\Script_Results\InputAddress.csv" -NoTypeInformation

    #Alright just a bit more voodoo for some more data manipulation. Going to take those parsed data files from above and assign them to a var for further magic
    $OutputAddress = Import-csv "C:\Users\douglasfrancis\Desktop\Script_Results\OutputAddress.csv" -NoTypeInformation
    $SourceAddress = Import-csv "C:\Users\douglasfrancis\Desktop\Script_Results\InputAddress.csv" -NoTypeInformation


#Finally here we make use of all the voodo magic and do a comparison of data so we can find out what IP's failed to resolve via DNS and export that to the failed file.

    Compare-Object $OutputAddress $SourceAddress | Select InputObject | Export-csv "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup_failed.csv" -NoTypeInformation



#Alrighty, one final thing to do some housecleaning and we're outta here!

    Remove-Item "C:\Users\douglasfrancis\Desktop\Script_Results\InputAddress.csv"
    Remove-Item "C:\Users\douglasfrancis\Desktop\Script_Results\OutputAddress.csv"

답변1

오류 처리를 수행하는 Try/Catch로 이동했습니다. 이 문제를 해결하려면 이 방법이 필요합니다.

Try {
             [System.Net.DNS]::GetHostbyAddress($IPADDR)  | 
              Select Hostname,@{label='IP';expression={$IPADDR}} 
            }

        Catch {
               Add-Content -Value "$IPADDR failed lookup" -Path     "C:\Users\douglasfrancis\Desktop\Script_Results\ReverseLookup_failed.csv" 
              }

관련 정보