Public/Remove-iPilotDepartment.ps1

Function Remove-iPilotDepartment {
    <#
        .Synopsis
        Removes a department from iPilot

        .Description
        Removes the specified department name if it exists in iPilot

        .Parameter DepartmentName
        Department's 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
        # Get avilable numbers with the status set to Ported using API Version v1 in the contoso.com iPilot domain
        New-iPilotTeamsUserAssignment -UserPrincipalName jdoe@contoso.com -TelephoneNumber 1235551234 -iPilotDomain contoso.com -ApiVersion = "v1"
    #>

    Param (
        [Parameter(
            Mandatory = $true,
            ValueFromPipeline = $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 {

        # 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

        # Check if group existis
        $Department = Get-iPilotDepartment -DepartmentName $DepartmentName
        if ($Department) {
            Write-Output "Removing $($Department.departmentName)"
        } else {
            Write-Error "$DepartmentName does not exist in $iPilotDomain"
            exit 1
        }

        # Build iPilot API Request
        $RemoveiPilotDepartmentRequestUri = "$ApiUrl/$ApiVersion/msteams/$iPilotDomain/departments" 
        if ($Instance) {
            $RemoveiPilotDepartmentRequestUri += "?instance=$Instance"
        }
        Write-Verbose "RemoveiPilotDepartmentRequestUri: $RemoveiPilotDepartmentRequestUri"

        # Build Request Body
        Write-Verbose "Request Method: Post"
        $RemoveiPilotDepartmentRequestBody = @{
            departmentName = $DepartmentName
        }

        # Splat Invoke-RestMethod Parameters
        $RemoveiPilotDepartmentInvokeParams = @{
            Uri = $RemoveiPilotDepartmentRequestUri
            Method = "Post"
            ContentType = "application/json"
            Headers = @{
                "X-Access-Token" = $global:IP_iPilotOAuthToken.access_token
                "x-api-key"      = $global:IP_iPilotApiKey
            }
            Body = $RemoveiPilotDepartmentRequestUserBody | ConvertTo-Json
        }

        # Execute the REST API
        Try {
            $RemoveiPilotDepartmentResponse = Invoke-RestMethod @RemoveiPilotDepartmentInvokeParams -ErrorAction Stop
        } Catch {
            Write-Error "Failed to remove $DepartmentName`n`nURL: $($RemoveiPilotDepartmentRequestUri)`nBody: $($RemoveiPilotDepartmentRequestBody | Format-Table | Out-String)`n Error: $($_.Exception.Message)"
            break
        }

        # Return User object
        if ($RemoveiPilotDepartmentResponse.statuscode -eq 200) {
            Write-Output "Successfully removed iPilot Department.`nDepartmentName: $DepartmentName"

        } else {
            Write-Error "Failed to remove $DepartmentName`n`nURL: $($RemoveiPilotDepartmentRequestUri)`nBody: $($RemoveiPilotDepartmentRequestBody | Format-Table | Out-String)`n Error: $($_.Exception.Message)"
        }

        # Verbose Switch
        if($PSBoundParameters.containskey("Verbose")) {
            $VerbosePreference = $PreviousVerbosePreference
        }

        # Debug Switch
        if($PSBoundParameters.containskey("Debug")) {
            $DebugPreference = $PreviousDebugPreference
        }
    }
}