Scripts/Remove-BPAAgentGroupMember.ps1

function Remove-BPAAgentGroupMember {
    <#
        .SYNOPSIS
            Removes agents from an AutoMate BPA agent group.
 
        .DESCRIPTION
            Remove-BPAAgentGroupMember can remove agents from an agent group.
 
        .PARAMETER InputObject
            The agent group to modify.
 
        .PARAMETER Agent
            The agent(s) to remove to the agent group.
 
        .INPUTS
            The following BPA object types can be modified by this function:
            AgentGroup
 
        .EXAMPLE
            # Remove all agents from an agent group
            Get-BPAAgentGroup "All Agents" | Remove-BPAAgentGroupMember -Agent *
 
        .EXAMPLE
            # Remove an agent from an agent group (using agent object)
            Get-BPAAgentGroup | Remove-BPAAgentGroupMember -Agent (Get-BPAAgent "Agent1")
 
        .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="Medium")]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        $InputObject,

        [Parameter(Mandatory = $true, Position = 0)]
        $Agent
    )
    PROCESS {
        foreach ($obj in $InputObject) {
            if ($obj.TypeName -eq "AgentGroup") {
                $update = Get-BPAAgentGroup -ID $obj.ID -BPAServer $obj.BPAServer
                $shouldUpdate = $false
                foreach ($a in $Agent) {
                    if ($a.PSObject.Properties.Name -contains "TypeName") {
                        if ($a.TypeName -ne "Agent")  {
                            throw "Unsupported input type '$($a.TypeName)' encountered!"
                        }
                    } elseif ($a -is [string]) {
                        $tempAgent = Get-BPAAgent -Name $a -BPAServer $obj.BPAServer
                        if ($tempAgent) {
                            $a = $tempAgent
                        } else {
                            throw "Agent '$a' not found!"
                        }
                    }
                    if ($update.AgentIDs -contains $a.ID) {
                        $update.AgentIDs = $update.AgentIDs | Where-Object {$_ -ne $a.ID}
                        $shouldUpdate = $true
                        Write-Verbose "Removing agent '$($a.Name)' from agent group '$($obj.Name)'."
                    } else {
                        Write-Verbose "Agent '$($a.Name)' not present in agent group '$($obj.Name)'."
                    }
                }
                if (($update.AgentIDs | Measure-Object).Count -eq 0) {
                    $update.AgentIDs = @()
                }
                if ($shouldUpdate) {
                    $update | Set-BPAObject
                    Write-Verbose "Completed removing agents from agent group '$($obj.Name)'."
                }
            } else {
                Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj
            }
        }
    }
}