Public/Uninstall-VCDAAVS.ps1
<# Copyright 2023 VMware, Inc. SPDX-License-Identifier: BSD-2-Clause #> function Uninstall-VCDAAVS { <# .SYNOPSIS Delete all VCDA VMs, any custom roles, folders and accounts used by VCDA. .DESCRIPTION Delete all VCDA VMs, any custom roles, folders and accounts used by VCDA. All VMs must be in Powered Off state. .EXAMPLE Uninstall-VCDAAVS -AcceptUninstall Will Delete all VCDA VMs, any custom roles, folders and accounts used by VCDA. #> [AVSAttribute(30, UpdatesSDDC = $false)] [CmdletBinding()] param ( [Parameter( Mandatory = $false, HelpMessage = 'Accept that All VCDA virtual machines, any custom roles, folders and accounts used by VCDA. will be deleted.')] [switch]$AcceptUninstall ) Try { #make sure vc connection is healthy, script will fail if not if ($null -eq ((Get-View SessionManager -Server $global:DefaultVIServer).CurrentSession)) { Write-Error "vCenter server '$($Global:defaultviserver.Name)' connection is not heathy." } if ($AcceptUninstall -ne $true) { Write-Error 'You must accept that All VCDA virtual machines, any custom roles, folders and accounts used by VCDA will be deleted.' } #get SSO Domain $SSO_domain = (Get-IdentitySource -System).name $VCDA_VMs = Get-VCDAVM -ErrorAction SilentlyContinue if ($null -eq $VCDA_VMs) { Write-Log -message "No VCDA VMs found." } elseif ($VCDA_VMs) { #check if all VMs are in powered off state $power_on_count = 0 $VCDA_VMs | Where-Object { $_.PowerState -ne "PoweredOff" } | ForEach-Object { Write-Log -message "VM '$($_.name)' is in '$($_.PowerState)' State." $power_on_count += 1 } if ($power_on_count -ne 0) { Write-Error "Found $power_on_count VCDA VMs not in powered off state. Power off all VMs and try again." } elseif ($power_on_count -eq 0) { foreach ($vm in $VCDA_VMs) { Write-Log -message "Deleting VM '$($vm.name)'" Remove-VM -VM $vm -DeletePermanently -Confirm:$false } } } #proceed with clean up if all VMs are removed successfully if ($null -eq (Get-VCDAVM)) { #remove sso uer $sso_user = Get-SsoPersonUser -Name $Script:vcda_avs_params.vsphere.sa_username -Domain $SSO_domain if ($null -ne $sso_user) { Write-Log -message "Removing VCDA service account user '$($Script:vcda_avs_params.vsphere.sa_username)'" Remove-SsoPersonUser -User $sso_user } else { Write-Log -message "VCDA service account '$($Script:vcda_avs_params.vsphere.sa_username)' not found." } #remove vc role $role = Get-VIRole -Name $Script:vcda_avs_params.vsphere.vsphere_role -ErrorAction SilentlyContinue if ($null -ne $role) { Write-Log -message "Removing vCenter Role '$($Script:vcda_avs_params.vsphere.vsphere_role)'" Remove-VIRole -Role $role -Confirm:$false -Force } else { Write-Log -message "vCenter Role '$($Script:vcda_avs_params.vsphere.vsphere_role)' not found." } $group = Get-SsoGroup -Name "VrAdministrators" -Domain $SSO_domain if ($null -ne $group){ Write-Log -message "Removing vCenter group 'VrAdministrators'." Remove-SsoGroup -Group $group } else { Write-Log -message "vCenter Group 'VrAdministrators' not found." } #remove the secure folder $vm_folder = Get-Folder -Name $Script:vcda_avs_params.vsphere.folder -ErrorAction SilentlyContinue if ($null -ne $vm_folder) { Write-Log -message "Deleting secure folder '$($Script:vcda_avs_params.vsphere.folder)'" Remove-Folder -Folder $vm_folder -Confirm:$false } else { Write-Log -message "Secure folder '$($Script:vcda_avs_params.vsphere.folder)' not found." } } } Catch { $PSCmdlet.ThrowTerminatingError($_) } } |