Public/Groups/Get-JCGroup.ps1
|
function Get-JCGroup () { [CmdletBinding(DefaultParameterSetName = 'ReturnAll')] param ( [Parameter(ParameterSetName = 'Type', Position = 0, HelpMessage = 'The type of JumpCloud group you want to return. Valid options are User, System, and Policy.')] [ValidateSet('User', 'System', 'Policy')] [string]$Type ) dynamicparam { if ((Get-PSCallStack).Command -like '*MarkdownHelp') { $Type = 'User' } if ($Type) { $attr = New-Object System.Management.Automation.ParameterAttribute $attr.HelpMessage = "Enter the group name" $attr.Mandatory = $false $attr.ValueFromPipelineByPropertyName = $true $attrColl = New-Object System.Collections.ObjectModel.Collection[System.Attribute] $attrColl.Add($attr) $param = New-Object System.Management.Automation.RuntimeDefinedParameter('Name', [string], $attrColl) $dict = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary $dict.Add('Name', $param) return $dict } } begin { Write-Debug 'Verifying JCAPI Key' if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { Connect-JCOnline } [int]$limit = '100' Write-Debug "Setting limit to $limit" $Parallel = $JCConfig.parallel.Calculated Write-Debug 'Initilizing resultsArray' $resultsArray = @() if ($param.IsSet) { switch ($Type) { 'System' { Write-Verbose 'Populating SystemGroupHash' $SystemGroupHash = Get-DynamicHash -Object Group -GroupType System -returnProperties name } 'User' { Write-Verbose 'Populating UserGroupHash' $UserGroupHash = Get-DynamicHash -Object Group -GroupType User -returnProperties name } 'Policy' { Write-Verbose 'Populating PolicyGroupHash' $PolicyGroupHash = Get-DynamicHash -Object Group -GroupType Policy -returnProperties name } } } } process { if ($PSCmdlet.ParameterSetName -eq 'ReturnAll') { $limitURL = "$JCUrlBasePath/api/v2/groups" Write-Debug $limitURL if ($Parallel) { $resultsArray = Get-JCResults -URL $limitURL -Method "GET" -limit $limit -parallel $true } else { $resultsArray = Get-JCResults -URL $limitURL -Method "GET" -limit $limit } $resultsArray = $resultsArray | Sort-Object type, name $count = ($resultsArray.results).Count Write-Debug "Results count equals $count" } elseif (($PSCmdlet.ParameterSetName -eq 'Type') -and !($param.IsSet)) { switch ($Type) { 'User' { $limitURL = "$JCUrlBasePath/api/v2/usergroups" } 'System' { $limitURL = "$JCUrlBasePath/api/v2/systemgroups" } 'Policy' { $limitURL = "$JCUrlBasePath/api/v2/policygroups" } default { $limitURL = "$JCUrlBasePath/api/v2/groups" } } if ($Parallel) { $resultsArray = Get-JCResults -URL $limitURL -Method "GET" -limit $limit -parallel $true } else { $resultsArray = Get-JCResults -URL $limitURL -Method "GET" -limit $limit } $resultsArray = $resultsArray | Sort-Object name } elseif (($PSCmdlet.ParameterSetName -eq 'Type') -and ($param.IsSet)) { if ($Type -eq 'System') { $GID = $SystemGroupHash.GetEnumerator().Where({ $_.Value.name -ceq ($param.Value) }).Name if ($GID) { $GURL = "$JCUrlBasePath/api/v2/systemgroups/$GID" $resultsArray = Get-JCResults -URL $GURL -Method "GET" -limit $limit } else { Write-Error "There is no $Type group named $($param.Value). NOTE: Group names are case sensitive." } } elseif ($Type -eq 'User') { $GID = $UserGroupHash.GetEnumerator().Where({ $_.Value.name -ceq ($param.Value) }).Name if ($GID) { $GURL = "$JCUrlBasePath/api/v2/usergroups/$GID" $resultsArray = Get-JCResults -URL $GURL -Method "GET" -limit $limit } else { Write-Error "There is no $Type group named $($param.Value). NOTE: Group names are case sensitive." } } elseif ($Type -eq 'Policy') { $GID = $PolicyGroupHash.GetEnumerator().Where({ $_.Value.name -ceq ($param.Value) }).Name if ($GID) { $GURL = "$JCUrlBasePath/api/v2/policygroups/$GID" $resultsArray = Get-JCResults -URL $GURL -Method "GET" -limit $limit } else { Write-Error "There is no $Type group named $($param.Value). NOTE: Group names are case sensitive." } } } } end { return $resultsArray } } |