Public/Remove-iPilotDepartmentAssignment.ps1
Function Remove-iPilotDepartmentAssignment { <# .Synopsis Unassign user from an iPilot department .Parameter DepartmentName Department's Name. .Parameter UserPrincipalName User Principal Name .Parameter ApiVersion Version of the NuWave iPilot to use. Defaults to v1. .Parameter ApiKey iPilot API Key supplied by NuWave. .Parameter iPilotDomain iPilot Domain Name. .Parameter Credential Credentials for iPilot API .Example # Remove jdoe@contoso.com's membership from the Sales department Remove-iPilotDepartmentAssignment -UserPrincipalName jdoe@contoso.com -DepartmentName "Sales" #> Param ( [System.String] [Parameter(Mandatory = $true, ValueFromPipeline=$true)] $UserPrincipalName, [Parameter( Mandatory = $true, HelpMessage = 'Allowed characters: Alphanumeric, spaces, and hyphens')] [ValidatePattern('^[a-zA-Z0-9 ]+$')] [System.String] $DepartmentName, [System.String] $ApiUrl = $global:IP_ApiUrl, [System.String] $ApiVersion = "v1", [System.String] $ApiKey = $global:IP_ApiKey, [System.String] $iPilotDomain, [System.Management.Automation.PSCredential] $Credential ) Begin { # DepartmentName validation If ($DepartmentName | Select-String '^[a-zA-Z0-9 ]+$') { throw "Check the DepartmentName. Only alphanumeric, spaces and dashes allowed" } # UserPrincipalName validation If ($UserPrincipalName -and $UserPrincipalName -notlike "*@*.*") { throw "Check the formatting of the user's User Principal Name. Format should be jdoe@contoso.com" } # Set iPilot Domain if (!$global:IP_iPilotDomain -and !$iPilotDomain) { throw "Run Get-iPilotTeamsDomain or provide domain using -iPilotDomain" } elseif (!$iPilotDomain) { $iPilotDomain = $global:IP_iPilotDomain Write-Verbose "iPilot Domain: $iPilotDomain" } # else use passed in iPilotDomain } Process { # Verbose Switch if($PSBoundParameters.containskey("Verbose")) { $PreviousVerbosePreference = $VerbosePreference $VerbosePreference = "continue" } # Debug Switch if($PSBoundParameters.containskey("Debug")) { $PreviousDebugPreference = $DebugPreference $DebugPreference = "continue" } # Get/re-use OAuth Token $InitializeiPilotSessionSplat = @{ ApiUrl = $ApiUrl ApiVersion = $ApiVersion ApiKey = $ApiKey Credential = $Credential } if ($global:IP_Instance) { $InitializeiPilotSessionSplat += @{ Instance = $global:IP_Instance } } if ($VerbosePreference -eq "Continue") { $InitializeiPilotSessionSplat += @{ Verbose = $true } } if ($DebugPreference -eq "Continue") { $InitializeiPilotSessionSplat += @{ Debug = $true } } Initialize-iPilotSession @InitializeiPilotSessionSplat # Build iPilot API Request $RemoveiPilotDepartmentAssignmentRequestUri = "$ApiUrl/$ApiVersion/msteams/$iPilotDomain/departments" #region Build Request Body Write-Verbose "Request Uri: $RemoveiPilotDepartmentAssignmentRequestUri" Write-Verbose "Request Method: Post" # Add UPN and TelephoneNumber to Body $RemoveiPilotDepartmentAssignmentRequestBody = @{ departmentName = $DepartmentName upn = $UserPrincipalName } # Specify Instance if ($global:IP_Instance) { $RemoveiPilotDepartmentAssignmentRequestBody += @{ "instance"= $global:IP_instance } } #endregion Build Request Body # Splat Invoke-RestMethod Parameters $RemoveiPilotDepartmentAssignmentInvokeParams = @{ Uri = $RemoveiPilotDepartmentAssignmentRequestUri Method = "Post" ContentType = "application/json" Headers = @{ "X-Access-Token" = $global:IP_iPilotOAuthToken.access_token "x-api-key" = $global:IP_iPilotApiKey } Body = $RemoveiPilotDepartmentAssignmentRequestUserBody | ConvertTo-Json } # Execute the REST API Try { $RemoveiPilotDepartmentAssignmentResponse = Invoke-RestMethod @RemoveiPilotDepartmentAssignmentInvokeParams -ErrorAction Stop } Catch { Write-Error "Failed to remove department assignment for $UserPrincipalName from $DepartmentName`n`nURL: $($RemoveiPilotDepartmentAssignmentRequestUri)`nBody: $($RemoveiPilotDepartmentAssignmentRequestBody | Format-Table | Out-String)`n Error: $($_.Exception.Message)" break } # Return User object if ($RemoveiPilotDepartmentAssignmentResponse.statuscode -eq 200) { Write-Output "Successfully unassigned $UserPrincipalName from $DepartmentName" } else { Write-Error "Failed to remove department assignment for $UserPrincipalName from $DepartmentName.`n`nURL: $($RemoveiPilotDepartmentAssignmentRequestUri)`nBody: $($RemoveiPilotDepartmentAssignmentRequestBody | Format-Table | Out-String)" } # Verbose Switch if($PSBoundParameters.containskey("Verbose")) { $VerbosePreference = $PreviousVerbosePreference } # Debug Switch if($PSBoundParameters.containskey("Debug")) { $DebugPreference = $PreviousDebugPreference } } } |