Scripts/Remove-BPAUserGroupMember.ps1

function Remove-BPAUserGroupMember {
    <#
        .SYNOPSIS
            Removes users from an AutoMate BPA user group.
 
        .DESCRIPTION
            Remove-BPAUserGroupMember can remove users from a user group.
 
        .PARAMETER InputObject
            The user group to modify.
 
        .PARAMETER User
            The users(s) to remove from the user group.
 
        .INPUTS
            The following BPA object types can be modified by this function:
            UserGroup
 
        .EXAMPLE
            # Remove all users from a user group
            Get-BPAUserGroup "All Users" | Remove-BPAUserGroupMember -User *
 
        .EXAMPLE
            # Remove a user from a user group (using user object)
            Get-BPAUserGroup | Remove-BPAUserGroupMember -User (Get-BPAUser "David")
 
        .NOTES
            Author(s): : David Seibel
            Contributor(s) :
            Date Created : 11/07/2016
            Date Modified : 05/01/2018
 
        .LINK
            https://github.com/davidseibel/PoshBPA
    #>

    [CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact='Low')]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $InputObject,

        [Parameter(Mandatory = $true, Position = 0)]
        $User
    )
    PROCESS {
        foreach ($obj in $InputObject) {
            if ($obj.TypeName -eq "UserGroup") {
                $update = Get-BPAUserGroup -ID $obj.ID -BPAServer $obj.BPAServer
                $shouldUpdate = $false
                foreach ($u in $User) {
                    if ($u.PSObject.Properties.Name -contains "TypeName") {
                        if ($u.TypeName -ne "User") {
                            throw "Unsupported input type '$($u.TypeName)' encountered!"
                        }
                    } elseif ($u -is [string]) {
                        $tempUser = Get-BPAUser -Name $u -BPAServer $obj.BPAServer
                        if ($tempUser) {
                            $u = $tempUser
                        } else {
                            throw "User '$u' not found!"
                        }
                    }
                    if ($update.UserIDs -contains $u.ID) {
                        $update.UserIDs = @($update.UserIDs | Where-Object {$_ -ne $u.ID})
                        Write-Verbose "Removing user '$($u.Name)' from user group '$($obj.Name)'."
                    } else {
                        Write-Verbose "User '$($u.Name)' not present in user group '$($obj.Name)'."
                    }
                }
                if (($update.UserIDs | Measure-Object).Count -eq 0) {
                    $update.UserIDs = @()
                }
                if ($shouldUpdate) {
                    $update | Set-BPAObject
                    Write-Verbose "Completed removing users from user group '$($obj.Name)'."
                }
            } else {
                Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj
            }
        }
    }
}