WVD Delete Hostpools Powershell

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:

WVD Powershell delete script output

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”

Leave a Comment