functions/Get-MicrosoftAzureDatacenterIPRangeFile.ps1
#requires -Version 3.0 function Get-MicrosoftAzureDatacenterIPRangeFile { <# .SYNOPSIS Downloads either the Microsoft Azure Datacenter IP Ranges file, or the Windows Azure Datacenter IP Ranges in China file. The file can be stored in memory or to the file system. .DESCRIPTION This CMDLet will download either of the two files: Microsoft Azure Datacenter IP Ranges (https://www.microsoft.com/en-us/download/details.aspx?id=41653) Windows Azure Datacenter IP Ranges in China (https://www.microsoft.com/en-us/download/details.aspx?id=42064) If the -ChinaRegion parameter is not specified, then Microsoft Azure Datacenter IP Ranges is downloaded. If the -ChinaRegion parameter is specified, then Windows Azure Datacenter IP Ranges in China is downloaded. It should be noted that this file is updated on a weekly basis, so if you save these file, then you should re-download them on a regular basis. This cmdlet makes use of Invoke-WebRequest. .EXAMPLE C:\PS> Get-MicrosoftAzureDatacenterIPRangeFile Returns an XML document from the Microsoft Azure Datacenter IP Ranges file .EXAMPLE C:\PS> Get-MicrosoftAzureDatacenterIPRangeFile -Path C:\Temp\AzureRanges.xml Dowloads the Microsoft Azure Datacenter IP Ranges file to C:\Temp\AzureRanges.xml .EXAMPLE C:\PS> Get-MicrosoftAzureDatacenterIPRangeFile -ChinaRegion Returns an XML document from the Microsoft Azure Datacenter IP Ranges in China file .EXAMPLE C:\PS> Get-MicrosoftAzureDatacenterIPRangeFile -ChinaRegion -Path C:\Temp\AzureRangesChina.xml Downloads the Microsoft Azure Datacenter IP Ranges in China file to C:\Temp\AzureRangesChina.xml .OUTPUTS XML document containing Azure Subnets, or Void if saving the file to the file system #> [CmdletBinding(DefaultParameterSetName = 'xml')] [OutputType([System.Xml.XmlDocument], ParameterSetName = 'path')] [OutputType([void], ParameterSetName = 'xml')] param( # Path where you want to save the XML file [Parameter(Mandatory = $false, ParameterSetName = 'path', Position = 0)] [ValidateNotNullOrEmpty()] [ValidateScript({Test-Path -Path (Split-Path -Path $_ -Parent) -PathType Container})] [String] $Path, # Download China Region File [Parameter(Mandatory = $false, Position = 1)] [Switch] $ChinaRegion ) if ($PSBoundParameters.ContainsKey('ChinaRegion') -and $ChinaRegion) { Write-Verbose -Message 'Downloading... Windows Azure Datacenter IP Ranges in China' $MicrosoftDownloadsURL = 'https://www.microsoft.com/en-us/download/confirmation.aspx?id=42064' } else { Write-Verbose -Message 'Downloading... Microsoft Azure Datacenter IP Ranges' $MicrosoftDownloadsURL = 'https://www.microsoft.com/en-us/download/confirmation.aspx?id=41653' } $DownloadPage = Invoke-WebRequest -UseBasicParsing -Uri $MicrosoftDownloadsURL $DownloadLink = ($DownloadPage.Links | Where-Object -FilterScript {$_.outerHTML -match 'Click here' -and $_.href -match '.xml'}).href[0] if ($PSCmdlet.ParameterSetName -eq 'path') { Write-Verbose -Message ('Saving file to {0}' -f $Path) Invoke-WebRequest -UseBasicParsing -Uri $DownloadLink -OutFile $Path } else { Write-Verbose -Message 'Downloading and creating XML object' $Request = Invoke-WebRequest -UseBasicParsing -Uri $DownloadLink $RequestXML = Select-Xml -Content $Request.toString() -XPath / $RequestXML.Node } } |