Get-PostCodeAddress.ps1
|
<#PSScriptInfo .VERSION 1.02 .GUID 31863f80-0475-47fa-9153-66e8119ffa92 .AUTHOR liambinnsconroy@gmail.com .COMPANYNAME .COPYRIGHT (C) Liam Binns-Conroy. All rights reserved. .TAGS .LICENSEURI .PROJECTURI .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES #> <# .SYNOPSIS Gets an address from each postal code in the input file. .DESCRIPTION Given a file containing a list of postal codes, gets and outputs an address for each code. Uses the google maps api. .PARAMETER Path The path to the file containing the list of post codes. Either this or PostCode must be specified. .PARAMETER PostCode A comma separated series of post codes, e.g. "3210","3216". Either this or Path must be specified. .PARAMETER CountryCode The country code to help refine the search results e.g. NZ. Not mandatory but almost essential for countries outside the US. .PARAMETER OutputPath The full path to the file the output will be written to. .EXAMPLE Get-PostCodeAddress ` -Path 'C:\postcodes.txt' ` -CountryCode 'NZ' ` -Verbose postcodes.txt: 3210 1061 Output is: 2 Cherie Cl, Rototuna, Hamilton 3210, New Zealand 269A Mount Smart Rd, Onehunga, Auckland 1061, New Zealand Get-PostCodeAddress ` -PostCode "3210","1061" ` -CountryCode 'NZ' ` -Verbose Output is: 2 Cherie Cl, Rototuna, Hamilton 3210, New Zealand 269A Mount Smart Rd, Onehunga, Auckland 1061, New Zealand #> param ( [String] $Path, [String[]] $PostCode, [String] $CountryCode, [String] $OutputPath ) # Get the postcodes from the txt file if it exists if (!([String]::IsNullOrEmpty($Path))) { $postCodes = Get-Content -Path $Path } # Or if the user has specified an array elseif(!([String]::IsNullOrEmpty($PostCode))) { $postCodes = $PostCode } # If an output path is specified, set the output flag if (![String]::IsNullOrEmpty($OutputPath)) { New-Item -Path $OutputPath -Force $out = $true } foreach ($postcode in $postCodes) { # Get the coordinates of the post code $postCodeCoords = Invoke-RestMethod -Method GET -Uri "http://maps.googleapis.com/maps/api/geocode/json?address=$postcode $CountryCode" $postCodeLat = $postCodeCoords.results.geometry.location.lat $postCodeLong = $postCodeCoords.results.geometry.location.lng # Get an address in that postcode $address = Invoke-RestMethod -Method GET -Uri "http://maps.googleapis.com/maps/api/geocode/json?address=$postCodeLat,$postCodeLong&location_type=ROOFTOP&result_type=street_address" # Return the address if($address.results.formatted_address) { if($out) { Add-Content -Path $OutputPath -Value $address.results.formatted_address[0] } else { $address.results.formatted_address[0] } } else { Write-Output "$postcode not found/valid" } } |