Public/Groups/SystemGroups/Add-JCSystemGroupMember.ps1

Function Add-JCSystemGroupMember ()
{
    [CmdletBinding(DefaultParameterSetName = 'ByName')]

    param
    (
        [Parameter(Mandatory,
        ValueFromPipelineByPropertyName,
        ParameterSetName ='ByName',
        Position=0)]

        [Parameter(
        ValueFromPipelineByPropertyName,
        ParameterSetName ='ByID',
        Position=0)]

        [Alias('name')]
        [String]$GroupName,

        [Parameter(Mandatory,
        ValueFromPipelineByPropertyName,
        ParameterSetName ='ByName')]

        [Parameter(Mandatory,
        ValueFromPipelineByPropertyName,
        ParameterSetName ='ByID')]

        [Alias('_id','id')]
        [string]$SystemID,

        [Parameter(
        ParameterSetName ='ByID')]
        [Switch]
        $ByID,

        [Parameter(
        ValueFromPipelineByPropertyName,
        ParameterSetName ='ByID')]
        [string]$GroupID
    )
    begin

        {
            Write-Debug 'Verifying JCAPI Key'
            if ($JCAPIKEY.length -ne 40) {Connect-JConline}

            Write-Debug 'Populating API headers'
            $hdrs = @{

                'Content-Type' = 'application/json'
                'Accept' = 'application/json'
                'X-API-KEY' = $JCAPIKEY

            }

            Write-Debug 'Initilizing resultsArray'
            $resultsArray = @()

            if ($PSCmdlet.ParameterSetName -eq 'ByName')
            {
                Write-Debug 'Populating GroupNameHash'
                $GroupNameHash = Get-Hash_SystemGroupName_ID

                Write-Debug 'Populating SystemHostNameHash'
                $SystemHostNameHash = Get-Hash_SystemID_HostName
            }
        }
    process

        {

            if ($PSCmdlet.ParameterSetName -eq 'ByName')
            {
                if ($GroupNameHash.containsKey($GroupName)){}

                else { Throw "Group does not exist. Run 'Get-JCGroup -type System' to see a list of all your JumpCloud user groups."}

                $GroupID = $GroupNameHash.Get_Item($GroupName)
                $HostName = $SystemHostNameHash.Get_Item($SystemID)

                $body =  @{

                    type = "system"
                    op = "add"
                    id = $SystemID

                }

                $jsonbody = $body | ConvertTo-Json
                Write-Debug $jsonbody


                $GroupsURL =  "https://console.jumpcloud.com/api/v2/systemgroups/$GroupID/members"
                Write-Debug $GroupsURL

                    try {
                        $GroupAdd = Invoke-RestMethod -Method POST -Body $jsonbody -Uri $GroupsURL -Headers $hdrs -UserAgent 'Pwsh_1.5.0'
                        $Status = 'Added'
                    }
                    catch {
                        $Status = $_.ErrorDetails
                    }

                $FormattedResults =[PSCustomObject]@{

                    'Groupname' =  $GroupName
                    'System' = $HostName
                    'SystemID' = $SystemID
                    'Status' = $Status

                }

                $resultsArray += $FormattedResults


            }

            elseif ($PSCmdlet.ParameterSetName -eq 'ByID')

            {
                if (!$GroupID)
                    {
                        Write-Debug 'Populating GroupNameHash'
                        $GroupNameHash = Get-Hash_SystemGroupName_ID
                        $GroupID = $GroupNameHash.Get_Item($GroupName)
                    }
    
                $body =  @{

                    type = "system"
                    op = "add"
                    id = $SystemID

                }

                $jsonbody = $body | ConvertTo-Json
                Write-Debug $jsonbody


                $GroupsURL =  "https://console.jumpcloud.com/api/v2/systemgroups/$GroupID/members"
                Write-Debug $GroupsURL

                try {
                    $GroupAdd = Invoke-RestMethod -Method POST -Body $jsonbody -Uri $GroupsURL -Headers $hdrs -UserAgent 'Pwsh_1.5.0'
                    $Status = 'Added'
                }
                catch {
                    $Status = $_.ErrorDetails
                }

                $FormattedResults =[PSCustomObject]@{

                    'Group' =  $GroupID
                    'SystemID' = $SystemID
                    'Status' = $Status
                }

                $resultsArray += $FormattedResults
            }
        }

    end

        {
            return $resultsArray
        }

}