@@ -45,8 +45,13 @@ function Invoke-EditTenant {
4545 }
4646
4747 # Update tenant groups
48+ $GroupTable = Get-CippTable - TableName ' TenantGroups'
49+ $StaticGroups = Get-CIPPAzDataTableEntity @GroupTable - Filter " PartitionKey eq 'TenantGroup' and GroupType ne 'dynamic'"
50+ $StaticGroupIds = $StaticGroups.RowKey
4851 $CurrentGroupMemberships = Get-CIPPAzDataTableEntity @GroupMembersTable - Filter " customerId eq '$customerId '"
4952 foreach ($Group in $tenantGroups ) {
53+ # Only allow adding to static groups; dynamic group membership is managed by the orchestrator
54+ if ($StaticGroupIds -notcontains $Group.groupId ) { continue }
5055 $GroupEntity = $CurrentGroupMemberships | Where-Object { $_.GroupId -eq $Group.groupId }
5156 if (! $GroupEntity ) {
5257 $GroupEntity = @ {
@@ -56,33 +61,41 @@ function Invoke-EditTenant {
5661 customerId = $customerId
5762 }
5863 Add-CIPPAzDataTableEntity @GroupMembersTable - Entity $GroupEntity - Force
64+ Write-LogMessage - headers $Headers - API $APINAME - tenant $Tenant.defaultDomainName - TenantId $Tenant.customerId - message " Added tenant to group '$ ( $Group.groupName ) '" - Sev ' Info'
5965 }
6066 }
6167
62- # Remove any groups that are no longer selected
63- foreach ($Group in $CurrentGroupMemberships ) {
64- if ($tenantGroups.GroupId -notcontains $Group.GroupId ) {
65- Remove-AzDataTableEntity @GroupMembersTable - Entity $Group
68+ # Remove any static groups that are no longer selected (dynamic groups are managed by the orchestrator)
69+ if ($tenantGroups ) {
70+ foreach ($Group in $CurrentGroupMemberships ) {
71+ if ($StaticGroupIds -contains $Group.GroupId -and $tenantGroups.GroupId -notcontains $Group.GroupId ) {
72+ $GroupName = ($StaticGroups | Where-Object { $_.RowKey -eq $Group.GroupId }).Name
73+ Remove-AzDataTableEntity @GroupMembersTable - Entity $Group
74+ Write-LogMessage - headers $Headers - API $APINAME - tenant $Tenant.defaultDomainName - TenantId $Tenant.customerId - message " Removed tenant from group '$GroupName '" - Sev ' Info'
75+ }
6676 }
6777 }
6878 $DomainBasedEntries = Get-CIPPAzDataTableEntity @GroupMembersTable - Filter " customerId eq '$ ( $Tenant.defaultDomainName ) '"
69- if ($DomainBasedEntries ) {
70- foreach ($Entry in $DomainBasedEntries ) {
71- try {
72- # Add corrected GUID-based entry using the actual GUID
73- $NewEntry = @ {
74- PartitionKey = ' Member'
75- RowKey = ' {0}-{1}' -f $Entry.GroupId , $Tenant.customerId
76- GroupId = $Entry.GroupId
77- customerId = $Tenant.customerId
78- }
79- Add-CIPPAzDataTableEntity @GroupMembersTable - Entity $NewEntry - Force
80- Remove-AzDataTableEntity @GroupMembersTable - Entity $Entry
81- } catch {
82- Write-Host " Error migrating entry: $ ( $_.Exception.Message ) "
79+ if ($DomainBasedEntries ) {
80+ foreach ($Entry in $DomainBasedEntries ) {
81+ try {
82+ # Add corrected GUID-based entry using the actual GUID
83+ $NewEntry = @ {
84+ PartitionKey = ' Member'
85+ RowKey = ' {0}-{1}' -f $Entry.GroupId , $Tenant.customerId
86+ GroupId = $Entry.GroupId
87+ customerId = $Tenant.customerId
8388 }
89+ Add-CIPPAzDataTableEntity @GroupMembersTable - Entity $NewEntry - Force
90+ Remove-AzDataTableEntity @GroupMembersTable - Entity $Entry
91+ } catch {
92+ Write-Host " Error migrating entry: $ ( $_.Exception.Message ) "
8493 }
8594 }
95+ }
96+
97+ # Bust the TenantGroups cache so subsequent calls reflect the changes made above
98+ Get-TenantGroups - SkipCache | Out-Null
8699
87100 $response = @ {
88101 state = ' success'
@@ -93,7 +106,7 @@ function Invoke-EditTenant {
93106 Body = $response
94107 })
95108 } catch {
96- Write-LogMessage - headers $Headers - tenant $customerId - API $APINAME - message " Edit Tenant failed. The error is: $ ( $_.Exception.Message ) " - Sev ' Error'
109+ Write-LogMessage - headers $Headers - tenant $Tenant .defaultDomainName - TenantId $Tenant . customerId - API $APINAME - message " Edit Tenant failed. The error is: $ ( $_.Exception.Message ) " - Sev ' Error'
97110 $response = @ {
98111 state = ' error'
99112 resultText = $_.Exception.Message
0 commit comments