Scripts/Add-BPAUserGroupMember.ps1

function Add-BPAUserGroupMember {
    <#
        .SYNOPSIS
            Adds users to an AutoMate BPA user group.
 
        .DESCRIPTION
            Add-BPAUserGroupMember can add users to a user group.
 
        .PARAMETER InputObject
            The user group to modify.
 
        .PARAMETER User
            The user(s) to add to the user group.
 
        .INPUTS
            The following BPA object types can be modified by this function:
            UserGroup
 
        .EXAMPLE
            # Add all users to a user group
            Get-BPAUserGroup "All Users" | Add-BPAUserGroupMember -User *
 
        .EXAMPLE
            # Add a user to a user group (using user object)
            Get-BPAUserGroup | Add-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()]
    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 ($u.BPAServer -eq $obj.BPAServer) {
                        if ($update.UserIDs -notcontains $u.ID) {
                            $update.UserIDs += $u.ID
                            $shouldUpdate = $true
                            Write-Verbose "Adding user '$($u.Name)' to user group '$($obj.Name)'."
                        } else {
                            Write-Verbose "User '$($u.Name)' already present in user group '$($obj.Name)'."
                        }
                    } else {
                        Write-Warning "User '$($u.Name)' on server $($u.BPAServer) can not be added to user group '$($obj.Name)' on server $($obj.BPAServer)."
                    }
                }
                if ($shouldUpdate) {
                    $update | Set-BPAObject
                    Write-Verbose "Completed adding users to user group '$($obj.Name)'."
                }
            } else {
                Write-Error -Message "Unsupported input type '$($obj.TypeName)' encountered!" -TargetObject $obj
            }
        }    
    }
}