functions/Remove-ServicePrincipalObject.ps1
Function Remove-ServicePrincipalObject { <# .SYNOPSIS Deletes an single Azure active directory application or service principal. .DESCRIPTION Delete an Application or Service Principal pair from the Azure Active Directory. .PARAMETER ApplicationID ApplicationID of the object you are deleting. .PARAMETER Confirm Stops processing before any changes are made to an object. .PARAMETER DeleteEnterpriseApp Used to delete an Azure enterprise application. .PARAMETER DeleteRegisteredApp Used to delete an Azure registered application. .PARAMETER DeleteSpn Used to delete a Service Principal. .PARAMETER DisplayName DisplayName of the objects you are deleting. .PARAMETER ServicePrincipalName ServicePrincipalName of the objects you are deleting. .PARAMETER EnableException Disables user-friendly warnings and enables the throwing of exceptions. This is less user friendly, but allows catching exceptions in calling scripts. .PARAMETER ObjectID ObjectID of the objects you are deleting. .PARAMETER WhatIf Only displays the objects that would be affected and what changes would be made to those objects (without the worry of modifying those objects) .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteRegisteredApp -DisplayName CompanySPN Delete a registered Azure application using the DisplayName 'CompanySPN'. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteRegisteredApp -ApplicationID 34a23ad2-dac4-4a41-bc3b-d12ddf90230e Delete a registered Azure application using the ApplicationID. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteRegisteredApp -ObjectID 34a23ad2-dac4-4a41-bc3b-d12ddf90230e Delete a registered Azure application using the ObjectID. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteEnterpriseApp -DisplayName CompanySPN Delete an enterprise Azure application using the DisplayName 'CompanySPN'. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteEnterpriseApp -ApplicationID 34a23ad2-dac4-4a41-bc3b-d12ddf90230e Delete an enterprise Azure application using the ApplicationID. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteEnterpriseApp -ObjectID 34a23ad2-dac4-4a41-bc3b-d12ddf90230e Delete an enterprise Azure application using the ObjectID. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteSpn -DisplayName CompanySPN Delete a service principal by the DisplayName. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -ServicePrincipalName http://CompanySPN Delete a service principal by the ServicePrincipalName. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteSpn -ApplicationID 34a23ad2-dac4-4a41-bc3b-d12ddf90230e Delete the service principal by the ApplicationID. .EXAMPLE PS c:\> Remove-ServicePrincipalObject -DeleteSpn -ObjectID 34a23ad2-dac4-4a41-bc3b-d12ddf90230e Delete the service principal by the ObjectID. #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseShouldProcessForStateChangingFunctions', '')] [CmdletBinding(SupportsShouldProcess = $True)] Param ( [parameter(HelpMessage = "DisplayName used to delete an application object")] [ValidateNotNullOrEmpty()] [string] $DisplayName, [parameter(HelpMessage = "ApplicationID used to delete an application object")] [ValidateNotNullOrEmpty()] [string] $ApplicationId, [parameter(HelpMessage = "ObjectID used to delete an application object")] [ValidateNotNullOrEmpty()] [string] $ObjectId, [parameter(HelpMessage = "ServicePrincipalName used to delete an application object")] [ValidateNotNullOrEmpty()] [string] $ServicePrincipalName, [parameter(HelpMessage = "Switch used to delete an enterprise object")] [switch] $DeleteEnterpriseApp, [parameter(HelpMessage = "Switch used to delete an registered object")] [switch] $DeleteRegisteredApp, [parameter(HelpMessage = "Switch used to delete a service principal object")] [switch] $DeleteSpn, [switch] $EnableException ) process { if (-NOT ($DeleteEnterpriseApp -or $DeleteRegisteredApp -or $DeleteSpn)) { Write-PSFMessage -Level Host -Message "You must past in one of the following switches -DeleteEnterpriseApp -DeleteRegisteredApp -or -DeleteSpn" return } $parameter = $PSBoundParameters | ConvertTo-PSFHashtable -include DisplayName, ApplicationId, ObjectId, ServicePrincipalName if ((-NOT $script:AzSessionFound) -or (-NOT $script:AdSessionFound)) { Connect-ToAzureInteractively } if ($DeleteEnterpriseApp) { Invoke-PSFProtectedCommand -Action "Enterprise application delete!" -Target $parameter.Values -ScriptBlock { Remove-AzADApplication @parameter -ErrorAction Stop } -EnableException $EnableException -PSCmdlet $PSCmdlet } if ($DeleteRegisteredApp) { Invoke-PSFProtectedCommand -Action "Registered application deleted!" -Target $parameter.Values -ScriptBlock { Remove-AzureADApplication @parameter -ErrorAction Stop } -EnableException $EnableException -PSCmdlet $PSCmdlet } if ($DeleteSpn) { if ($parameter.ContainsValue($ServicePrincipalName) -and (-NOT $ServicePrincipalName.Contains('http://'))) { $parameter.ServicePrincipalName = "http://$ServicePrincipalName" } Invoke-PSFProtectedCommand -Action "Service principal deleted!" -Target $parameter.Values -ScriptBlock { Remove-AzADServicePrincipal @parameter -ErrorAction Stop } -EnableException $EnableException -PSCmdlet $PSCmdlet $userChoice = Get-PSFUserChoice -Options "1) No", "2) Yes" -Caption "Delete matching Azure enterprise application" -Message "Would you like to delete the matching Azure enterprise application?" switch ($userChoice) { 0 { Write-PSFMessage -Level Host "No application deleted!" return } 1 { # Remove-AzADApplication doesn't accept ServicePrincipal name so convert the parameter binding and set it to DisplayName if ($parameter.ContainsValue($ServicePrincipalName) -and ($ServicePrincipalName.Contains('http://'))) { $parameter.DisplayName = $ServicePrincipalName.substring(7) $parameter.Remove('ServicePrincipalName') } elseif ($parameter.ContainsValue($ServicePrincipalName) -and (-NOT $ServicePrincipalName.Contains('http://'))) { $parameter.DisplayName = $ServicePrincipalName $parameter.Remove('ServicePrincipalName') } Invoke-PSFProtectedCommand -Action "Removing application!" -Target $parameter.Values -ScriptBlock { Remove-AzADApplication @parameter -ErrorAction Stop } -EnableException $EnableException -PSCmdlet $PSCmdlet } } } } } |