This is a blogpost about a script which initiates a delete request for all resources in a Resource Group, I use this script for deleting WVD hostpools with Powershell.
The hostpool resource need to be deleted in an exact order.
1. VM’s need to be deleted first.
2. After that sessionhosts must delete from the hostpool.
3. Then all the resource except for the hostpool are deleted.
4. Lastly, the hostpool is deleted.
Script Syntaxis
This is the syntaxis for the script. In addition, please remember to edit the array “$ResourceGroupname”.
$ResourceGroupName = "ResourceGroupName"
$ExistingHostPool = Get-AzResource -ResourceGroupName $ResourceGroupName | Where-Object ResourceType -eq Microsoft.DesktopVirtualization/hostpools
#VM's need to be deleted first.
$HostpoolResourcesVMs = Get-AzResource -ResourceGroupName $ResourceGroupName | Where-Object ResourceType -eq Microsoft.Compute/virtualMachines
foreach ($HostpoolResourceVM in $HostpoolResourcesVMs){
Write-Host Deleting $HostpoolResourceVM.Name
Remove-AzResource -Resourceid $HostpoolResourceVM.ResourceId -force
}
# After that sessionhosts must be delete from Hostpool
foreach ($Hostpool in $ExistingHostPool) {
$WVDSessionhosts = Get-AzWvdSessionHost -HostPoolName $Hostpool.Name -ResourceGroupName $ResourceGroupName
foreach ($WVDSessionHost in $WVDSessionhosts) {
$InputString = $WVDSessionhost.Name
$WVDArray = $InputString.Split("/")
$WVDArray[0]
$WVDArray[1]
Write-host Removing $WVDArray[1] from Hostpool $HostPool.Name
Remove-AzWvdSessionHost -HostPoolName $HostPool.Name -ResourceGroupName $ResourceGroupName -Name $WVDArray[1]
}
}
#Now it is time to delete all resources except for the hostpool
$HostpoolResources0thers = Get-AzResource -ResourceGroupName $ResourceGroupName | Where-Object ResourceType -ne Microsoft.DesktopVirtualization/hostpools
foreach ($HostpoolResources0ther in $HostpoolResources0thers){
Write-Host Deleting $HostpoolResources0ther.Name
Remove-AzResource -Resourceid $HostpoolResources0ther.ResourceId -force
}
#Lastly delete the host pool
foreach($Hostpool in $ExistingHostPool){
if (($ExistingHostPool).count -gt "0") {
Write-Host "Removing Windows Virtual Desktop Hostpool $HostPool.Name"
Remove-AzWvdHostPool -Name $HostPool.Name -ResourceGroupName $ResourceGroupName
}
}
Example
Firstly, check whether you have correct Powershell modules installed. Use the following code to do so:
$installedPackageProvider = Get-PackageProvider
if ($installedPackageProvider.Name -notmatch "NuGet") {
Install-PackageProvider -Name NuGet -force
Write-Host("Install powershell module NuGet")
}
$installedModules = Get-InstalledModule
if ($installedModules.Name -notmatch "Az.Accounts") {
Install-Module Az.Accounts -Force -AllowClobber
Write-Host("Install powershell module Az Accounts")
}
if ($installedModules.Name -notmatch "Az.Resources") {
Install-Module Az.Resources -Force -AllowClobber
Write-Host("Install powershell module Az Resources")
}
if ($installedModules.Name -notmatch "Az.DesktopVirtualization") {
Install-Module Az.DesktopVirtualization -Force -AllowClobber
Write-Host("Install powershell module Az DesktopVirtualization")
}
Secondly, you need to connect to Azure Powershell. You can do so by using the following command:
Connect-AzAccount
Firstly, save the script syntaxis as a .ps1 file. After that, open up Powershell and browse to the location where you placed the script.
Now it’s time to run the script. Save the script as a ps1 file and run it:
.\DeleteHostPoolscript.ps1
This is the output for the script. As you can see the order mentioned in the first paragraph is shown:

And that is how you delete WVD hostpools with a Powershell script!
References
My other WVD scripts:
Logoff Users from a WVD Hostpool
Set Drain Mode on a WVD Hostpool
Microsoft Docs about WVD Powershell
5 thoughts on “WVD Delete Hostpools Powershell”