diff --git a/PowerShell/Deploy/SdkSync/jcapiToSupportSync.ps1 b/PowerShell/Deploy/SdkSync/jcapiToSupportSync.ps1 index 7c77bb49b..d6008dfe3 100644 --- a/PowerShell/Deploy/SdkSync/jcapiToSupportSync.ps1 +++ b/PowerShell/Deploy/SdkSync/jcapiToSupportSync.ps1 @@ -25,56 +25,36 @@ $ApprovedFunctions = [Ordered]@{ # Destination = '/Public/Reports'; # } ); - #'JumpCloud.SDK.V2' = @( - # [PSCustomObject]@{ - # Name = 'Get-JcSdkAppleMdm'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Remove-JcSdkAppleMdm'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Set-JcSdkAppleMdm'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Get-JcSdkAppleMdmCsr'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Get-JcSdkAppleMdmDepKey'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Clear-JcSdkAppleMdmDevice'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Get-JcSdkAppleMdmDevice'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Lock-JcSdkAppleMdmDevice'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Restart-JcSdkAppleMdmDevice'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Stop-JcSdkAppleMdmDevice'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Sync-JcSdkAppleMdmDevice'; - # Destination = '/Public/AppleMdm'; - # }, - # [PSCustomObject]@{ - # Name = 'Get-JcSdkAppleMdmEnrollmentProfile'; - # Destination = '/Public/AppleMdm'; - # } - #) + 'JumpCloud.SDK.V2' = @( + [PSCustomObject]@{ + Name = 'Get-JcSdkSystemGroup'; + Destination = '/Public/Groups/SystemGroups'; + }, + [PSCustomObject]@{ + Name = 'Get-JcSdkUserGroup'; + Destination = '/Public/Groups/UserGroups'; + }, + [PSCustomObject]@{ + Name = 'Get-JcSdkPolicyGroup'; + Destination = '/Public/Groups/PolicyGroups'; + }, + [PSCustomObject]@{ + Name = 'New-JcSdkPolicyGroup'; + Destination = '/Public/Groups/PolicyGroups'; + }, + [PSCustomObject]@{ + Name = 'Remove-JcSdkPolicyGroup'; + Destination = '/Public/Groups/PolicyGroups'; + }, + [PSCustomObject]@{ + Name = 'Get-JcSdkPolicyGroupMember'; + Destination = '/Public/Groups/PolicyGroups'; + }, + [PSCustomObject]@{ + Name = 'Set-JcSdkPolicyGroupMember'; + Destination = '/Public/Groups/PolicyGroups'; + } + ) } $SdkPrefix = 'JcSdk' $JumpCloudModulePrefix = 'JC' diff --git a/PowerShell/JumpCloud Module/JumpCloud.psd1 b/PowerShell/JumpCloud Module/JumpCloud.psd1 index 1e867beab..547c668f6 100644 --- a/PowerShell/JumpCloud Module/JumpCloud.psd1 +++ b/PowerShell/JumpCloud Module/JumpCloud.psd1 @@ -3,7 +3,7 @@ # # Generated by: JumpCloud Solutions Architect Team # -# Generated on: 1/22/2026 +# Generated on: 3/12/2026 # @{ @@ -12,7 +12,7 @@ RootModule = 'JumpCloud.psm1' # Version number of this module. -ModuleVersion = '3.0.2' +ModuleVersion = '3.1.0' # Supported PSEditions # CompatiblePSEditions = @() @@ -51,8 +51,8 @@ PowerShellVersion = '4.0' # ProcessorArchitecture = '' # Modules that must be imported into the global environment prior to importing this module -RequiredModules = @('JumpCloud.SDK.DirectoryInsights', - 'JumpCloud.SDK.V1', +RequiredModules = @('JumpCloud.SDK.DirectoryInsights', + 'JumpCloud.SDK.V1', 'JumpCloud.SDK.V2') # Assemblies that must be loaded prior to importing this module @@ -71,42 +71,43 @@ RequiredModules = @('JumpCloud.SDK.DirectoryInsights', # NestedModules = @() # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export. -FunctionsToExport = 'Add-JCAssociation', 'Add-JCCommandTarget', 'Add-JCGsuiteMember', - 'Add-JCOffice365Member', 'Add-JCRadiusReplyAttribute', - 'Add-JCSystemGroupMember', 'Add-JCSystemUser', - 'Add-JCUserGroupMember', 'Backup-JCOrganization', 'Connect-JCOnline', - 'Copy-JCAssociation', 'Get-JCAdmin', 'Get-JCAssociation', - 'Get-JCBackup', 'Get-JCCloudDirectory', 'Get-JCCommand', - 'Get-JCCommandResult', 'Get-JCCommandTarget', - 'Get-JCConfiguredTemplatePolicy', 'Get-JCEvent', 'Get-JCEventCount', - 'Get-JCGroup', 'Get-JCOrganization', 'Get-JCPolicy', - 'Get-JCPolicyGroup', 'Get-JCPolicyGroupMember', - 'Get-JCPolicyGroupTemplate', 'Get-JCPolicyGroupTemplateMember', - 'Get-JCPolicyResult', 'Get-JCPolicyTargetGroup', - 'Get-JCPolicyTargetSystem', 'Get-JCRadiusReplyAttribute', - 'Get-JCRadiusServer', 'Get-JCReport', 'Get-JCScheduledUserstate', - 'Get-JCSystem', 'Get-JCSystemApp', 'Get-JCSystemGroupMember', - 'Get-JCSystemInsights', 'Get-JCSystemKB', 'Get-JCSystemUser', - 'Get-JCUser', 'Get-JCUserGroupMember', 'Import-JCCommand', - 'Import-JCMSPFromCSV', 'Import-JCUsersFromCSV', 'Invoke-JCCommand', - 'Invoke-JCDeployment', 'New-JCCommand', 'New-JCDeploymentTemplate', - 'New-JCDeviceUpdateTemplate', 'New-JCImportTemplate', - 'New-JCMSPImportTemplate', 'New-JCPolicy', 'New-JCPolicyGroup', - 'New-JCRadiusServer', 'New-JCReport', 'New-JCSystemGroup', 'New-JCUser', - 'New-JCUserGroup', 'Remove-JCAssociation', 'Remove-JCCommand', - 'Remove-JCCommandResult', 'Remove-JCCommandTarget', - 'Remove-JCGsuiteMember', 'Remove-JCOffice365Member', - 'Remove-JCPolicy', 'Remove-JCPolicyGroup', - 'Remove-JCPolicyGroupTemplate', 'Remove-JCRadiusReplyAttribute', - 'Remove-JCRadiusServer', 'Remove-JCSystem', 'Remove-JCSystemGroup', - 'Remove-JCSystemGroupMember', 'Remove-JCSystemUser', 'Remove-JCUser', - 'Remove-JCUserGroup', 'Remove-JCUserGroupMember', - 'Send-JCPasswordReset', 'Set-JCCloudDirectory', 'Set-JCCommand', - 'Set-JCOrganization', 'Set-JCPolicy', 'Set-JCPolicyGroup', - 'Set-JCRadiusReplyAttribute', 'Set-JCRadiusServer', - 'Set-JCSettingsFile', 'Set-JCSystem', 'Set-JCSystemUser', 'Set-JCUser', - 'Set-JCUserGroupLDAP', 'Update-JCDeviceFromCSV', 'Update-JCModule', - 'Update-JCMSPFromCSV', 'Update-JCUsersFromCSV' +FunctionsToExport = 'Add-JCAssociation', 'Add-JCCommandTarget', 'Add-JCGsuiteMember', + 'Add-JCOffice365Member', 'Add-JCRadiusReplyAttribute', + 'Add-JCSystemGroupMember', 'Add-JCSystemUser', + 'Add-JCUserGroupMember', 'Backup-JCOrganization', 'Connect-JCOnline', + 'Copy-JCAssociation', 'Get-JCAdmin', 'Get-JCAssociation', + 'Get-JCBackup', 'Get-JCCloudDirectory', 'Get-JCCommand', + 'Get-JCCommandResult', 'Get-JCCommandTarget', + 'Get-JCConfiguredTemplatePolicy', 'Get-JCEvent', 'Get-JCEventCount', + 'Get-JCGroup', 'Get-JCOrganization', 'Get-JCPolicy', + 'Get-JCPolicyGroup', 'Get-JCPolicyGroupMember', + 'Get-JCPolicyGroupTemplate', 'Get-JCPolicyGroupTemplateMember', + 'Get-JCPolicyResult', 'Get-JCPolicyTargetGroup', + 'Get-JCPolicyTargetSystem', 'Get-JCRadiusReplyAttribute', + 'Get-JCRadiusServer', 'Get-JCReport', 'Get-JCScheduledUserstate', + 'Get-JCSystem', 'Get-JCSystemApp', 'Get-JCSystemGroupMember', + 'Get-JCSystemInsights', 'Get-JCSystemKB', 'Get-JCSystemUser', + 'Get-JCUser', 'Get-JCUserGroupMember', 'Import-JCCommand', + 'Import-JCMSPFromCSV', 'Import-JCUsersFromCSV', 'Invoke-JCCommand', + 'Invoke-JCDeployment', 'New-JCCommand', 'New-JCDeploymentTemplate', + 'New-JCDeviceUpdateTemplate', 'New-JCImportTemplate', + 'New-JCMSPImportTemplate', 'New-JCPolicy', 'New-JCPolicyGroup', + 'New-JCRadiusServer', 'New-JCReport', 'New-JCSystemGroup', 'New-JCUser', + 'New-JCUserGroup', 'Remove-JCAssociation', 'Remove-JCCommand', + 'Remove-JCCommandResult', 'Remove-JCCommandTarget', + 'Remove-JCGsuiteMember', 'Remove-JCOffice365Member', + 'Remove-JCPolicy', 'Remove-JCPolicyGroup', + 'Remove-JCPolicyGroupTemplate', 'Remove-JCRadiusReplyAttribute', + 'Remove-JCRadiusServer', 'Remove-JCSystem', 'Remove-JCSystemGroup', + 'Remove-JCSystemGroupMember', 'Remove-JCSystemUser', 'Remove-JCUser', + 'Remove-JCUserGroup', 'Remove-JCUserGroupMember', + 'Send-JCPasswordReset', 'Set-JCCloudDirectory', 'Set-JCCommand', + 'Set-JCOrganization', 'Set-JCPolicy', 'Set-JCPolicyGroup', + 'Set-JCRadiusReplyAttribute', 'Set-JCRadiusServer', + 'Set-JCSettingsFile', 'Set-JCSystem', 'Set-JCSystemUser', 'Set-JCUser', + 'Set-JCUserGroupLDAP', 'Update-JCDeviceFromCSV', 'Update-JCModule', + 'Update-JCMSPFromCSV', 'Update-JCUsersFromCSV', 'Get-JCSystemGroup', + 'Get-JCUserGroup', 'Set-JCPolicyGroupMember' # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export. CmdletsToExport = @() @@ -132,7 +133,7 @@ PrivateData = @{ PSData = @{ # Tags applied to this module. These help with module discovery in online galleries. - Tags = 'JumpCloud', 'DaaS', 'Jump', 'Cloud', 'Directory' + Tags = 'JumpCloud','DaaS','Jump','Cloud','Directory' # A URL to the license for this module. LicenseUri = 'https://github.com/TheJumpCloud/support/blob/master/PowerShell/LICENSE' @@ -157,7 +158,7 @@ PrivateData = @{ } # End of PSData hashtable -} # End of PrivateData hashtable + } # End of PrivateData hashtable # HelpInfo URI of this module HelpInfoURI = 'https://github.com/TheJumpCloud/support/wiki' diff --git a/PowerShell/JumpCloud Module/Private/HashFunctions/Get-DynamicHash.ps1 b/PowerShell/JumpCloud Module/Private/HashFunctions/Get-DynamicHash.ps1 index 65cbdbf26..3b7f53e24 100644 --- a/PowerShell/JumpCloud Module/Private/HashFunctions/Get-DynamicHash.ps1 +++ b/PowerShell/JumpCloud Module/Private/HashFunctions/Get-DynamicHash.ps1 @@ -1,10 +1,10 @@ -Function Get-DynamicHash () { +function Get-DynamicHash () { [CmdletBinding()] param ( [Parameter(Position = 0, Mandatory = $true)][ValidateSet('System', 'User', 'Command', 'Group')][string]$Object, [Parameter(Position = 1, Mandatory = $true)][ValidateNotNullOrEmpty()][string[]]$returnProperties ) - DynamicParam { + dynamicparam { if ($Object -eq 'Group') { $paramDictionary = New-Object -Type System.Management.Automation.RuntimeDefinedParameterDictionary $paramAttributesCollect = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute] @@ -12,7 +12,7 @@ Function Get-DynamicHash () { $paramAttributes = New-Object -Type System.Management.Automation.ParameterAttribute $paramAttributes.Mandatory = $true $paramAttributesCollect.Add($paramAttributes) - $paramAttributesCollect.Add((New-Object -Type System.Management.Automation.ValidateSetAttribute('System', 'User'))) + $paramAttributesCollect.Add((New-Object -Type System.Management.Automation.ValidateSetAttribute('System', 'User', 'Policy'))) $dynParam1 = New-Object -Type System.Management.Automation.RuntimeDefinedParameter("GroupType", [string], $paramAttributesCollect) @@ -48,6 +48,9 @@ Function Get-DynamicHash () { User { $ResultsHash = Get-JCGroup -Type User | Select-Object -Property $returnProperties } + Policy { + $ResultsHash = Get-JCGroup -Type Policy | Select-Object -Property $returnProperties + } } } } diff --git a/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEvent.ps1 b/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEvent.ps1 index 8b9dde776..55caa6c02 100644 --- a/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEvent.ps1 +++ b/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEvent.ps1 @@ -11,38 +11,10 @@ Query the API for Directory Insights events ``` curl -X POST 'https://api.jumpcloud.com/insights/directory/v1/events' -H 'Content-Type: application/json' -H 'x-api-key: REPLACE_KEY_VALUE' --data '{\"service\": [\"all\"], \"start_time\": \"2021-07-14T23:00:00Z\", \"end_time\": \"2021-07-28T14:00:00Z\", \"sort\": \"DESC\", \"fields\": [\"timestamp\", \"event_type\", \"initiated_by\", \"success\", \"client_ip\", \"provider\", \"organization\"]}' ``` -.Example -PS C:\> Get-JCEvent -Service:('all') -StartTime:((Get-date).AddDays(-30)) - -Pull all event records from the last thirty days -.Example -PS C:\> Get-JCEvent -Service:('directory') -StartTime:((Get-date).AddHours(-1)) -Limit:('10') - -Get directory results from the last hour limit to the last 10 results in the time range -.Example -PS C:\> Get-JCEvent -Service:('directory') -StartTime:((Get-date).AddDays(-30)) -Sort:("DESC") -EndTime:((Get-date).AddDays(-5)) - -Get directory results between 30 and 5 days ago, sort timestamp by descending value -.Example -PS C:\> Get-JCEvent -Service:('directory') -StartTime:((Get-date).AddDays(-30)) -Limit:('10') -searchTermAnd:@{"event_type" = "group_create"} - -Get only group_create from the last thirty days -.Example -PS C:\> Get-JCEvent -Service:('all') -StartTime:('2020-04-14T00:00:00Z') -EndTime:('2020-04-20T23:00:00Z') -SearchTermOr @{"initiated_by.username" = @("user.1", "user.2")} - -Get login events initiated by either "user.1" or "user.2" between a universal time zone range -.Example -PS C:\> Get-JCEvent -Service:('all') -StartTime:('2020-04-14T00:00:00Z') -EndTime:('2020-04-20T23:00:00Z') -SearchTermAnd @{"event_type" = "admin_login_attempt"; "resource.email" = "admin.user@adminbizorg.com"} - -Get all events between a date range and match event_type = admin_login_attempt and resource.email = admin.user@adminbizorg.com -.Example -PS C:\> Get-JCEvent -Service:('sso') -StartTime:('2020-04-14T00:00:00Z') -EndTime:('2020-04-20T23:00:00Z') -SearchTermAnd @{"initiated_by.username" = "user.1"} - -Get sso events with the search term initiated_by: username with value "user.1" -.Example -PS C:\> Get-JCEvent -Service:('all') -StartTime:('2020-04-14T00:00:00Z') -EndTime:('2020-04-20T23:00:00Z') -SearchTermAnd @{"event_type" = "organization_update"} - -Get all events filtered by organization_update term between a date range +.Example +Get-JCEvent -Service:() -StartTime:() -EndTime:() -ExactMatch:() -Fields:() -Limit:() -Q:() -SearchAfter:() -SearchTermAnd:() -SearchTermNot:() -SearchTermOr:() -Skip:() -Sort:() +.Example +Get-JCEvent -Body:() .Inputs JumpCloud.SDK.DirectoryInsights.Models.IEventQuery @@ -69,7 +41,7 @@ BODY : EventQuery is the users' command to search our auth logs [Skip ]: optional offset into the result set to start with when returning [Sort ]: ASC or DESC order for timestamp .Link -https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.DirectoryInsights/docs/exports/Get-JcSdkEvent.md +https://github.com/TheJumpCloud/jcapi-powershell/tree/CUT-4981_v2EUSupport/SDKs/PowerShell/JumpCloud.SDK.DirectoryInsights/docs/exports/Get-JcSdkEvent.md #> Function Get-JCEvent { [OutputType([JumpCloud.SDK.DirectoryInsights.Models.IPost200ApplicationJsonItemsItem])] diff --git a/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEventCount.ps1 b/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEventCount.ps1 index 3a09c0a26..f0f0382c9 100644 --- a/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEventCount.ps1 +++ b/PowerShell/JumpCloud Module/Public/DirectoryInsights/Get-JCEventCount.ps1 @@ -11,22 +11,10 @@ Query the API for a count of matching events ``` curl -X POST 'https://api.jumpcloud.com/insights/directory/v1/events/count' -H 'Content-Type: application/json' -H 'x-api-key: REPLACE_KEY_VALUE' --data '{\"service\": [\"all\"], \"start_time\": \"2021-07-14T23:00:00Z\", \"end_time\": \"2021-07-28T14:00:00Z\", \"sort\": \"DESC\", \"fields\": [\"timestamp\", \"event_type\", \"initiated_by\", \"success\", \"client_ip\", \"provider\", \"organization\"]}' ``` -.Example -PS C:\> Get-JCEventCount -Service:('all') -StartTime:((Get-date).AddDays(-30)) - -Pull all event records from a specified time and count the results -.Example -PS C:\> Get-JCEventCount -Service:('sso') -StartTime:('2020-04-14T00:00:00Z') - -Pull all SSO event records from a specified time and count the results -.Example -PS C:\> Get-JCEventCount -Service:('all') -StartTime:('2020-04-14T00:00:00Z') -EndTime:('2020-04-20T23:00:00Z') -SearchTermAnd @{"event_type" = "admin_login_attempt"; "resource.email" = "admin.user@adminbizorg.com"} - -Get all events counts between a date range and match event_type = admin_login_attempt and resource.email = admin.user@adminbizorg.com -.Example -PS C:\> Get-JCEventCount -Service:('directory') -StartTime:((Get-date).AddDays(-30)) -searchTermAnd:@{"event_type" = "group_create"} - -Get only group_create event counts the last thirty days +.Example +Get-JCEventCount -Service:() -StartTime:() -EndTime:() -ExactMatch:() -Fields:() -Q:() -SearchAfter:() -SearchTermAnd:() -SearchTermNot:() -SearchTermOr:() -Sort:() +.Example +Get-JCEventCount -Body:() .Inputs JumpCloud.SDK.DirectoryInsights.Models.IEventQuery @@ -53,7 +41,7 @@ BODY : EventQuery is the users' command to search our auth logs [Skip ]: optional offset into the result set to start with when returning [Sort ]: ASC or DESC order for timestamp .Link -https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.DirectoryInsights/docs/exports/Get-JcSdkEventCount.md +https://github.com/TheJumpCloud/jcapi-powershell/tree/CUT-4981_v2EUSupport/SDKs/PowerShell/JumpCloud.SDK.DirectoryInsights/docs/exports/Get-JcSdkEventCount.md #> Function Get-JCEventCount { [OutputType([JumpCloud.SDK.DirectoryInsights.Models.IEventCount])] diff --git a/PowerShell/JumpCloud Module/Public/Groups/Get-JCGroup.ps1 b/PowerShell/JumpCloud Module/Public/Groups/Get-JCGroup.ps1 index e9c98454c..0f502b860 100644 --- a/PowerShell/JumpCloud Module/Public/Groups/Get-JCGroup.ps1 +++ b/PowerShell/JumpCloud Module/Public/Groups/Get-JCGroup.ps1 @@ -1,16 +1,16 @@ -Function Get-JCGroup () { +function Get-JCGroup () { [CmdletBinding(DefaultParameterSetName = 'ReturnAll')] param ( - [Parameter(ParameterSetName = 'Type', Position = 0, HelpMessage = 'The type of JumpCloud group you want to return. Note there are only two options - User and System.')] - [ValidateSet('User', 'System')] + [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') { + dynamicparam { + if ((Get-PSCallStack).Command -like '*MarkdownHelp') { $Type = 'User' } - If ($Type) { + if ($Type) { $attr = New-Object System.Management.Automation.ParameterAttribute $attr.HelpMessage = "Enter the group name" $attr.Mandatory = $false @@ -26,7 +26,7 @@ Function Get-JCGroup () { begin { Write-Debug 'Verifying JCAPI Key' if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { - Connect-JConline + Connect-JCOnline } [int]$limit = '100' @@ -38,12 +38,19 @@ Function Get-JCGroup () { $resultsArray = @() if ($param.IsSet) { - if ($Type -eq 'System') { - Write-Verbose 'Populating SystemGroupHash' - $SystemGroupHash = Get-DynamicHash -Object Group -GroupType System -returnProperties name - } elseif ($Type -eq 'User') { - Write-Verbose 'Populating UserGroupHash' - $UserGroupHash = Get-DynamicHash -Object Group -GroupType User -returnProperties name + 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 + } } } } @@ -63,26 +70,22 @@ Function Get-JCGroup () { $count = ($resultsArray.results).Count Write-Debug "Results count equals $count" } elseif (($PSCmdlet.ParameterSetName -eq 'Type') -and !($param.IsSet)) { - if ($type -eq 'User') { - $limitURL = "$JCUrlBasePath/api/v2/groups?filter=type:eq:user_group" - 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 ($type -eq 'System') { - $limitURL = "$JCUrlBasePath/api/v2/groups?filter=type:eq:system_group" - 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 + 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 -contains ($param.Value) }).Name + $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 @@ -90,13 +93,21 @@ Function Get-JCGroup () { 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 -contains ($param.Value) }).Name + $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." + } } } } diff --git a/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Get-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Get-JCPolicyGroup.ps1 new file mode 100644 index 000000000..edc2fd560 --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Get-JCPolicyGroup.ps1 @@ -0,0 +1,152 @@ +<# +.Synopsis +This endpoint returns the details of a Policy Group. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/policygroups/{GroupID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' +``` +.Description +This endpoint returns the details of a Policy Group. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/policygroups/{GroupID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' +``` +.Example +PS C:\> Get-JCPolicyGroup -Fields:() -Filter:() -Sort:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +Name String +Type String + + +.Example +PS C:\> Get-JCPolicyGroup -Id:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +Name String +Type String + + + +.Inputs +JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity +.Outputs +JumpCloud.SDK.V2.Models.IPolicyGroup +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +INPUTOBJECT : Identity Parameter + [AccountId ]: + [ActivedirectoryId ]: + [AdministratorId ]: + [AgentId ]: + [AppleMdmId ]: + [ApplicationId ]: ObjectID of the Application. + [CommandId ]: ObjectID of the Command. + [CustomEmailType ]: + [DeviceId ]: + [GroupId ]: ObjectID of the Policy Group. + [GsuiteId ]: ObjectID of the G Suite instance. + [Id ]: ObjectID of this Active Directory instance. + [JobId ]: + [LdapserverId ]: ObjectID of the LDAP Server. + [Office365Id ]: ObjectID of the Office 365 instance. + [PolicyId ]: ObjectID of the Policy. + [ProviderId ]: + [PushEndpointId ]: + [RadiusserverId ]: ObjectID of the Radius Server. + [SoftwareAppId ]: ObjectID of the Software App. + [SystemId ]: ObjectID of the System. + [UserId ]: ObjectID of the User. + [WorkdayId ]: +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/Get-JcSdkPolicyGroup.md +#> +Function Get-JCPolicyGroup { + [OutputType([JumpCloud.SDK.V2.Models.IPolicyGroup])] + [CmdletBinding(DefaultParameterSetName='List', PositionalBinding=$false)] + Param( + [Parameter(ParameterSetName='Get', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the Policy Group. + ${Id}, + + [Parameter(ParameterSetName='GetViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Path')] + [JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity] + # Identity Parameter + ${InputObject}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields included in the returned records. + # If omitted, the default list of fields will be returned. + ${Fields}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # A filter to apply to the query. + # + # **Filter structure**: `::`. + # + # **field** = Populate with a valid field from an endpoint response. + # + # **operator** = Supported operators are: eq, ne, gt, ge, lt, le, between, search, in. + # _Note: v1 operators differ from v2 operators._ + # + # **value** = Populate with the value you want to search for. + # Is case sensitive. + # Supports wild cards. + # + # **EX:** `GET /api/v2/groups?filter=name:eq:Test+Group` + ${Filter}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields used to sort the collection. + # Default sort is ascending, prefix with `-` to sort descending. + ${Sort} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\Get-JcSdkPolicyGroup @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Get-JCPolicyGroupMember.ps1 b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Get-JCPolicyGroupMember.ps1 new file mode 100644 index 000000000..85dea7041 --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Get-JCPolicyGroupMember.ps1 @@ -0,0 +1,171 @@ +<# +.Synopsis +This endpoint returns all the Policy Groups a Policy is a member of. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/policies/{Policy_ID}/memberof \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' + +``` +.Description +This endpoint returns all the Policy Groups a Policy is a member of. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/policies/{Policy_ID}/memberof \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' + +``` +.Example +PS C:\> Get-JCPolicyGroupMember -PolicyId:() -Filter:() -Sort:() -Authorization:() -Date:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +FromAttributes JumpCloud.SDK.V2.Models.GraphAttributes +FromId String +FromType String +ToAttributes JumpCloud.SDK.V2.Models.GraphAttributes +ToId String +ToType String + + +.Example +PS C:\> Get-JCPolicyGroupMember -GroupId:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +FromAttributes JumpCloud.SDK.V2.Models.GraphAttributes +FromId String +FromType String +ToAttributes JumpCloud.SDK.V2.Models.GraphAttributes +ToId String +ToType String + + + +.Inputs +JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity +.Outputs +JumpCloud.SDK.V2.Models.IGraphConnection +.Outputs +JumpCloud.SDK.V2.Models.IGraphObjectWithPaths +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +INPUTOBJECT : Identity Parameter + [AccountId ]: + [ActivedirectoryId ]: + [AdministratorId ]: + [AgentId ]: + [AppleMdmId ]: + [ApplicationId ]: ObjectID of the Application. + [CommandId ]: ObjectID of the Command. + [CustomEmailType ]: + [DeviceId ]: + [GroupId ]: ObjectID of the Policy Group. + [GsuiteId ]: ObjectID of the G Suite instance. + [Id ]: ObjectID of this Active Directory instance. + [JobId ]: + [LdapserverId ]: ObjectID of the LDAP Server. + [Office365Id ]: ObjectID of the Office 365 instance. + [PolicyId ]: ObjectID of the Policy. + [ProviderId ]: + [PushEndpointId ]: + [RadiusserverId ]: ObjectID of the Radius Server. + [SoftwareAppId ]: ObjectID of the Software App. + [SystemId ]: ObjectID of the System. + [UserId ]: ObjectID of the User. + [WorkdayId ]: +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/Get-JcSdkPolicyGroupMember.md +#> +Function Get-JCPolicyGroupMember { + [OutputType([JumpCloud.SDK.V2.Models.IGraphObjectWithPaths], [JumpCloud.SDK.V2.Models.IGraphConnection])] + [CmdletBinding(DefaultParameterSetName='Get', PositionalBinding=$false)] + Param( + [Parameter(ParameterSetName='Get', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the Policy. + ${PolicyId}, + + [Parameter(ParameterSetName='GetViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Path')] + [JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity] + # Identity Parameter + ${InputObject}, + + [Parameter(ParameterSetName='List', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the Policy Group. + ${GroupId}, + + [Parameter(ParameterSetName='Get')] + [Parameter(ParameterSetName='GetViaIdentity')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # A filter to apply to the query. + # + # **Filter structure**: `::`. + # + # **field** = Populate with a valid field from an endpoint response. + # + # **operator** = Supported operators are: eq, ne, gt, ge, lt, le, between, search, in. + # _Note: v1 operators differ from v2 operators._ + # + # **value** = Populate with the value you want to search for. + # Is case sensitive. + # Supports wild cards. + # + # **EX:** `GET /api/v2/groups?filter=name:eq:Test+Group` + ${Filter}, + + [Parameter(ParameterSetName='Get')] + [Parameter(ParameterSetName='GetViaIdentity')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields used to sort the collection. + # Default sort is ascending, prefix with `-` to sort descending. + ${Sort}, + + [Parameter(ParameterSetName='Get')] + [Parameter(ParameterSetName='GetViaIdentity')] + [JumpCloud.SDK.V2.Category('Header')] + [System.String] + # Authorization header for the System Context API + ${Authorization}, + + [Parameter(ParameterSetName='Get')] + [Parameter(ParameterSetName='GetViaIdentity')] + [JumpCloud.SDK.V2.Category('Header')] + [System.String] + # Current date header for the System Context API + ${Date} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\Get-JcSdkPolicyGroupMember @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/New-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/New-JCPolicyGroup.ps1 new file mode 100644 index 000000000..7dc4418ea --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/New-JCPolicyGroup.ps1 @@ -0,0 +1,97 @@ +<# +.Synopsis +This endpoint allows you to create a new Policy Group. + +#### Sample Request +``` +curl -X POST https://console.jumpcloud.com/api/v2/policygroups \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' \\ + -d '{ + \"name\": \"{Group_Name}\" + }' +``` +.Description +This endpoint allows you to create a new Policy Group. + +#### Sample Request +``` +curl -X POST https://console.jumpcloud.com/api/v2/policygroups \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' \\ + -d '{ + \"name\": \"{Group_Name}\" + }' +``` +.Example +PS C:\> New-JCPolicyGroup -Name:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +Name String +Type String + + +.Example +PS C:\> New-JCPolicyGroup -Body:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +Name String +Type String + + + +.Inputs +JumpCloud.SDK.V2.Models.IPolicyGroupData +.Outputs +JumpCloud.SDK.V2.Models.IPolicyGroup +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +BODY : PolicyGroupData + Name : Display name of a Policy Group. +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/New-JcSdkPolicyGroup.md +#> +Function New-JCPolicyGroup { + [OutputType([JumpCloud.SDK.V2.Models.IPolicyGroup])] + [CmdletBinding(DefaultParameterSetName='CreateExpanded', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')] + Param( + [Parameter(ParameterSetName='CreateExpanded')] + [JumpCloud.SDK.V2.Category('Body')] + [System.String] + # Display name of a Policy Group. + ${Name}, + + [Parameter(ParameterSetName='Create', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Body')] + [JumpCloud.SDK.V2.Models.IPolicyGroupData] + # PolicyGroupData + ${Body} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\New-JcSdkPolicyGroup @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Remove-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Remove-JCPolicyGroup.ps1 new file mode 100644 index 000000000..4816c579b --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Remove-JCPolicyGroup.ps1 @@ -0,0 +1,111 @@ +<# +.Synopsis +This endpoint allows you to delete a Policy Group. + +#### Sample Request +``` +curl -X DELETE https://console.jumpcloud.com/api/v2/policygroups/{GroupID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' + +``` +.Description +This endpoint allows you to delete a Policy Group. + +#### Sample Request +``` +curl -X DELETE https://console.jumpcloud.com/api/v2/policygroups/{GroupID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' + +``` +.Example +PS C:\> Remove-JCPolicyGroup -Id:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +Name String +Type String + + +.Example +PS C:\> {{ Add code here }} + +{{ Add output here }} + +.Inputs +JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity +.Outputs +JumpCloud.SDK.V2.Models.IPolicyGroup +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +INPUTOBJECT : Identity Parameter + [AccountId ]: + [ActivedirectoryId ]: + [AdministratorId ]: + [AgentId ]: + [AppleMdmId ]: + [ApplicationId ]: ObjectID of the Application. + [CommandId ]: ObjectID of the Command. + [CustomEmailType ]: + [DeviceId ]: + [GroupId ]: ObjectID of the Policy Group. + [GsuiteId ]: ObjectID of the G Suite instance. + [Id ]: ObjectID of this Active Directory instance. + [JobId ]: + [LdapserverId ]: ObjectID of the LDAP Server. + [Office365Id ]: ObjectID of the Office 365 instance. + [PolicyId ]: ObjectID of the Policy. + [ProviderId ]: + [PushEndpointId ]: + [RadiusserverId ]: ObjectID of the Radius Server. + [SoftwareAppId ]: ObjectID of the Software App. + [SystemId ]: ObjectID of the System. + [UserId ]: ObjectID of the User. + [WorkdayId ]: +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/Remove-JcSdkPolicyGroup.md +#> +Function Remove-JCPolicyGroup { + [OutputType([JumpCloud.SDK.V2.Models.IPolicyGroup])] + [CmdletBinding(DefaultParameterSetName='Delete', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')] + Param( + [Parameter(ParameterSetName='Delete', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the Policy Group. + ${Id}, + + [Parameter(ParameterSetName='DeleteViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Path')] + [JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity] + # Identity Parameter + ${InputObject}, + + [Parameter()] + [JumpCloud.SDK.V2.Category('Runtime')] + [System.Management.Automation.SwitchParameter] + # Returns true when the command succeeds + ${PassThru} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\Remove-JcSdkPolicyGroup @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Set-JCPolicyGroupMember.ps1 b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Set-JCPolicyGroupMember.ps1 new file mode 100644 index 000000000..688eb6324 --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/PolicyGroups/Set-JCPolicyGroupMember.ps1 @@ -0,0 +1,148 @@ +<# +.Synopsis +This endpoint allows you to manage the Policy members of a Policy Group. + +#### Sample Request +``` +curl -X POST https://console.jumpcloud.com/api/v2/policygroups/{GroupID}/members \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' \\ + -d '{ + \"op\": \"add\", + \"type\": \"policy\", + \"id\": \"{Policy_ID}\" + }' +``` +.Description +This endpoint allows you to manage the Policy members of a Policy Group. + +#### Sample Request +``` +curl -X POST https://console.jumpcloud.com/api/v2/policygroups/{GroupID}/members \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' \\ + -d '{ + \"op\": \"add\", + \"type\": \"policy\", + \"id\": \"{Policy_ID}\" + }' +``` +.Example +PS C:\> Set-JCPolicyGroupMember -GroupId:() -Body:() + + +.Example +PS C:\> Set-JCPolicyGroupMember -GroupId:() -Id:() -Op:() -Attributes:() + + + +.Inputs +JumpCloud.SDK.V2.Models.IGraphOperationPolicyGroupMember +.Inputs +JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity +.Outputs +System.Boolean +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +BODY : GraphOperation (PolicyGroup-Member) + Id : The ObjectID of graph object being added or removed as an association. + Op : How to modify the graph connection. + [Attributes ]: The graph attributes. + [(Any) ]: This indicates any property can be added to this object. + +INPUTOBJECT : Identity Parameter + [AccountId ]: + [ActivedirectoryId ]: + [AdministratorId ]: + [AgentId ]: + [AppleMdmId ]: + [ApplicationId ]: ObjectID of the Application. + [CommandId ]: ObjectID of the Command. + [CustomEmailType ]: + [DeviceId ]: + [GroupId ]: ObjectID of the Policy Group. + [GsuiteId ]: ObjectID of the G Suite instance. + [Id ]: ObjectID of this Active Directory instance. + [JobId ]: + [LdapserverId ]: ObjectID of the LDAP Server. + [Office365Id ]: ObjectID of the Office 365 instance. + [PolicyId ]: ObjectID of the Policy. + [ProviderId ]: + [PushEndpointId ]: + [RadiusserverId ]: ObjectID of the Radius Server. + [SoftwareAppId ]: ObjectID of the Software App. + [SystemId ]: ObjectID of the System. + [UserId ]: ObjectID of the User. + [WorkdayId ]: +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/Set-JcSDKPolicyGroupMember.md +#> +Function Set-JCPolicyGroupMember { + [OutputType([System.Boolean])] + [CmdletBinding(DefaultParameterSetName='SetExpanded', PositionalBinding=$false, SupportsShouldProcess, ConfirmImpact='Medium')] + Param( + [Parameter(ParameterSetName='SetExpanded', Mandatory)] + [Parameter(ParameterSetName='Set', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the Policy Group. + ${GroupId}, + + [Parameter(ParameterSetName='SetViaIdentityExpanded', Mandatory, ValueFromPipeline)] + [Parameter(ParameterSetName='SetViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Path')] + [JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity] + # Identity Parameter + ${InputObject}, + + [Parameter(ParameterSetName='SetExpanded')] + [Parameter(ParameterSetName='SetViaIdentityExpanded')] + [JumpCloud.SDK.V2.Category('Body')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([JumpCloud.SDK.V2.Models.IGraphAttributes]))] + [System.Collections.Hashtable] + # The graph attributes. + ${Attributes}, + + [Parameter(ParameterSetName='SetExpanded')] + [Parameter(ParameterSetName='SetViaIdentityExpanded')] + [JumpCloud.SDK.V2.Category('Body')] + [System.String] + # The ObjectID of graph object being added or removed as an association. + ${Id}, + + [Parameter(ParameterSetName='SetExpanded')] + [Parameter(ParameterSetName='SetViaIdentityExpanded')] + [JumpCloud.SDK.V2.Category('Body')] + [System.String] + # How to modify the graph connection. + ${Op}, + + [Parameter(ParameterSetName='Set', Mandatory, ValueFromPipeline)] + [Parameter(ParameterSetName='SetViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Body')] + [JumpCloud.SDK.V2.Models.IGraphOperationPolicyGroupMember] + # GraphOperation (PolicyGroup-Member) + ${Body}, + + [Parameter()] + [JumpCloud.SDK.V2.Category('Runtime')] + [System.Management.Automation.SwitchParameter] + # Returns true when the command succeeds + ${PassThru} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\Set-JcSdkPolicyGroupMember @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Groups/SystemGroups/Get-JCSystemGroup.ps1 b/PowerShell/JumpCloud Module/Public/Groups/SystemGroups/Get-JCSystemGroup.ps1 new file mode 100644 index 000000000..17a6f6cb9 --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/SystemGroups/Get-JCSystemGroup.ps1 @@ -0,0 +1,162 @@ +<# +.Synopsis +This endpoint returns the details of a System Group. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/systemgroups/{Group_ID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' +``` +.Description +This endpoint returns the details of a System Group. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/systemgroups/{Group_ID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' +``` +.Example +PS C:\> Get-JCSystemGroup -Fields:() -Filter:() -Sort:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +MemberQueryExemptions JumpCloud.SDK.V2.Models.GraphObject[] +MemberQueryFilters JumpCloud.SDK.V2.Models.Any[] +MemberQueryType String +MembershipMethod String +MemberSuggestionsNotify Boolean +Name String +Type String + + +.Example +PS C:\> Get-JCSystemGroup -Id:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GraphAttributes +Description String +Email String +Id String +MemberQueryExemptions JumpCloud.SDK.V2.Models.GraphObject[] +MemberQueryFilters JumpCloud.SDK.V2.Models.Any[] +MemberQueryType String +MembershipMethod String +MemberSuggestionsNotify Boolean +Name String +Type String + + + +.Inputs +JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity +.Outputs +JumpCloud.SDK.V2.Models.ISystemGroup +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +INPUTOBJECT : Identity Parameter + [AccountId ]: + [ActivedirectoryId ]: + [AdministratorId ]: + [AgentId ]: + [AppleMdmId ]: + [ApplicationId ]: ObjectID of the Application. + [CommandId ]: ObjectID of the Command. + [CustomEmailType ]: + [DeviceId ]: + [GroupId ]: ObjectID of the Policy Group. + [GsuiteId ]: ObjectID of the G Suite instance. + [Id ]: ObjectID of this Active Directory instance. + [JobId ]: + [LdapserverId ]: ObjectID of the LDAP Server. + [Office365Id ]: ObjectID of the Office 365 instance. + [PolicyId ]: ObjectID of the Policy. + [ProviderId ]: + [PushEndpointId ]: + [RadiusserverId ]: ObjectID of the Radius Server. + [SoftwareAppId ]: ObjectID of the Software App. + [SystemId ]: ObjectID of the System. + [UserId ]: ObjectID of the User. + [WorkdayId ]: +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/Get-JcSdkSystemGroup.md +#> +Function Get-JCSystemGroup { + [OutputType([JumpCloud.SDK.V2.Models.ISystemGroup])] + [CmdletBinding(DefaultParameterSetName='List', PositionalBinding=$false)] + Param( + [Parameter(ParameterSetName='Get', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the System Group. + ${Id}, + + [Parameter(ParameterSetName='GetViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Path')] + [JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity] + # Identity Parameter + ${InputObject}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields included in the returned records. + # If omitted, the default list of fields will be returned. + ${Fields}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # A filter to apply to the query. + # + # **Filter structure**: `::`. + # + # **field** = Populate with a valid field from an endpoint response. + # + # **operator** = Supported operators are: eq, ne, gt, ge, lt, le, between, search, in. + # _Note: v1 operators differ from v2 operators._ + # + # **value** = Populate with the value you want to search for. + # Is case sensitive. + # Supports wild cards. + # + # **EX:** `GET /api/v2/groups?filter=name:eq:Test+Group` + ${Filter}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields used to sort the collection. + # Default sort is ascending, prefix with `-` to sort descending. + ${Sort} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\Get-JcSdkSystemGroup @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Groups/UserGroups/Get-JCUserGroup.ps1 b/PowerShell/JumpCloud Module/Public/Groups/UserGroups/Get-JCUserGroup.ps1 new file mode 100644 index 000000000..9e4ccd52b --- /dev/null +++ b/PowerShell/JumpCloud Module/Public/Groups/UserGroups/Get-JCUserGroup.ps1 @@ -0,0 +1,168 @@ +<# +.Synopsis +This endpoint returns the details of a User Group. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/usergroups/{GroupID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' +``` +.Description +This endpoint returns the details of a User Group. + +#### Sample Request +``` +curl -X GET https://console.jumpcloud.com/api/v2/usergroups/{GroupID} \\ + -H 'Accept: application/json' \\ + -H 'Content-Type: application/json' \\ + -H 'x-api-key: {API_KEY}' +``` +.Example +PS C:\> Get-JCUserGroup -Fields:() -Filter:() -Sort:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GroupAttributesUserGroup +Description String +Email String +Id String +MemberQueryExemptions JumpCloud.SDK.V2.Models.GraphObject[] +MemberQueryFilters JumpCloud.SDK.V2.Models.Any[] +MemberQueryType String +MembershipMethod String +MemberSuggestionsNotify Boolean +Name String +SuggestionCountAdd Int +SuggestionCountRemove Int +SuggestionCountTotal Int +Type String + + +.Example +PS C:\> Get-JCUserGroup -Id:() + + + +---- ---------- +Attributes JumpCloud.SDK.V2.Models.GroupAttributesUserGroup +Description String +Email String +Id String +MemberQueryExemptions JumpCloud.SDK.V2.Models.GraphObject[] +MemberQueryFilters JumpCloud.SDK.V2.Models.Any[] +MemberQueryType String +MembershipMethod String +MemberSuggestionsNotify Boolean +Name String +SuggestionCountAdd Int +SuggestionCountRemove Int +SuggestionCountTotal Int +Type String + + + +.Inputs +JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity +.Outputs +JumpCloud.SDK.V2.Models.IUserGroup +.Notes +COMPLEX PARAMETER PROPERTIES + +To create the parameters described below, construct a hash table containing the appropriate properties. For information on hash tables, run Get-Help about_Hash_Tables. + +INPUTOBJECT : Identity Parameter + [AccountId ]: + [ActivedirectoryId ]: + [AdministratorId ]: + [AgentId ]: + [AppleMdmId ]: + [ApplicationId ]: ObjectID of the Application. + [CommandId ]: ObjectID of the Command. + [CustomEmailType ]: + [DeviceId ]: + [GroupId ]: ObjectID of the Policy Group. + [GsuiteId ]: ObjectID of the G Suite instance. + [Id ]: ObjectID of this Active Directory instance. + [JobId ]: + [LdapserverId ]: ObjectID of the LDAP Server. + [Office365Id ]: ObjectID of the Office 365 instance. + [PolicyId ]: ObjectID of the Policy. + [ProviderId ]: + [PushEndpointId ]: + [RadiusserverId ]: ObjectID of the Radius Server. + [SoftwareAppId ]: ObjectID of the Software App. + [SystemId ]: ObjectID of the System. + [UserId ]: ObjectID of the User. + [WorkdayId ]: +.Link +https://github.com/TheJumpCloud/jcapi-powershell/tree/master/SDKs/PowerShell/JumpCloud.SDK.V2/docs/exports/Get-JcSdkUserGroup.md +#> +Function Get-JCUserGroup { + [OutputType([JumpCloud.SDK.V2.Models.IUserGroup])] + [CmdletBinding(DefaultParameterSetName='List', PositionalBinding=$false)] + Param( + [Parameter(ParameterSetName='Get', Mandatory)] + [JumpCloud.SDK.V2.Category('Path')] + [System.String] + # ObjectID of the User Group. + ${Id}, + + [Parameter(ParameterSetName='GetViaIdentity', Mandatory, ValueFromPipeline)] + [JumpCloud.SDK.V2.Category('Path')] + [JumpCloud.SDK.V2.Models.IJumpCloudApiIdentity] + # Identity Parameter + ${InputObject}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields included in the returned records. + # If omitted, the default list of fields will be returned. + ${Fields}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # A filter to apply to the query. + # + # **Filter structure**: `::`. + # + # **field** = Populate with a valid field from an endpoint response. + # + # **operator** = Supported operators are: eq, ne, gt, ge, lt, le, between, search, in. + # _Note: v1 operators differ from v2 operators._ + # + # **value** = Populate with the value you want to search for. + # Is case sensitive. + # Supports wild cards. + # + # **EX:** `GET /api/v2/groups?filter=name:eq:Test+Group` + ${Filter}, + + [Parameter(ParameterSetName='List')] + [AllowEmptyCollection()] + [JumpCloud.SDK.V2.Category('Query')] + [JumpCloud.SDK.V2.Runtime.Info(PossibleTypes=([System.String]))] + [System.Collections.Generic.List[System.String]] + # The comma separated fields used to sort the collection. + # Default sort is ascending, prefix with `-` to sort descending. + ${Sort} + ) + Begin { + Connect-JCOnline -force | Out-Null + $Results = @() + } + Process { + $Results = JumpCloud.SDK.V2\Get-JcSdkUserGroup @PSBoundParameters + } + End { + Return $Results + } +} diff --git a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Get-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Get-JCPolicyGroup.ps1 deleted file mode 100644 index a481b6e71..000000000 --- a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Get-JCPolicyGroup.ps1 +++ /dev/null @@ -1,46 +0,0 @@ -Function Get-JCPolicyGroup { - [CmdletBinding(DefaultParameterSetName = 'ReturnAll')] - param ( - [Parameter( - ParameterSetName = 'ByName', - Mandatory = $true, - HelpMessage = 'The Name of the JumpCloud policy group you wish to query. This value is case sensitive')] - [System.String] - $Name, - [Parameter( - ParameterSetName = 'ById', - Mandatory = $true, - HelpMessage = 'The ID of the JumpCloud policy group you wish to query')] - [Alias('_id', 'id')] - [System.String] - $PolicyGroupID - ) - begin { - if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { - Connect-JCOnline - } - $URL = switch ($PSCmdlet.ParameterSetName) { - "ReturnAll" { - "$JCUrlBasePath/api/v2/policygroups" - $paginateRequired = $true - } - "ByName" { - # TODO: decide on search vs exact match - "$JCUrlBasePath/api/v2/policygroups?sort=name&filter=name%3Aeq%3A$Name" - $paginateRequired = $true - # "$JCUrlBasePath/api/v2/policygroups?sort=name&filter=type%3Aeq%3Apolicy_group%2Cname%3Asearch%3A$Name" - } - "ById" { - "$JCUrlBasePath/api/v2/policygroups/$PolicyGroupID" - $paginateRequired = $false - } - } - } - process { - $Result = Invoke-JCApi -Method:('GET') -Paginate:($paginateRequired) -Url:($URL) - } - end { - return $Result - } -} - diff --git a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Get-JCPolicyGroupMember.ps1 b/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Get-JCPolicyGroupMember.ps1 deleted file mode 100644 index 3b20cd277..000000000 --- a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Get-JCPolicyGroupMember.ps1 +++ /dev/null @@ -1,62 +0,0 @@ -Function Get-JCPolicyGroupMember { - [CmdletBinding()] - param ( - [Parameter( - ParameterSetName = 'ById', - Mandatory = $true, - HelpMessage = "The ID of the JumpCloud policy group to query and return members of" - )] - [Alias('_id', 'id')] - [System.String] - $PolicyGroupID, - [Parameter( - ParameterSetName = 'ByName', - Mandatory = $true, - HelpMessage = "The name of the JumpCloud policy group to query and return members of" - )] - [System.String] - $Name - ) - begin { - if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { - Connect-JCOnline - } - - $URL = switch ($PSCmdlet.ParameterSetName) { - "ByName" { - try { - $policyGroup = Get-JCPolicyGroup -Name $Name - if ($policyGroup) { - $PolicyGroupID = $policyGroup.Id - } else { - throw - } - } catch { - throw "Could not find policy group with name: $name" - } - "$JCUrlBasePath/api/v2/policygroups/$PolicyGroupID/membership" - } - "ById" { - "$JCUrlBasePath/api/v2/policygroups/$PolicyGroupID/membership" - } - } - } - process { - $response = Invoke-JCApi -Method:('GET') -Paginate:($true) -Url:($URL) - - If ('NoContent' -in $response.PSObject.Properties.Name) { - $policyMemberList = $null - } else { - $policyMemberList = New-Object System.Collections.ArrayList - foreach ($policy in $response) { - # return the values by getting the policy individually - $policyResult = Get-JCPolicy -PolicyID $policy.id - $policyMemberList.Add($policyResult) | Out-Null - } - } - - } - end { - return $policyMemberList - } -} \ No newline at end of file diff --git a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/New-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/New-JCPolicyGroup.ps1 deleted file mode 100644 index c33400038..000000000 --- a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/New-JCPolicyGroup.ps1 +++ /dev/null @@ -1,55 +0,0 @@ -Function New-JCPolicyGroup { - [CmdletBinding()] - param ( - [Parameter( - ParameterSetName = 'FromTemplateID', - Mandatory = $true, - HelpMessage = 'The Policy Template ID to apply to this MTP org. This parameter will only work in MTP organizations' - )] - [system.string] - $TemplateID, - [Parameter( - ParameterSetName = 'Name', - Mandatory = $true, - HelpMessage = 'The name of the policy group to create' - )] - [system.string] - $Name, - [Parameter( - ParameterSetName = 'Name', - Mandatory = $false, - HelpMessage = 'The description of the policy group to create' - )] - [system.string] - $Description - ) - begin { - if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { - Connect-JCOnline - } - - switch ($PSCmdlet.ParameterSetName) { - "FromTemplateID" { - $URL = "$JCUrlBasePath/api/v2/organizations/$env:JCOrgId/policygroups/fromtemplate" - $BODY = @{ - templateId = $TemplateID - } | ConvertTo-Json - } - "Name" { - $URL = "$JCUrlBasePath/api/v2/policygroups" - $BODY = @{ - name = "$Name" - description = "$Description" - } | ConvertTo-Json - } - - } - } - process { - # TODO: CUT-4439 eventually Invoke-JCAPI should have a dynamic list of policy endpoints that do not accept ORGIDs in the headers. - $response = Invoke-JCApi -URL:("$URL") -Method:("POST") -Body:($BODY) - } - end { - return $response - } -} \ No newline at end of file diff --git a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Remove-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Remove-JCPolicyGroup.ps1 deleted file mode 100644 index 04aeb3152..000000000 --- a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Remove-JCPolicyGroup.ps1 +++ /dev/null @@ -1,79 +0,0 @@ -function Remove-JCPolicyGroup { - [CmdletBinding()] - param ( - [Parameter( - ParameterSetName = 'ByName', - Mandatory = $true, - HelpMessage = 'The Name of the JumpCloud policy group you wish to remove.')] - [System.String] - $Name, - [Parameter( - ParameterSetName = 'ByID', - ValueFromPipelineByPropertyName, - Mandatory = $true, - HelpMessage = 'The ID of the JumpCloud policy group you wish to remove.')] - [Alias('_id', 'id')] - [System.String] - $PolicyGroupID, - [Parameter(HelpMessage = 'A SwitchParameter which suppresses the warning message when removing a JumpCloud policy group.')] - [Switch] - $Force - ) - begin { - Write-Debug 'Verifying JCAPI Key' - if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { - Connect-JCOnline - } - - switch ($PSCmdlet.ParameterSetName) { - 'ByName' { - try { - $foundPolicy = Get-JCPolicyGroup -Name $Name - $PolicyGroupID = $foundPolicy.ID - - } catch { - $PolicyGroupID = $null - } - if ($foundPolicy) { - } - } - 'ByID' { - try { - $foundPolicy = Get-JCPolicyGroup -PolicyGroupID $PolicyGroupID - $PolicyGroupID = $foundPolicy.ID - - } catch { - $PolicyGroupID = $null - } - } - } - } - process { - if (-not [System.String]::IsNullOrEmpty($PolicyGroupID)) { - $URL = "$global:JCUrlBasePath/api/v2/policygroups/$PolicyGroupID" - if (-not $Force) { - Write-Warning "Are you sure you wish to delete policy group: `'$($foundPolicy.Name)`'?" -WarningAction Inquire - } - try { - $Result = Invoke-JCApi -Method:('DELETE') -Url:($URL) - $Status = "Deleted" - } catch { - $Status = $_.ErrorDetails - } - # set the return response: - $FormattedResults = [PSCustomObject]@{ - 'Name' = $foundPolicy.name - 'Result' = $Status - } - } else { - $FormattedResults = [PSCustomObject]@{ - 'Name' = "Not Found" - 'Result' = $null - } - } - } - end { - return $FormattedResults - } -} - diff --git a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Set-JCPolicyGroup.ps1 b/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Set-JCPolicyGroup.ps1 deleted file mode 100644 index 1ad199ab7..000000000 --- a/PowerShell/JumpCloud Module/Public/Policies/PolicyGroups/Set-JCPolicyGroup.ps1 +++ /dev/null @@ -1,70 +0,0 @@ -function Set-JCPolicyGroup { - [CmdletBinding()] - param ( - [Parameter( - ParameterSetName = 'ByName', - ValueFromPipelineByPropertyName, - Mandatory = $true, - HelpMessage = 'The Name of the JumpCloud policy group you wish to set.')] - [System.String]$Name, - [Parameter( - ParameterSetName = 'ByID', - ValueFromPipelineByPropertyName, - Mandatory = $true, - HelpMessage = 'The Id of the JumpCloud policy group you wish to set.')] - [Alias('_id', 'id')] - [System.String]$PolicyGroupID, - [Parameter(Mandatory = $false, - HelpMessage = 'The new name to set on the existing JumpCloud policy group. If left unspecified, the cmdlet will not rename the existing policy group.')] - [System.String] - $NewName, - [Parameter( - ValueFromPipelineByPropertyName, - Mandatory = $false, - HelpMessage = 'The Description of the JumpCloud policy group you wish to set.')] - [System.String]$Description - ) - begin { - if ([System.String]::IsNullOrEmpty($JCAPIKEY)) { - Connect-JCOnline - } - if ($PSBoundParameters["PolicyGroupID"]) { - # Get the policy by ID - $foundPolicyGroup = Get-JCPolicyGroup -PolicyGroupID $PolicyGroupID - if ([string]::IsNullOrEmpty($foundPolicyGroup.ID)) { - throw "Could not find policy group by ID" - } - - } elseif ($PSBoundParameters["Name"]) { - # Get the policy by Name - $foundPolicyGroup = Get-JCPolicyGroup -Name $Name - if ([string]::IsNullOrEmpty($foundPolicyGroup.ID)) { - throw "Could not find policy group by specified Name" - } - } - } - process { - # First set the name from PSParamSet if set; else set from policy - $NameFromProcess = if ($PSBoundParameters["NewName"]) { - $NewName - } else { - $foundPolicyGroup.name - } - $DescriptionFromProcess = if ($PSBoundParameters["Description"]) { - $Description - } else { - $foundPolicyGroup.Description - } - - $URL = "$global:JCUrlBasePath/api/v2/policygroups/$($foundPolicyGroup.id)" - $BODY = @{ - name = "$NameFromProcess" - description = "$DescriptionFromProcess" - } | ConvertTo-Json - $Result = Invoke-JCApi -Method:('PUT') -Url:($URL) -Body:($BODY) - } - end { - return $Result - } -} - diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/Get-JCGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/Get-JCGroup.Tests.ps1 index c479e81e6..c482ce808 100755 --- a/PowerShell/JumpCloud Module/Tests/Public/Groups/Get-JCGroup.Tests.ps1 +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/Get-JCGroup.Tests.ps1 @@ -22,6 +22,25 @@ Describe -Tag:('JCGroup') 'Get-JCGroup 1.0' { } + It 'Gets all JumpCloud Policy Groups' { + + $policyGroupName = "PesterPolicyGroup-$([guid]::NewGuid().ToString('N').Substring(0, 8))" + $newPolicyGroup = New-JCPolicyGroup -Name $policyGroupName -Description 'Pester generated policy group' + + try { + $PolicyGroups = Get-JCGroup -Type Policy + $PolicyGroups | Should -Not -BeNullOrEmpty + $PolicyGroups.name | Should -Contain $policyGroupName + $OneGroup = $PolicyGroups.type | Select-Object -Unique | Measure-Object + $OneGroup.Count | Should -Be 1 + } finally { + if ($newPolicyGroup) { + Remove-JCPolicyGroup -PolicyGroupID $newPolicyGroup.id -Force | Out-Null + } + } + + } + } Describe -Tag:('JCGroup') 'Get-JCGroup 1.1.0' { diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Get-JcPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Get-JcPolicyGroup.Tests.ps1 new file mode 100644 index 000000000..a60def5ee --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Get-JcPolicyGroup.Tests.ps1 @@ -0,0 +1,32 @@ +Describe -Tag:('JcPolicyGroup') 'Get-JcPolicyGroup' { + BeforeAll { + $TestGroupName = "SdkTestPolicyGroup-$(Get-Random)" + $TestGroup = New-JCPolicyGroup -Name $TestGroupName + } + AfterAll { + if ($TestGroup -and $TestGroup.id) { + Remove-JCPolicyGroup -PolicyGroupID $TestGroup.id -Force + } + } + It 'Get returns all policy groups' { + $groups = Get-JCPolicyGroup + $groups | Should -Not -BeNullOrEmpty + $groups.name | Should -Contain $TestGroupName + } + It 'Get by ID returns single group' { + $group = Get-JCPolicyGroup -PolicyGroupID $TestGroup.id + $group | Should -Not -BeNullOrEmpty + $group.name | Should -Be $TestGroupName + } + It 'Get by name returns expected result' { + $filtered = Get-JCPolicyGroup -Name $TestGroupName + $filtered | Should -Not -BeNullOrEmpty + $filtered.name | Should -Be $TestGroupName + } + It 'Get by non-existent name returns nothing or error' { + $nonExistentName = "DefinitelyNotARealGroupName-$(Get-Random)" + $result = Get-JCPolicyGroup -Name $nonExistentName + $isEmpty = ($null -eq $result -or ($result.PSObject.Properties.Name -inotcontains 'name' -and $result.PSObject.Properties.Name -inotcontains 'id' -and $result.PSObject.Properties.Name -inotcontains 'Id')) + $isEmpty | Should -BeTrue + } +} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Get-JcPolicyGroupMember.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Get-JcPolicyGroupMember.Tests.ps1 new file mode 100644 index 000000000..a2d3216d9 --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Get-JcPolicyGroupMember.Tests.ps1 @@ -0,0 +1,37 @@ +Describe -Tag:('JcPolicyGroupMember') 'Get-JCPolicyGroupMember and Set-JCPolicyGroupMember' { + BeforeAll { + $TestGroupName = "SdkTestPolicyGroupMember-$(Get-Random)" + $TestGroup = New-JCPolicyGroup -Name $TestGroupName -Description "SDK Test Group" + $policyTemplates = Get-JcSdkPolicyTemplate + $usbTemplateLinux = $policyTemplates | Where-Object { $_.name -eq "disable_usb_storage_linux" } + $TestPolicy = New-JCPolicy -TemplateID $usbTemplateLinux.Id -Name "Pester-USB-Linux-$(Get-Random)" -disable_mtp $true -disable_afc $false -disable_mmc $false -Notes "usb" + } + AfterAll { + if ($TestPolicy) { Remove-JCPolicy -PolicyID $TestPolicy.Id -force | Out-Null } + if ($TestGroup) { Remove-JCPolicyGroup -PolicyGroupID $TestGroup.id -Force | Out-Null } + } + It 'Returns null when there are no members of the policy group' { + $members = Get-JCPolicyGroupMember -GroupId $TestGroup.id + $members | Should -BeNullOrEmpty + } + It 'Adds a policy to the group and Get-JCPolicyGroupMember returns it' { + Set-JCPolicyGroupMember -GroupId $TestGroup.id -Op "add" -Id $TestPolicy.id | Out-Null + $members = Get-JCPolicyGroupMember -GroupId $TestGroup.id + $members | Should -Not -BeNullOrEmpty + $TestPolicy.Name | Should -BeIn $members.Name + } + It 'Removes a policy from the group and Get-JCPolicyGroupMember returns empty' { + Set-JCPolicyGroupMember -GroupId $TestGroup.id -Op "remove" -Id $TestPolicy.id | Out-Null + $members = Get-JCPolicyGroupMember -GroupId $TestGroup.id + $members | Should -BeNullOrEmpty + } + It 'Returns groups for a policy using -PolicyId' { + # Add policy to group + Set-JCPolicyGroupMember -GroupId $TestGroup.id -Op "add" -Id $TestPolicy.id | Out-Null + $groups = Get-JCPolicyGroupMember -PolicyId $TestPolicy.id + $groups | Should -Not -BeNullOrEmpty + $TestGroupName | Should -BeIn $groups.Name + # Remove policy from group for cleanup + Set-JCPolicyGroupMember -GroupId $TestGroup.id -Op "remove" -Id $TestPolicy.id | Out-Null + } +} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/New-JcPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/New-JcPolicyGroup.Tests.ps1 new file mode 100644 index 000000000..6b8db65ad --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/New-JcPolicyGroup.Tests.ps1 @@ -0,0 +1,26 @@ +Describe -Tag:('JcPolicyGroup') 'New-JCPolicyGroup' { + BeforeAll { + $existing = Get-JCPolicyGroup -Name "SdkTestPolicyGroup-ForCreate" + if ($existing) { + $existing | ForEach-Object { Remove-JCPolicyGroup -PolicyGroupID $_.id -Force } + } + } + AfterAll { + $created = Get-JCPolicyGroup -Name "SdkTestPolicyGroup-ForCreate" + if ($created) { + $created | ForEach-Object { Remove-JCPolicyGroup -PolicyGroupID $_.id -Force } + } + } + It 'Creating a new policy group does not throw' { + { $TestGroup = New-JCPolicyGroup -Name "SdkTestPolicyGroup-ForCreate" -Description "SDK Test Group" } | Should -Not -Throw + } + It 'Creating a new policy group returns the ID and name of the group' { + $uniqueName = "SdkTestPolicyGroup-ForCreate-$(Get-Random)" + $TestGroup = New-JCPolicyGroup -Name $uniqueName -Description "SDK Test Group" + $TestGroup | Should -Not -BeNullOrEmpty + $TestGroup.id | Should -Not -BeNullOrEmpty + $TestGroup.name | Should -Be $uniqueName + Remove-JCPolicyGroup -PolicyGroupID $TestGroup.id -Force | Out-Null + } + +} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Remove-JcPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Remove-JcPolicyGroup.Tests.ps1 new file mode 100644 index 000000000..858d19032 --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Remove-JcPolicyGroup.Tests.ps1 @@ -0,0 +1,7 @@ +Describe -Tag:('JcPolicyGroup') 'Remove-JCPolicyGroup' { + It 'Removes a policy group by ID does not throw' { + $uniqueName = "SdkTestPolicyGroup-ForRemove-$(Get-Random)" + $TestGroup = New-JCPolicyGroup -Name $uniqueName -Description "SDK Test Group" + { Remove-JCPolicyGroup -ID $TestGroup.id -force } | Should -Not -Throw + } +} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Set-JCPolicyGroupMember.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Set-JCPolicyGroupMember.Tests.ps1 new file mode 100644 index 000000000..a716be81a --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/PolicyGroups/Set-JCPolicyGroupMember.Tests.ps1 @@ -0,0 +1,5 @@ +Describe "Get-JCPolicyGroup" { + It "Should import the function" -Skip "Test not implemented yet" { + # Placeholder test + } +} \ No newline at end of file diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/SystemGroups/Get-JcSystemGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/SystemGroups/Get-JcSystemGroup.Tests.ps1 new file mode 100644 index 000000000..24890b5d9 --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/SystemGroups/Get-JcSystemGroup.Tests.ps1 @@ -0,0 +1,29 @@ +Describe -Tag:('JcSystemGroup') 'Get-JCSystemGroup' { + BeforeAll { + $TestGroupName = "SdkTestSystemGroup-$(Get-Random)" + $TestGroup = New-JCSystemGroup -GroupName $TestGroupName + } + AfterAll { + Remove-JCSystemGroup -GroupName $TestGroupName -Force + } + It 'Get returns all system groups' { + $groups = Get-JCSystemGroup + $groups | Should -Not -BeNullOrEmpty + $groups.Name | Should -Contain $TestGroupName + } + It 'Get by ID returns single group' { + $group = Get-JCSystemGroup -Id $TestGroup.id + $group | Should -Not -BeNullOrEmpty + $group.Name | Should -Be $TestGroupName + } + It 'Get by name returns expected result' { + $filtered = Get-JCSystemGroup -Filter "name:eq:$TestGroupName" + $filtered | Should -Not -BeNullOrEmpty + $filtered.Name | Should -Be $TestGroupName + } + It 'Get by non-existent name returns nothing or error' { + $nonExistentName = "DefinitelyNotARealGroupName-$(Get-Random)" + $result = Get-JCSystemGroup -Filter "name:eq:$nonExistentName" + $result | Should -BeNullOrEmpty + } +} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/Get-JcUserGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/Get-JcUserGroup.Tests.ps1 new file mode 100644 index 000000000..f8e26c777 --- /dev/null +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/Get-JcUserGroup.Tests.ps1 @@ -0,0 +1,29 @@ +Describe -Tag:('JcUserGroup') 'Get-JCUserGroup' { + BeforeAll { + $TestGroupName = "SdkTestUserGroup-$(Get-Random)" + $TestGroup = New-JCUserGroup -GroupName $TestGroupName + } + AfterAll { + Remove-JCUserGroup -GroupName $TestGroupName -Force + } + It 'Get returns all user groups' { + $groups = Get-JCUserGroup + $groups | Should -Not -BeNullOrEmpty + $groups.Name | Should -Contain $TestGroupName + } + It 'Get by ID returns single group' { + $group = Get-JCUserGroup -Id $TestGroup.id + $group | Should -Not -BeNullOrEmpty + $group.Name | Should -Be $TestGroupName + } + It 'Get by name returns expected result' { + $filtered = Get-JCUserGroup -Filter "name:eq:$TestGroupName" + $filtered | Should -Not -BeNullOrEmpty + $filtered.Name | Should -Be $TestGroupName + } + It 'Get by non-existent name returns nothing or error' { + $nonExistentName = "DefinitelyNotARealGroupName-$(Get-Random)" + $result = Get-JCUserGroup -Filter "name:eq:$nonExistentName" + $result | Should -BeNullOrEmpty + } +} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/New-JCUserGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/New-JCUserGroup.Tests.ps1 index a5b999c3c..5fdf46484 100755 --- a/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/New-JCUserGroup.Tests.ps1 +++ b/PowerShell/JumpCloud Module/Tests/Public/Groups/UserGroups/New-JCUserGroup.Tests.ps1 @@ -1,9 +1,8 @@ Describe -Tag:('JCUserGroup') 'New-JCUserGroup 1.0' { BeforeAll { } It "Creates a new user group" { - $NewG = New-JCUserGroup -GroupName $(New-RandomString 8) + $NewG = New-JCUserGroup -GroupName ("Group-" + [guid]::NewGuid().ToString('N').Substring(0,8)) $NewG.Result | Should -Be 'Created' - $DeletedG = Remove-JCUserGroup -GroupName $NewG.name -force + $DeletedG = Remove-JCUserGroup -GroupName $NewG.name -Force } - } diff --git a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Get-JCPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Get-JCPolicyGroup.Tests.ps1 deleted file mode 100644 index 2ffb1a0c3..000000000 --- a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Get-JCPolicyGroup.Tests.ps1 +++ /dev/null @@ -1,36 +0,0 @@ -Describe -Tag:('JCPolicyGroup') 'Get-JCPolicyGroup' { - BeforeAll { - # get and remove "*pester* policy groups" - $policyGroups = Get-JCPolicyGroup - foreach ($policyGroup in $policyGroups) { - if ($policyGroup.name -match "Pester") { - Remove-JCPolicyGroup -PolicyGroupID $policyGroup.id -Force - } - } - # create a single policy group - $PesterGroupName = "Pester-$(Get-Random)" - $PesterGroupDesc = "$(Get-Random)" - $PesterGroup = New-JCPolicyGroup -Name $PesterGroupName -Description $PesterGroupDesc - } - It ('Returns the policy group without searching by name') { - $AllPolicyGroups = Get-JCPolicyGroup - $matchedPolicy = $AllPolicyGroups | Where-Object { $_.id -eq $PesterGroup.Id } - $matchedPolicy | Should -Not -BeNullOrEmpty - $matchedPolicy.name | Should -BeIn $AllPolicyGroups.name - $PesterGroup.id | Should -BeIn $AllPolicyGroups.id - } - It ('Returns the policy group by searching by name') { - $matchedPolicy = Get-JCPolicyGroup -Name $PesterGroupName - $matchedPolicy | Should -Not -BeNullOrEmpty - $matchedPolicy.name | Should -Be $PesterGroupName - $PesterGroup.description | Should -Be $PesterGroupDesc - $PesterGroup.id | Should -Be $PesterGroup.id - } - It ('Returns the policy group by searching by Id') { - $matchedPolicy = Get-JCPolicyGroup -PolicyGroupID $PesterGroup.id - $matchedPolicy | Should -Not -BeNullOrEmpty - $matchedPolicy.name | Should -Be $PesterGroupName - $PesterGroup.description | Should -Be $PesterGroupDesc - $PesterGroup.id | Should -Be $PesterGroup.id - } -} \ No newline at end of file diff --git a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Get-JCPolicyGroupMember.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Get-JCPolicyGroupMember.Tests.ps1 deleted file mode 100644 index f0f2d061e..000000000 --- a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Get-JCPolicyGroupMember.Tests.ps1 +++ /dev/null @@ -1,41 +0,0 @@ -Describe -Tag:('JCPolicyGroup') 'Get-JCPolicyGroupMember' { - BeforeAll { - # remove pester policy groups before starting these tests - $policyGroups = Get-JCPolicyGroup - foreach ($policyGroup in $policyGroups) { - if ($policyGroup.name -match "Pester") { - Remove-JCPolicyGroup -PolicyGroupID $policyGroup.id -Force - } - } - # create a single policy group - $PesterGroupName = "Pester-$(Get-Random)" - $PesterGroupDesc = "$(Get-Random)" - $PesterGroup = New-JCPolicyGroup -Name $PesterGroupName -Description $PesterGroupDesc - # create a policy for these tests: - $policyTemplates = Get-JcSdkPolicyTemplate - $usbTemplateLinux = $policyTemplates | Where-Object { $_.name -eq "disable_usb_storage_linux" } - $usbLinuxPolicy = New-JCPolicy -TemplateID $usbTemplateLinux.Id -Name "Pester - USB Linux $(new-randomString -NumberOfChars 8)" -disable_mtp $true -disable_afc $false -disable_mmc $false -Notes "usb" - } - It ('Returns null when there are no members of the policy group') { - $policyGroupMembers = Get-JCPolicyGroupMember -PolicyGroupID $PesterGroup.Id - # response should return nothing - $policyGroupMembers | Should -BeNullOrEmpty - } - It ('Returns a list of members when a policy has been added to the group') { - # add a policy to the group - Set-JcSdkPolicyGroupMember -GroupId $PesterGroup.Id -Op "add" -Id $usbLinuxPolicy.id - # get the group members - $policyGroupMembers = Get-JCPolicyGroupMember -PolicyGroupID $PesterGroup.Id - # The response should not be Null - $policyGroupMembers | Should -Not -BeNullOrEmpty - # there should be a count of 1 - $policyGroupMembers.Count | Should -BeExactly 1 - # the policyGroup should contain the new Policy - $usbLinuxPolicy.Name | Should -BeIn $policyGroupMembers.Name - } - It ('Returns members of a policy group specified by name') { - $policyGroupMembers = Get-JCPolicyGroupMember -Name $PesterGroup.name - # response should return nothing - $policyGroupMembers | Should -Not -BeNullOrEmpty - } -} \ No newline at end of file diff --git a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/New-JCPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/New-JCPolicyGroup.Tests.ps1 deleted file mode 100644 index 2f22e5ffe..000000000 --- a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/New-JCPolicyGroup.Tests.ps1 +++ /dev/null @@ -1,85 +0,0 @@ -Describe -Tag:('JCPolicyGroup') 'New-JCPolicyGroup' { - BeforeAll { - # remove pester policy groups before starting these tests - $policyGroups = Get-JCPolicyGroup - foreach ($policyGroup in $policyGroups) { - if ($policyGroup.name -match "Pester") { - Remove-JCPolicyGroup -PolicyGroupID $policyGroup.id -Force - } - } - } - It ("Creates a Policy Group with the name parameter") { - $randomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" - $newGroup | Should -Not -BeNullOrEmpty - $newGroup.Name | Should -Be $randomName - $newGroup.Description | Should -BeNullOrEmpty - - } - It ("Creates a Policy Group with the 'name' and 'description' parameter") { - $randomName = "Pester-$(Get-Random)" - $description = "PesterTest" - $newGroup = New-JCPolicyGroup -Name "$randomName" -Description "$description" - $newGroup | Should -Not -BeNullOrEmpty - $newGroup.Name | Should -Be $randomName - $newGroup.Description | Should -Be $description - } - It ("Throws if the Policy Group already exists") { - $policyGroups = Get-JCPolicyGroup - $randomPolicyGroup = $policyGroups | Where-Object { $_.name -match "pester" } | Select-Object -First 1 - { New-JCPolicyGroup -Name "$($randomPolicyGroup.name)" } | Should -Throw - } -} - -Describe -Tag:('MSP') 'New-JCPolicyGroup Templates' { - Context ('From TemplateID') { - BeforeAll { - # create a policy for these tests: - $policyTemplates = Get-JcSdkPolicyTemplate - $usbTemplateLinux = $policyTemplates | Where-Object { $_.name -eq "disable_usb_storage_linux" } - $usbLinuxPolicy = New-JCPolicy -TemplateID $usbTemplateLinux.Id -Name "Pester - USB Linux $(new-randomString -NumberOfChars 8)" -disable_mtp $true -disable_afc $false -disable_mmc $false -Notes "usb" - - $PesterTemplateGroupName = "Pester-$(Get-Random)" - $PesterTemplateGroupDesc = "Pester-$(Get-Random)" - - $headers = @{ - "content-type" = "application/json" - "x-api-key" = "$env:JCApiKey" - } - $body = @{ - "description" = "$PesterTemplateGroupDesc" - "name" = "$PesterTemplateGroupName" - "policyIds" = @("$($usbLinuxPolicy.Id)") - } | ConvertTo-Json - - - $newPolicyGroupTemplate = Invoke-RestMethod -Uri "https://console.jumpcloud.com/api/v2/providers/$env:JCProviderId/policygrouptemplates" -Method POST -Headers $headers -ContentType 'application/json' -Body $body - - } - - It ("Creates a policy group from template when the group exists") { - $existingPolicyGroup = Get-JCPolicyGroupTemplate -GroupTemplateID $newPolicyGroupTemplate.id - if (-Not $existingPolicyGroup) { - New-JCPolicyGroup -TemplateID $newPolicyGroupTemplate.id - } - # this behavior is actually expected - { $templateResult = New-JCPolicyGroup -TemplateID $newPolicyGroupTemplate.id } | Should -Not -Throw - # the second time we run this it should throw: - { $templateResult = New-JCPolicyGroup -TemplateID $newPolicyGroupTemplate.id } | Should -Throw - } - AfterAll { - $policyGroups = Get-JCPolicyGroup - foreach ($policyGroup in $policyGroups) { - if ($policyGroup.name -match "Pester") { - Remove-JCPolicyGroup -PolicyGroupID $policyGroup.id -Force - } - } - $policyGroupTemplates = Get-JCPolicyGroupTemplate - foreach ($policyGroupTemplate in $policyGroupTemplates) { - if ($policyGroupTemplate.name -match "Pester") { - Remove-JCPolicyGroupTemplate -id $policyGroupTemplate.id -Force - } - } - } - } -} diff --git a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Remove-JCPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Remove-JCPolicyGroup.Tests.ps1 deleted file mode 100644 index cb7c54d71..000000000 --- a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Remove-JCPolicyGroup.Tests.ps1 +++ /dev/null @@ -1,46 +0,0 @@ -Describe -Tag:('JCPolicyGroup') 'Remove-JCPolicyGroup' { - BeforeAll { - # remove pester policy groups before starting these tests - $policyGroups = Get-JCPolicyGroup - foreach ($policyGroup in $policyGroups) { - if ($policyGroup.name -match "Pester") { - Remove-JCPolicyGroup -PolicyGroupID $policyGroup.id -Force - } - } - } - It ("Removes a policy group using the 'Name' parameter") { - # create the new policy group - $randomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" - # remove it - $removedGroup = Remove-JCPolicyGroup -Name $randomName -Force - # tests: - $removedGroup.name | Should -Be $newGroup.name - } - It ("Removes a policy group using the 'id' parameter") { - # create the new policy group - $randomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" - # remove it - $removedGroup = Remove-JCPolicyGroup -PolicyGroupID $newGroup.id -Force - # tests: - $removedGroup.name | Should -Be $newGroup.name - } - It ("Removing a non-valid policy group by 'id' should throw") { - # create the new policy group - $randomName = $(Get-Random) - # remove it - $removedGroup = Remove-JCPolicyGroup -PolicyGroupID "$randomName" -Force - $removedGroup.Name | Should -Be "Not Found" - $removedGroup.Result | Should -BeNullOrEmpty - - } - It ("Removing a non-valid policy group by 'name' should throw") { - # create the new policy group - $randomName = $(Get-Random) - # remove it - $removedGroup = Remove-JCPolicyGroup -Name "$randomName" -Force - $removedGroup.Name | Should -Be "Not Found" - $removedGroup.Result | Should -BeNullOrEmpty - } -} \ No newline at end of file diff --git a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Set-JCPolicyGroup.Tests.ps1 b/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Set-JCPolicyGroup.Tests.ps1 deleted file mode 100644 index 3d90c5b57..000000000 --- a/PowerShell/JumpCloud Module/Tests/Public/Policies/PolicyGroups/Set-JCPolicyGroup.Tests.ps1 +++ /dev/null @@ -1,72 +0,0 @@ -Describe -Tag:('JCPolicyGroup') 'Set-JCPolicyGroup' { - BeforeAll { - # remove pester policy groups before starting these tests - $policyGroups = Get-JCPolicyGroup - foreach ($policyGroup in $policyGroups) { - if ($policyGroup.name -match "Pester") { - Remove-JCPolicyGroup -PolicyGroupID $policyGroup.id -Force - } - } - } - It ("Changes the name of the policy group by 'Name'") { - # create a new group - $randomName = "Pester-$(Get-Random)" - $newRandomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" -Description "Description" - # set the group - $setGroup = Set-JCPolicyGroup -Name "$randomName" -NewName $newRandomName - # test: - $setGroup.Name | Should -Be $newRandomName - $setGroup.Description | Should -Be $newGroup.description - $setGroup.Id | Should -Be $newGroup.Id - } - It ("Changes the description of the policy group by 'Name'") { - # create a new group - $randomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" -Description "Description" - # set the group - $setGroup = Set-JCPolicyGroup -Name "$randomName" -Description "NewDescription" - # test: - $setGroup.Name | Should -Be $randomName - $setGroup.Description | Should -Not -Be $newGroup.description - $setGroup.Description | Should -Be "NewDescription" - $setGroup.Id | Should -Be $newGroup.Id - } - It ("Changes the name of the policy group by 'Id'") { - # create a new group - $randomName = "Pester-$(Get-Random)" - $newRandomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" -Description "Description" - # set the group - $setGroup = Set-JCPolicyGroup -PolicyGroupID "$($newGroup.id)" -NewName "$($newRandomName)" - # test: - $setGroup.Name | Should -Be $newRandomName - $setGroup.Description | Should -Be $newGroup.description - $setGroup.Id | Should -Be $newGroup.Id - } - It ("Changes the description of the policy group by 'Id'") { - # create a new group - $randomName = "Pester-$(Get-Random)" - $newGroup = New-JCPolicyGroup -Name "$randomName" -Description "Description" - # set the group - $setGroup = Set-JCPolicyGroup -PolicyGroupID "$($newGroup.id)" -Description "NewDescription" - # test: - $setGroup.Name | Should -Be $randomName - $setGroup.Description | Should -Not -Be $newGroup.description - $setGroup.Description | Should -Be "NewDescription" - $setGroup.Id | Should -Be $newGroup.Id - } - # It ("Throws when the policy group name does not exist") - Context ("Using the pipeline parameters") { - It ("Sets a newly created policy group") { - - } - It ("Sets an existing policy group") { - - } - It ("Throws if the policy group does not exist") { - - } - } - -} \ No newline at end of file diff --git a/PowerShell/ModuleChangelog.md b/PowerShell/ModuleChangelog.md index 5fa78c0f0..e4ce6945d 100644 --- a/PowerShell/ModuleChangelog.md +++ b/PowerShell/ModuleChangelog.md @@ -1,3 +1,17 @@ +## 3.1.0 + +Release Date: March 12, 2026 + +#### RELEASE NOTES + +``` +- Adds new SDK-based cmdlets: Get-JCSystemGroup, Get-JCUserGroup, Get-JCPolicyGroup, New-JCPolicyGroup, Remove-JCPolicyGroup, Get-JCPolicyGroupMember, Set-JCPolicyGroupMember +- Adds and updates Pester tests for all new group and policy group cmdlets +- Improves test coverage and error handling for group and policy group management +- Fixes test parameter usage to match SDK model (e.g., -Id, -Filter, .Name) +- Minor bug fixes and documentation updates +``` + ## 3.0.2 Release Date: January 22, 2026 @@ -818,7 +832,7 @@ This release incorperates the "alternateEmail", "manager" and "managedAppleID" f [alternateEmail, manager, managedAppleID attributes added to module](https://github.com/TheJumpCloud/support/pull/353) ``` -SDKs should prompt to update on Connect-JConline +SDKs should prompt to update on Connect-JCOnline ``` #### IMPROVEMENTS: