functions/Public/Methods/Remove-Mga.ps1
function Remove-Mga { <# .LINK https://github.com/baswijdenes/Optimized.Mga/ .LINK https://baswijdenes.com/c/microsoft/mga/ .SYNOPSIS Remove-Mga is an Alias for the method Delete. .DESCRIPTION Removes an object in the Azure AD tenant with the Microsoft Graph API. Json, XML, and CSV is converted to a PSObject. .PARAMETER Uri Uri to the Microsoft Graph API. You can also use the last part of an Uri and the rest will be automatically added. Example: /users Example: https://graph.microsoft.com/v1.0/users Example: users?$filter=displayName eq 'Bas Wijdenes' Example: beta/users .PARAMETER Body Body will accept a PSObject or a Json string. .PARAMETER Api This is not a mandatory parameter. By using v1.0 or beta it will always overwrite the value given in the Uri. By using All it will first try v1.0 in a try and catch. and when it jumps to the catch it will use the beta Api. .PARAMETER CustomHeader This not a not mandatory parameter, there is a default header containing application/json. By using this parameter you can add a custom header. The CustomHeader is reverted back to the original after the cmdlet has run. .EXAMPLE Remove-Mga -Uri '/v1.0/users/12345678-1234-1234-1234-123456789012' $GroupMembers = Get-Mga -URL 'https://graph.microsoft.com/v1.0/groups/ac252320-4194-402f-8182-2d14e4a2db5c/members' $UserList = @() foreach ($Member in $GroupMembers) { $Uri = "https://graph.microsoft.com/v1.0/groups/ac252320-4194-402f-8182-2d14e4a2db5c/members/$($Member.Id)/`$ref" $UserList += $Uri } .EXAMPLE Remove-Mga -Uri $UserList .EXAMPLE Remove-Mga -Uri '/v1.0/users/12345678-1234-1234-1234-123456789012' -Api 'All' #> [CmdletBinding()] param ( [Parameter(Mandatory = $true, Position = 0)] [Alias('URL')] [object] $Uri, [Parameter(Mandatory = $false)] [string] $Body, [Parameter(Mandatory = $false)] [ValidateSet('All', 'v1.0', 'beta')] [Alias('Reference')] [string]$Api, [Parameter(Mandatory = $false)] [object] $CustomHeader ) begin { try { $StartMgaBeginDefault = Start-MgaBeginDefault -CustomHeader $CustomHeader -Api $Api -Uri $Uri $Uri = $StartMgaBeginDefault.Uri $UpdateMgaUriApi = $StartMgaBeginDefault if ($Body) { $ValidateJson = ConvertTo-MgaJson -Body $Body -Validate } $InvokeWebRequestSplat = @{ Headers = $Script:MgaSession.HeaderParameters Method = 'Delete' Uri = $Uri UseBasicParsing = $true } } catch { throw $_ } } process { try { $GroupedInputObject = [system.Collections.Generic.List[system.Object]]::new() if (($ValidateJson -eq $false) -and (($Body.'members@odata.bind').count -gt 20)) { foreach ($Line in $Body.'members@odata.bind') { $GroupedInputObject.Add($Line) if ($($GroupedInputObject).count -eq 20) { $OdataBind = [PSCustomObject] @{ 'members@odata.bind' = $GroupedInputObject } $EndResult += Remove-Mga -Body $OdataBind -URL $Uri $GroupedInputObject = [system.Collections.Generic.List[system.Object]]::new() } } } elseif ($Uri.count -gt 1) { foreach ($Line in $Uri) { $Object = [PSCustomObject]@{ url = [string]$Line method = 'Delete' } $GroupedInputObject.Add($Object) if ($($GroupedInputObject).count -eq 20) { $EndResult += Batch-Mga -Body $GroupedInputObject $GroupedInputObject = [system.Collections.Generic.List[system.Object]]::new() } } } else { if ($Body) { $Body = ConvertTo-MgaJson -Body $Body $InvokeWebRequestSplat.Body = $Body $Result = Invoke-WebRequest @InvokeWebRequestSplat } else { $Result = Invoke-WebRequest @InvokeWebRequestSplat } $EndResult = ConvertTo-MgaResult -Response $Result } if (-not([string]::IsNullOrEmpty($GroupedInputObject))) { if ($Body.'members@odata.bind') { $EndResult += -Body $OdataBind -URL $Uri } else { $EndResult += Batch-Mga -Body $GroupedInputObject } } } catch { $Uri = (Start-MgaProcessCatchDefault -Uri $Uri -Api $Api -UpdateMgaUriApi $UpdateMgaUriApi -Result $Result -Throw $_).Uri $MgaSplat = @{ Uri = $Uri Api = 'Beta' } if ($Body) { $MgaSplat.Body = $Body } $EndResult += Remove-Mga @MgaSplat $ReturnVerbose = $False } } end { Complete-MgaResult -Result $EndResult -CustomHeader $CustomHeader -ReturnVerbose $ReturnVerbose } } |