Public/Remove-UnifiAdmin.ps1
function Remove-UnifiAdmin { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param( [Parameter(Position = 1, Mandatory = $true)][string]$ID, [switch]$force ) # Make sure the specified ID actually exists. write-verbose "Looking up admin account information for admin $id." $AccountInfo=get-unifiadmin | where-object {$_._id -eq $ID} if ($null -eq $AccountInfo){ Write-Error -Message "Specified account id not found." -ErrorAction Stop } else { write-verbose "Found account for admin user $($AccountInfo.name)." } if ($AccountInfo.is_super -eq $true) { if (!$force){ write-error "Specified account is a super-admin. Aborting removal. Use '-force' to remove super-admin accounts." -ErrorAction Stop } } if ($force){ $ConfirmPreference='None' } if ($confirm){ $ConfirmPreference='High' } if ($PSCmdlet.ShouldProcess($AccountInfo.name,"Remove-UnifiSiteAdmin")){ if ($AccountInfo.is_super -eq $true){ write-verbose "Revoking super_admin privileges." Revoke-UnifiSuperAdmin -ID $ID } $ResponseDetails = [System.Collections.Generic.List[psobject]]::new() $params = @{ cmd = "revoke-admin" admin = $ID } $body = New-UnifiCommand $params foreach ($site in ($AccountInfo.roles | sort-object -property "site_desc")){ $URI = "$controller/api/s/$($site.site_name)/cmd/sitemgr" write-verbose "Removing account $($AccountInfo.name) from $($site.site_desc)." $Response=Invoke-POSTRestAPICall -url $URI -payload $body $ResponseDetails.Add( [PSCustomObject]@{ AccountID = $ID AccountName = $AccountInfo.name SiteName = $site.site_name SiteDescription = $site.site_desc Results = $Response.meta.rc } ) } # Refresh the account information. $AccountInfo=get-unifiadmin | where-object {$_._id -eq $ID} if ($null -ne $AccountInfo){ if ($accountinfo.roles.count -eq 0){ $ResponseDetails Write-Error "Ghost account detected. Please assign SuperAdmin rights to this account, then attempt removal again." -ErrorAction Stop } else { $ResponseDetails Write-Error "Some site permissions still exist for this account." -ErrorAction Continue } } else { $ResponseDetails } } <# .SYNOPSIS Remove the administrator account specified. .DESCRIPTION Remove the administrator account specified. This will automatically remove the account from any assigned sites. Output will contain a object with site specific of response details. Use '-force' to remove accounts which have the SuperAdmin role. .PARAMETER ID Account id. This is listed as _id property from the Get-UnifiAdmin command. .PARAMETER Force Force removal of SuperAdmin accounts. .NOTES On occasion, it is possible to have an admin account assigned to no sites. If this happens, granting the SuperAdmin role to the account and removing the account again should fix it. .INPUTS None. .OUTPUTS System.Object #> } |