Created a simple script for listing and exporting Custom Domains from an Azure Web App.
Finding the suitable cmdlet for the job
In the creation of the script first step was to find the cmdlet for listing information about Web Apps. A handy tool is to use the cmdlet
and filter by az module and Web App information. The result looks something like this:Get-Command "*Get-AzWebApp*
PS C:\Get-Command "*Get-AzWebApp* CommandType Name Version Source ----------- ---- ------- ------ Function Get-AzWebAppCustomHostname Cmdlet **Get-AzWebApp** 1.0.0 Az.Websites Cmdlet Get-AzWebAppBackup 1.0.0 Az.Websites Cmdlet Get-AzWebAppBackupConfiguration 1.0.0 Az.Websites Cmdlet Get-AzWebAppBackupList 1.0.0 Az.Websites Cmdlet Get-AzWebAppCertificate 1.0.0 Az.Websites Cmdlet Get-AzWebAppContainerContinuousDeploymentUrl 1.0.0 Az.Websites Cmdlet Get-AzWebAppMetrics 1.0.0 Az.Websites Cmdlet Get-AzWebAppPublishingProfile 1.0.0 Az.Websites Cmdlet Get-AzWebAppSlot 1.0.0 Az.Websites Cmdlet Get-AzWebAppSlotConfigName 1.0.0 Az.Websites Cmdlet Get-AzWebAppSlotMetrics 1.0.0 Az.Websites Cmdlet Get-AzWebAppSlotPublishingProfile 1.0.0 Az.Websites Cmdlet Get-AzWebAppSnapshot 1.0.0 Az.Websites Cmdlet Get-AzWebAppSSLBinding 1.0.0 Az.Websites
Listing Custom Hostnames bound to a Web App
To list out custom hostnames I used the second cmdlet from the list above
. The script takes to mandatory parameters, Get-AzWebApp
and -ResourceGroupName
, and the output looks something like this:-Name
PS C:\>Get-AzWebApp -ResourceGroupName "webapp-stage-rg" -Name "webapp7110-stage" GitRemoteName : GitRemoteUri : GitRemoteUsername : GitRemotePassword : AzureStoragePath : {} State : Running HostNames : {webapp7110-stage.azurewebsites.net} RepositorySiteName : webapp7110-stage UsageState : Normal Enabled : True EnabledHostNames : {webapp7110-stage.azurewebsites.net, webapp7110-stage.scm.azurewebsites.net} AvailabilityState : Normal HostNameSslStates : {webapp7110-stage.azurewebsites.net, webapp7110-stage.scm.azurewebsites.net} ServerFarmId : /subscriptions/3a5001ab-15ef-46e2-814e-6b29fd23927c/resourceGroups/webapp-stage-rg/providers/Microsoft.Web/serverfarms/webapp7110-stage Reserved : False IsXenon : False LastModifiedTimeUtc : 05.09.2019 10:54:32 SiteConfig : Microsoft.Azure.Management.WebSites.Models.SiteConfig TrafficManagerHostNames : ScmSiteAlsoStopped : False TargetSwapSlot : HostingEnvironmentProfile : ClientAffinityEnabled : True ClientCertEnabled : False HostNamesDisabled : False OutboundIpAddresses : 40.68.205.178,13.95.10.43,13.95.11.97,52.166.198.114,40.68.101.225 PossibleOutboundIpAddresses : 40.68.205.178,13.95.10.43,13.95.11.97,52.166.198.114,40.68.101.225,51.144.109.85,52.233.165.183 ContainerSize : 0 DailyMemoryTimeQuota : 0 SuspendedTill : MaxNumberOfWorkers : CloningInfo : ResourceGroup : webapp-stage-rg IsDefaultContainer : DefaultHostName : webapp7110-stage.azurewebsites.net SlotSwapStatus : HttpsOnly : False Identity : Id : /subscriptions/3a5001ab-15ef-46e2-814e-6b29fd23927c/resourceGroups/webapp-stage-rg/providers/Microsoft.Web/sites/webapp7110-stage Name : webapp7110-stage Kind : Location : West Europe Type : Microsoft.Web/sites Tags :
In the output above you can see a property named Hostnames (look for the bold one). We need this property to get access and list the hostnames. To do this we can run the cmdlet below. In the output of the cmdlet there is no other hostname than the default, so its not a large list per say.
PS C:\>(Get-AzWebApp -ResourceGroupName "webapp-stage-rg" -Name "webapp7110-stage").HostNames webapp7110-stage.azurewebsites.net
This is pretty much the script for listing/collecting a list of hostnames bound to an Azure Web App, but a made a few more modification.
Creating export possibilities
I made some further enhancements to the script by adding an export possibility. I did this creating the cmdlet above into an advanced function and added a
parameter. When the switch parameter is used, by running the script with Swith
, like the cmdlet below; the script prompts you for the file path and filename, then it opens the txt-file in notepad. If you don’t use the switch parameter it lists the Hostnames in the console, same as the cmdlet above.-OutPutToFile
Get-AzWebAppCustomHostname -ResourceGroupName "webapp-stage-rg" -WebAppName "webapp7110-stage" -OutputToFile
function Get-AzWebAppCustomHostname { [CmdletBinding()] param ( # Name of the Web App Resource Group [Parameter(Mandatory = $true)] [String] $ResourceGroupName, # Name of the App Service [Parameter(mandatory = $true)] [String] $WebAppName, # Optional, if you want to output the list to a .txt file [Parameter(Mandatory = $false)] [switch] $OutputToFile = $false ) process { $Hostnames = (Get-AzWebApp -ResourceGroupName $ResourceGroupName -Name $WebAppName).HostNames if ($OutputToFile -eq $true) { $FilePath = Read-Host "Choose filepath..." $FileName = Read-Host "Choose filename..." $Hostnames | Out-File -FilePath "$FilePath\$FileName.txt" -Force notepad.exe "$FilePath\$FileName.txt" } else { Write-Output $Hostnames } } }
The result from the script when using the switch
parameter.
A little cool experiment for learning more about the switch parameter and exporting to file operations with PowerShell, and with that have a great day!