Public/Remove-UnifiSiteAdmin.ps1
function Remove-UnifiSiteAdmin { [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Medium')] param ( [Parameter(Position = 0, Mandatory = $true, ParameterSetName='Default')] [Parameter(Position = 0, Mandatory = $true, ParameterSetName='Others')] [Parameter(Position = 0, Mandatory = $true, ParameterSetName='All')] [string]$name, [Parameter(Position = 1, Mandatory = $true, ParameterSetName='Default')] [Parameter(Position = 1, Mandatory = $true, ParameterSetName='Others')] [Parameter(Position = 1, Mandatory = $false, ParameterSetName='All')] [string]$ID, [Parameter(Mandatory = $true, ParameterSetName='Others')][Switch]$Others, [Parameter(Mandatory = $true, ParameterSetName='All')][Switch]$All, [Parameter(ParameterSetName='Default')] [Parameter(ParameterSetName='Others')] [Parameter(ParameterSetName='All')][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} $AccountInfo=Get-UnifiSiteAdmin -name $name | 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 } if ($all){ $AccountInfo=get-unifiadmin | where-object {$_._id -eq $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 } ) } $ResponseDetails } if ($Others){ $AccountInfo=get-unifiadmin | where-object {$_._id -eq $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")){ if ($site.site_name -eq $name){ $ResponseDetails.Add( [PSCustomObject]@{ AccountID = $ID AccountName = $AccountInfo.name SiteName = $site.site_name SiteDescription = $site.site_desc Results = "skipped" } ) } else { $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 } ) } } $ResponseDetails } if (!$All -or !$Others){ $ResponseDetails = [System.Collections.Generic.List[psobject]]::new() $params = @{ cmd = "revoke-admin" admin = $ID } $body = New-UnifiCommand $params $URI = "$controller/api/s/$name/cmd/sitemgr" $site=Get-UnifiSite | where-object {$_.name -eq $name} write-verbose "Removing account $($AccountInfo.name) from $($site.desc)." $Response=Invoke-POSTRestAPICall -url $URI -payload $body $ResponseDetails.Add( [PSCustomObject]@{ AccountID = $ID AccountName = $AccountInfo.name SiteName = $site.name SiteDescription = $site.desc Results = $Response.meta.rc } ) } $ResponseDetails } #Remove superadmin role if # $params = @{ # cmd = "revoke-super-admin" # admin = $ID # } # $body = New-UnifiCommand $params # $URI = "$controller/api/s/default/cmd/sitemgr" # $null = Invoke-POSTRestAPICall -url $URI -payload $body <# .SYNOPSIS Remove the administrator account specified. .DESCRIPTION Remove the administrator account specified. Optionally, can remove it from all sites, or only other sites. When switch -all or -others are specified, output will contain a object with site specific of response details. .PARAMETER Name Short name for the site. This is the 'name' value from the Get-UnifiSite command. .PARAMETER ID Account id. This is listed as _id property from the Get-UnifiSiteAdmin command. .PARAMETER Others Remove the administrator account from all other sites except the one specified. When this command is specified, output will contain a object with site specific of response details. .PARAMETER All Remove the administrator account from all sites. When this command is specified, output will contain a object with site specific of response details. .INPUTS None. .OUTPUTS System.Object #> } |