From dd694f73f8ed815b80f103729960db7ddd2d0ff5 Mon Sep 17 00:00:00 2001 From: William-francillette Date: Fri, 9 Jun 2023 22:06:02 +0100 Subject: [PATCH 01/40] fix --- ...AdministrativeTemplatePolicyWindows10.psm1 | 102 +++++++++++------- 1 file changed, 62 insertions(+), 40 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 index fff286991e..6b4cb14949 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 @@ -216,7 +216,7 @@ function Get-TargetResource #region resource generator code Description = $getValue.Description DisplayName = $getValue.DisplayName - PolicyConfigurationIngestionType = $enumPolicyConfigurationIngestionType + #PolicyConfigurationIngestionType = $enumPolicyConfigurationIngestionType DefinitionValues = $complexDefinitionValues Id = $getValue.Id Ensure = 'Present' @@ -400,11 +400,12 @@ function Set-TargetResource $value = $presentationValue.clone() $value.add('presentation@odata.bind', "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')/presentations('$($presentationValue.presentationDefinitionId)')") $value.remove('PresentationDefinitionId') + $value.remove('PresentationDefinitionLabel') + $value.remove('id') $complexPresentationValues += $value } } $complexDefinitionValue = @{ - id = $definitionValue.Id 'definition@odata.bind' = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')" enabled = $definitionValue.Enabled presentationValues = $complexPresentationValues @@ -456,19 +457,23 @@ function Set-TargetResource #Update DefinitionValues $currentDefinitionValues = @() - if ($null -ne $currentInstance.DefinitionValues) + $currentDefinitionValuesIds = @() + if ($null -ne $currentInstance.DefinitionValues -and $currentInstance.DefinitionValues.count -gt 0 ) { [Array]$currentDefinitionValues = $currentInstance.DefinitionValues + [Array]$currentDefinitionValuesIds = $currentDefinitionValues.definition.id } $targetDefinitionValues = @() - if ($null -ne $DefinitionValues) + $targetDefinitionValuesIds = @() + if ($null -ne $DefinitionValues -and $DefinitionValues.count -gt 0) { [Array]$targetDefinitionValues = Get-M365DSCDRGComplexTypeToHashtable -ComplexObject $DefinitionValues + [Array]$targetDefinitionValuesIds = $targetDefinitionValues.Definition.Id } $comparedDefinitionValues = Compare-Object ` - -ReferenceObject ($currentDefinitionValues.Id) ` - -DifferenceObject ($targetDefinitionValues.Id) ` + -ReferenceObject ($currentDefinitionValuesIds) ` + -DifferenceObject ($targetDefinitionValuesIds) ` -IncludeEqual $definitionValuesToAdd = ($comparedDefinitionValues | Where-Object -FilterScript { $_.SideIndicator -eq '=>' }).InputObject @@ -479,7 +484,7 @@ function Set-TargetResource $formattedDefinitionValuesToAdd = @() foreach ($definitionValueId in $definitionValuesToAdd) { - $definitionValue = $targetDefinitionValues | Where-Object -FilterScript { $_.Id -eq $definitionValueId } + $definitionValue = $targetDefinitionValues | Where-Object -FilterScript { $_.Definition.Id -eq $definitionValueId } $definitionValue = Rename-M365DSCCimInstanceParameter -Properties $definitionValue $enumConfigurationType = $null if ($null -ne $definitionValue.ConfigurationType) @@ -494,11 +499,12 @@ function Set-TargetResource $value = $presentationValue.clone() $value.add('presentation@odata.bind', "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')/presentations('$($presentationValue.presentationDefinitionId)')") $value.remove('PresentationDefinitionId') + $value.remove('PresentationDefinitionLabel') + $value.remove('id') $complexPresentationValues += $value } } $complexDefinitionValue = @{ - id = $definitionValue.Id 'definition@odata.bind' = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')" enabled = $definitionValue.Enabled presentationValues = $complexPresentationValues @@ -509,7 +515,8 @@ function Set-TargetResource $formattedDefinitionValuesToUpdate = @() foreach ($definitionValueId in $definitionValuesToCheck) { - $definitionValue = $targetDefinitionValues | Where-Object -FilterScript { $_.Id -eq $definitionValueId } + $definitionValue = $targetDefinitionValues | Where-Object -FilterScript { $_.Definition.Id -eq $definitionValueId } + $currentDefinitionValue = $currentDefinitionValues | Where-Object -FilterScript { $_.definition.id -eq $definitionValueId } $definitionValue = Rename-M365DSCCimInstanceParameter -Properties $definitionValue $enumConfigurationType = $null if ($null -ne $definitionValue.ConfigurationType) @@ -521,14 +528,18 @@ function Set-TargetResource { foreach ($presentationValue in [Hashtable[]]$definitionValue.PresentationValues) { + $currentPresentationValue = $currentDefinitionValue.PresentationValues | where-object {$_.PresentationDefinitionId -eq $presentationValue.presentationDefinitionId} $value = $presentationValue.clone() $value.add('presentation@odata.bind', "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')/presentations('$($presentationValue.presentationDefinitionId)')") $value.remove('PresentationDefinitionId') + $value.remove('PresentationDefinitionLabel') + $value.remove('id') + $value.add('id',$currentPresentationValue.Id) $complexPresentationValues += $value } } $complexDefinitionValue = @{ - id = $definitionValue.Id + id = $currentDefinitionValue.Id 'definition@odata.bind' = "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')" enabled = $definitionValue.Enabled presentationValues = $complexPresentationValues @@ -536,11 +547,17 @@ function Set-TargetResource $formattedDefinitionValuesToUpdate += $complexDefinitionValue } + $formattedDefinitionValuesToRemove = @() + foreach ($definitionValueId in $definitionValuesToRemove) + { + $formattedDefinitionValuesToremove += ($currentDefinitionValues | where-object {$_.definition.id -eq $definitionValueId}).id + } + Update-DeviceConfigurationGroupPolicyDefinitionValue ` -DeviceConfigurationPolicyId $currentInstance.Id ` -DefinitionValueToAdd $formattedDefinitionValuesToAdd ` -DefinitionValueToUpdate $formattedDefinitionValuesToUpdate ` - -DefinitionValueToRemove $definitionValuesToRemove + -DefinitionValueToRemove $formattedDefinitionValuesToRemove } elseif ($Ensure -eq 'Absent' -and $currentInstance.Ensure -eq 'Present') @@ -647,36 +664,40 @@ function Test-TargetResource if ($source.getType().Name -like '*CimInstance*') { $source = Get-M365DSCDRGComplexTypeToHashtable -ComplexObject $source - #Removing Key Definition because it is Read-Only + #Removing Key Definition because it is Read-Only and ID as random if ($key -eq 'DefinitionValues') { - foreach ($definitionValue in $source.DefinitionValues) + foreach ($definitionValue in $source) { $definitionValue.remove('Definition') + $definitionValue.remove('Id') + #Removing Key presentationDefinitionLabel because it is Read-Only and ID as random + foreach ($presentationValue in $definitionValue.PresentationValues) + { + $presentationValue.remove('presentationDefinitionLabel') + $presentationValue.remove('Id') + } } - foreach ($definitionValue in $target.DefinitionValues) + foreach ($definitionValue in $target) { $definitionValue.remove('Definition') + $definitionValue.remove('Id') + #Removing Key presentationDefinitionLabel because it is Read-Only and ID as random + foreach ($presentationValue in $definitionValue.PresentationValues) + { + $presentationValue.remove('presentationDefinitionLabel') + $presentationValue.remove('Id') + } } - } - - #Removing Key Definition because it is Read-Only - if ($key -eq 'PresentationValues') - { - foreach ($presentationValue in $source.PresentationValues) - { - $presentationValue.remove('presentationDefinitionLabel') - } - foreach ($presentationValue in $target.PresentationValues) - { - $presentationValue.remove('presentationDefinitionLabel') - } + #write-verbose($source|convertto-json -depth 100) + #write-verbose($target|convertto-json -depth 100) } $testResult = Compare-M365DSCComplexObject ` -Source ($source) ` -Target ($target) + write-verbose("$key eq $testResult") if (-Not $testResult) { $testResult = $false @@ -692,6 +713,11 @@ function Test-TargetResource $ValuesToCheck.Remove('ApplicationId') | Out-Null $ValuesToCheck.Remove('TenantId') | Out-Null $ValuesToCheck.Remove('ApplicationSecret') | Out-Null + $ValuesToCheck.Remove('CertificateThumbprint') | Out-Null + $ValuesToCheck.Remove('ManagedIdentity') | Out-Null + $ValuesToCheck.Remove('Verbose') | Out-Null + $ValuesToCheck.Remove('Ensure') | Out-Null + $ValuesToCheck.Remove('PolicyConfigurationIngestionType') | Out-Null Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)" Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $ValuesToCheck)" @@ -953,7 +979,7 @@ function Update-DeviceConfigurationPolicyAssignment } $body = @{'assignments' = $deviceManagementPolicyAssignments } | ConvertTo-Json -Depth 20 #write-verbose -Message $body - Invoke-MgGraphRequest -Method POST -Uri $Uri -Body $body -ErrorAction Stop + Invoke-MgGraphRequest -Method POST -Uri $Uri -Body $body -ErrorAction Stop 4> Out-Null } catch { @@ -1004,7 +1030,7 @@ function Update-DeviceConfigurationGroupPolicyDefinitionValue 'deletedIds' = $DefinitionValueToRemoveIds } #Write-Verbose -Message ($body | ConvertTo-Json -Depth 20) - Invoke-MgGraphRequest -Method POST -Uri $Uri -Body ($body | ConvertTo-Json -Depth 20) -ErrorAction Stop + Invoke-MgGraphRequest -Method POST -Uri $Uri -Body ($body | ConvertTo-Json -Depth 20) -ErrorAction Stop 4> Out-Null } catch { @@ -1013,7 +1039,7 @@ function Update-DeviceConfigurationGroupPolicyDefinitionValue -Source $($MyInvocation.MyCommand.Source) -TenantId $TenantId -Credential $Credential - + exit return $null } } @@ -1547,7 +1573,7 @@ function Compare-M365DSCComplexObject { $targetValue = 'Target is null' } - #Write-Verbose -Message "Configuration drift - Complex object: {$sourceValue$targetValue}" + Write-Verbose -Message "Configuration drift - Complex object: {$sourceValue$targetValue}" return $false } @@ -1555,7 +1581,7 @@ function Compare-M365DSCComplexObject { if ($source.count -ne $target.count) { - #Write-Verbose -Message "Configuration drift - The complex array have different number of items: Source {$($source.count)} Target {$($target.count)}" + Write-Verbose -Message "Configuration drift - The complex array have different number of items: Source {$($source.count)} Target {$($target.count)}" return $false } if ($source.count -eq 0) @@ -1565,7 +1591,6 @@ function Compare-M365DSCComplexObject foreach ($item in $Source) { - $hashSource = Get-M365DSCDRGComplexTypeToHashtable -ComplexObject $item foreach ($targetItem in $Target) { @@ -1611,14 +1636,14 @@ function Compare-M365DSCComplexObject $targetValue = 'null' } - #Write-Verbose -Message "Configuration drift - key: $key Source {$sourceValue} Target {$targetValue}" + Write-Verbose -Message "Configuration drift - key: $key Source {$sourceValue} Target {$targetValue}" return $false } #Both keys aren't null or empty if (($null -ne $Source.$key) -and ($null -ne $Target.$tkey)) { - if ($Source.$key.getType().FullName -like '*CimInstance*' -or $Source.$key.getType().FullName -like '*hashtable*' ) + if ($Source.$key.getType().FullName -like '*CimInstance*' -or $Source.$key.getType().FullName -like '*hashtable*') { #Recursive call for complex object $compareResult = Compare-M365DSCComplexObject ` @@ -1627,8 +1652,7 @@ function Compare-M365DSCComplexObject if (-not $compareResult) { - - #Write-Verbose -Message "Configuration drift - complex object key: $key Source {$sourceValue} Target {$targetValue}" + Write-Verbose -Message "Configuration drift - complex object key: $key Source {$sourceValue} Target {$targetValue}" return $false } } @@ -1664,10 +1688,8 @@ function Compare-M365DSCComplexObject } } } - return $true -} -function Convert-M365DSCDRGComplexTypeToHashtable +}function Convert-M365DSCDRGComplexTypeToHashtable { [CmdletBinding()] [OutputType([hashtable], [hashtable[]])] From dfd4a5d8e8b267b56f0f941743b2df5d80260633 Mon Sep 17 00:00:00 2001 From: William-francillette Date: Fri, 9 Jun 2023 22:17:55 +0100 Subject: [PATCH 02/40] clean-up --- ...AdministrativeTemplatePolicyWindows10.psm1 | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 index 6b4cb14949..29bb312fbb 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 @@ -689,15 +689,12 @@ function Test-TargetResource $presentationValue.remove('Id') } } - #write-verbose($source|convertto-json -depth 100) - #write-verbose($target|convertto-json -depth 100) } $testResult = Compare-M365DSCComplexObject ` -Source ($source) ` -Target ($target) - write-verbose("$key eq $testResult") if (-Not $testResult) { $testResult = $false @@ -1039,7 +1036,7 @@ function Update-DeviceConfigurationGroupPolicyDefinitionValue -Source $($MyInvocation.MyCommand.Source) -TenantId $TenantId -Credential $Credential - exit + return $null } } @@ -1573,7 +1570,7 @@ function Compare-M365DSCComplexObject { $targetValue = 'Target is null' } - Write-Verbose -Message "Configuration drift - Complex object: {$sourceValue$targetValue}" + #Write-Verbose -Message "Configuration drift - Complex object: {$sourceValue$targetValue}" return $false } @@ -1581,7 +1578,7 @@ function Compare-M365DSCComplexObject { if ($source.count -ne $target.count) { - Write-Verbose -Message "Configuration drift - The complex array have different number of items: Source {$($source.count)} Target {$($target.count)}" + #Write-Verbose -Message "Configuration drift - The complex array have different number of items: Source {$($source.count)} Target {$($target.count)}" return $false } if ($source.count -eq 0) @@ -1606,7 +1603,7 @@ function Compare-M365DSCComplexObject if (-not $compareResult) { - Write-Verbose -Message 'Configuration drift - The complex array items are not identical' + #Write-Verbose -Message 'Configuration drift - The complex array items are not identical' return $false } } @@ -1636,7 +1633,7 @@ function Compare-M365DSCComplexObject $targetValue = 'null' } - Write-Verbose -Message "Configuration drift - key: $key Source {$sourceValue} Target {$targetValue}" + #Write-Verbose -Message "Configuration drift - key: $key Source {$sourceValue} Target {$targetValue}" return $false } @@ -1652,7 +1649,7 @@ function Compare-M365DSCComplexObject if (-not $compareResult) { - Write-Verbose -Message "Configuration drift - complex object key: $key Source {$sourceValue} Target {$targetValue}" + #Write-Verbose -Message "Configuration drift - complex object key: $key Source {$sourceValue} Target {$targetValue}" return $false } } @@ -1682,14 +1679,16 @@ function Compare-M365DSCComplexObject if ($null -ne $compareResult) { - Write-Verbose -Message "Configuration drift - simple object key: $key Source {$sourceValue} Target {$targetValue}" + #Write-Verbose -Message "Configuration drift - simple object key: $key Source {$sourceValue} Target {$targetValue}" return $false } } } } return $true -}function Convert-M365DSCDRGComplexTypeToHashtable +} + +function Convert-M365DSCDRGComplexTypeToHashtable { [CmdletBinding()] [OutputType([hashtable], [hashtable[]])] From 68cfe53b73fb76510794f912a3c168411da471eb Mon Sep 17 00:00:00 2001 From: William-francillette Date: Fri, 9 Jun 2023 22:19:05 +0100 Subject: [PATCH 03/40] format --- ...AdministrativeTemplatePolicyWindows10.psm1 | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 index 29bb312fbb..e5e8f99617 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10/MSFT_IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10.psm1 @@ -214,18 +214,18 @@ function Get-TargetResource $results = @{ #region resource generator code - Description = $getValue.Description - DisplayName = $getValue.DisplayName + Description = $getValue.Description + DisplayName = $getValue.DisplayName #PolicyConfigurationIngestionType = $enumPolicyConfigurationIngestionType - DefinitionValues = $complexDefinitionValues - Id = $getValue.Id - Ensure = 'Present' - Credential = $Credential - ApplicationId = $ApplicationId - TenantId = $TenantId - ApplicationSecret = $ApplicationSecret - CertificateThumbprint = $CertificateThumbprint - Managedidentity = $ManagedIdentity.IsPresent + DefinitionValues = $complexDefinitionValues + Id = $getValue.Id + Ensure = 'Present' + Credential = $Credential + ApplicationId = $ApplicationId + TenantId = $TenantId + ApplicationSecret = $ApplicationSecret + CertificateThumbprint = $CertificateThumbprint + Managedidentity = $ManagedIdentity.IsPresent #endregion } $assignmentsValues = Get-MgDeviceManagementGroupPolicyConfigurationAssignment -GroupPolicyConfigurationId $Id @@ -528,13 +528,13 @@ function Set-TargetResource { foreach ($presentationValue in [Hashtable[]]$definitionValue.PresentationValues) { - $currentPresentationValue = $currentDefinitionValue.PresentationValues | where-object {$_.PresentationDefinitionId -eq $presentationValue.presentationDefinitionId} + $currentPresentationValue = $currentDefinitionValue.PresentationValues | Where-Object { $_.PresentationDefinitionId -eq $presentationValue.presentationDefinitionId } $value = $presentationValue.clone() $value.add('presentation@odata.bind', "https://graph.microsoft.com/beta/deviceManagement/groupPolicyDefinitions('$($definitionValue.Definition.Id)')/presentations('$($presentationValue.presentationDefinitionId)')") $value.remove('PresentationDefinitionId') $value.remove('PresentationDefinitionLabel') $value.remove('id') - $value.add('id',$currentPresentationValue.Id) + $value.add('id', $currentPresentationValue.Id) $complexPresentationValues += $value } } @@ -550,7 +550,7 @@ function Set-TargetResource $formattedDefinitionValuesToRemove = @() foreach ($definitionValueId in $definitionValuesToRemove) { - $formattedDefinitionValuesToremove += ($currentDefinitionValues | where-object {$_.definition.id -eq $definitionValueId}).id + $formattedDefinitionValuesToremove += ($currentDefinitionValues | Where-Object { $_.definition.id -eq $definitionValueId }).id } Update-DeviceConfigurationGroupPolicyDefinitionValue ` @@ -907,7 +907,7 @@ function Export-TargetResource catch { if ($_.Exception -like '*401*' -or $_.ErrorDetails.Message -like "*`"ErrorCode`":`"Forbidden`"*" -or ` - $_.Exception -like "*Message: Location header not present in redirection response.*") + $_.Exception -like '*Message: Location header not present in redirection response.*') { Write-Host "`r`n $($Global:M365DSCEmojiYellowCircle) The current tenant is not registered for Intune." } @@ -1371,7 +1371,7 @@ function Get-M365DSCDRGComplexTypeToString -CIMInstanceName $hashPropertyType ` -IndentLevel $IndentLevel ` -ComplexTypeMapping $ComplexTypeMapping ` - -IsArray:$true + -isArray:$true if ([string]::IsNullOrWhiteSpace($nestedPropertyString)) { $nestedPropertyString = "@()`r`n" From bd509d23136287ae754a8817cd5214a36060dbf7 Mon Sep 17 00:00:00 2001 From: William-francillette Date: Mon, 12 Jun 2023 08:55:10 +0100 Subject: [PATCH 04/40] changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6c6367f16..1c00adbcab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ FIXES [#3345](https://github.com/microsoft/Microsoft365DSC/issues/3345) * DEPENDENCIES * Updated Microsoft.Graph dependencies to version 1.28.0. +* IntuneDeviceConfigurationAdministrativeTemplatePolicyWindows10 + * Fixes an issue with Set-TargetResource when an array is empty + * Fixes presentationValue updates + FIXES [#3355](https://github.com/microsoft/Microsoft365DSC/issues/3355) # 1.23.607.1 From cbe85979ed441225b38028ab78eaffe0314eef35 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Thu, 22 Jun 2023 17:08:09 -0400 Subject: [PATCH 05/40] Updates --- .../MSFT_O365OrgSettings.psm1 | 505 +++++++++++++++++- .../MSFT_O365OrgSettings.schema.mof | 15 + .../MSFT_O365OrgSettings/settings.json | 48 ++ 3 files changed, 549 insertions(+), 19 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 index a1599c4ae3..aba934e135 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 @@ -13,6 +13,54 @@ function Get-TargetResource [System.Boolean] $CortanaEnabled, + [Parameter()] + [System.Boolean] + $AppsAndServicesIsOfficeStoreEnabled, + + [Parameter()] + [System.Boolean] + $AppsAndServicesIsAppAndServicesTrialEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalSendFormEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareCollaborationEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareResultEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareTemplateEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsRecordIdentityByDefaultEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsBingImageSearchEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsInOrgFormsPhishingScanEnabled, + [Parameter()] [System.Boolean] $M365WebEnableUsersToOpenFilesFrom3PStorage, @@ -25,6 +73,18 @@ function Get-TargetResource [System.Boolean] $MicrosoftVivaBriefingEmail, + [Parameter()] + [System.Boolean] + $ToDoIsPushNotificationEnabled, + + [Parameter()] + [System.Boolean] + $ToDoIsExternalJoinEnabled, + + [Parameter()] + [System.Boolean] + $ToDoIsExternalShareEnabled, + [Parameter()] [System.Boolean] $VivaInsightsWebExperience, @@ -122,8 +182,10 @@ function Get-TargetResource $OfficeOnlineId = 'c1f33bc0-bdb4-4248-ba9b-096807ddb43e' $M365WebEnableUsersToOpenFilesFrom3PStorageValue = Get-MgServicePrincipal -Filter "appId eq '$OfficeOnlineId'" -Property 'AccountEnabled' + # Planner iCal settings $PlannerSettings = Get-M365DSCO365OrgSettingsPlannerConfig + # Cortana settings $CortanaId = '0a0a29f9-0a25-49c7-94bf-c53c3f8fa69d' $CortanaEnabledValue = Get-MgServicePrincipal -Filter "appId eq '$CortanaId'" -Property 'AccountEnabled' @@ -152,8 +214,10 @@ function Get-TargetResource Write-Verbose -Message $_ } + # Reports Display Settings $AdminCenterReportDisplayConcealedNamesValue = Get-M365DSCOrgSettingsAdminCenterReport + # Installation Options $installationOptions = Get-M365DSCOrgSettingsInstallationOptions -AuthenticationOption $ConnectionModeTasks $appsForWindowsValue = @() foreach ($key in $installationOptions.appsForWindows.Keys) @@ -172,26 +236,53 @@ function Get-TargetResource } } + # Forms + $FormsSettings = Get-M365DSCOrgSettingsForms + + # DynamicsCustomerVoice + $DynamicCustomerVoiceSettings = Get-M365DSCOrgSettingsDynamicsCustomerVoice + + # Apps and Services + $AppsAndServicesSettings = Get-M365DSCOrgSettingsAppsAndServices + + # To do + $ToDoSettings = Get-M365DSCOrgSettingsToDo + return @{ - IsSingleInstance = 'Yes' - CortanaEnabled = $CortanaEnabledValue.AccountEnabled - PlannerAllowCalendarSharing = $PlannerSettings.allowCalendarSharing - AdminCenterReportDisplayConcealedNames = $AdminCenterReportDisplayConcealedNamesValue.displayConcealedNames - InstallationOptionsUpdateChannel = $installationOptions.updateChannel - InstallationOptionsAppsForWindows = $appsForWindowsValue - InstallationOptionsAppsForMac = $appsForMacValue - MicrosoftVivaBriefingEmail = $vivaBriefingEmailValue - M365WebEnableUsersToOpenFilesFrom3PStorage = $M365WebEnableUsersToOpenFilesFrom3PStorageValue.AccountEnabled - VivaInsightsWebExperience = $currentVivaInsightsSettings.IsDashboardEnabled - VivaInsightsDigestEmail = $currentVivaInsightsSettings.IsDigestEmailEnabled - VivaInsightsOutlookAddInAndInlineSuggestions = $currentVivaInsightsSettings.IsAddInEnabled - VivaInsightsScheduleSendSuggestions = $currentVivaInsightsSettings.IsScheduleSendEnabled - Credential = $Credential - ApplicationId = $ApplicationId - TenantId = $TenantId - ApplicationSecret = $ApplicationSecret - CertificateThumbprint = $CertificateThumbprint - Managedidentity = $ManagedIdentity.IsPresent + IsSingleInstance = 'Yes' + AdminCenterReportDisplayConcealedNames = $AdminCenterReportDisplayConcealedNamesValue.displayConcealedNames + AppsAndServicesIsOfficeStoreEnabled = $AppsAndServicesSettings.isOfficeStoreEnabled + AppsAndServicesIsAppAndServicesTrialEnabled = $AppsAndServicesSettings.IsAppAndServicesTrialEnabled + CortanaEnabled = $CortanaEnabledValue.AccountEnabled + DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled = $DynamicCustomerVoiceSettings.isRestrictedSurveyAccessEnabled + DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled = $DynamicCustomerVoiceSettings.isRecordIdentityByDefaultEnabled + DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled = $DynamicCustomerVoiceSettings.isInOrgFormsPhishingScanEnabled + FormsIsExternalSendFormEnabled = $FormsSettings.isExternalSendFormEnabled + FormsIsExternalShareCollaborationEnabled = $FormsSettings.isExternalShareCollaborationEnabled + FormsIsExternalShareResultEnabled = $FormsSettings.isExternalShareResultEnabled + FormsIsExternalShareTemplateEnabled = $FormsSettings.isExternalShareTemplateEnabled + FormsIsRecordIdentityByDefaultEnabled = $FormsSettings.isRecordIdentityByDefaultEnabled + FormsIsBingImageSearchEnabled = $FormsSettings.isBingImageSearchEnabled + FormsIsInOrgFormsPhishingScanEnabled = $FormsSettings.isInOrgFormsPhishingScanEnabled + InstallationOptionsUpdateChannel = $installationOptions.updateChannel + InstallationOptionsAppsForWindows = $appsForWindowsValue + InstallationOptionsAppsForMac = $appsForMacValue + MicrosoftVivaBriefingEmail = $vivaBriefingEmailValue + M365WebEnableUsersToOpenFilesFrom3PStorage = $M365WebEnableUsersToOpenFilesFrom3PStorageValue.AccountEnabled + PlannerAllowCalendarSharing = $PlannerSettings.allowCalendarSharing + ToDoIsPushNotificationEnabled = $ToDoSettings.IsPushNotificationEnabled + ToDoIsExternalJoinEnabled = $ToDoSettings.IsExternalJoinEnabled + ToDoIsExternalShareEnabled = $ToDoSettings.IsExternalShareEnabled + VivaInsightsDigestEmail = $currentVivaInsightsSettings.IsDigestEmailEnabled + VivaInsightsOutlookAddInAndInlineSuggestions = $currentVivaInsightsSettings.IsAddInEnabled + VivaInsightsScheduleSendSuggestions = $currentVivaInsightsSettings.IsScheduleSendEnabled + VivaInsightsWebExperience = $currentVivaInsightsSettings.IsDashboardEnabled + Credential = $Credential + ApplicationId = $ApplicationId + TenantId = $TenantId + ApplicationSecret = $ApplicationSecret + CertificateThumbprint = $CertificateThumbprint + Managedidentity = $ManagedIdentity.IsPresent } } catch @@ -220,6 +311,54 @@ function Set-TargetResource [System.Boolean] $CortanaEnabled, + [Parameter()] + [System.Boolean] + $AppsAndServicesIsOfficeStoreEnabled, + + [Parameter()] + [System.Boolean] + $AppsAndServicesIsAppAndServicesTrialEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalSendFormEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareCollaborationEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareResultEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareTemplateEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsRecordIdentityByDefaultEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsBingImageSearchEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsInOrgFormsPhishingScanEnabled, + [Parameter()] [System.Boolean] $M365WebEnableUsersToOpenFilesFrom3PStorage, @@ -232,6 +371,18 @@ function Set-TargetResource [System.Boolean] $MicrosoftVivaBriefingEmail, + [Parameter()] + [System.Boolean] + $ToDoIsPushNotificationEnabled, + + [Parameter()] + [System.Boolean] + $ToDoIsExternalJoinEnabled, + + [Parameter()] + [System.Boolean] + $ToDoIsExternalShareEnabled, + [Parameter()] [System.Boolean] $VivaInsightsWebExperience, @@ -357,6 +508,7 @@ function Set-TargetResource Set-DefaultTenantMyAnalyticsFeatureConfig -Feature "Add-In" -IsEnabled $VivaInsightsOutlookAddInAndInlineSuggestions | Out-Null Set-DefaultTenantMyAnalyticsFeatureConfig -Feature "Scheduled-send" -IsEnabled $VivaInsightsScheduleSendSuggestions | Out-Null + # Reports Display Names $AdminCenterReportDisplayConcealedNamesEnabled = Get-M365DSCOrgSettingsAdminCenterReport Write-Verbose "$($AdminCenterReportDisplayConcealedNamesEnabled.displayConcealedNames) = $AdminCenterReportDisplayConcealedNames" if ($AdminCenterReportDisplayConcealedNames -ne $AdminCenterReportDisplayConcealedNamesEnabled.displayConcealedNames) @@ -365,6 +517,7 @@ function Set-TargetResource Update-M365DSCOrgSettingsAdminCenterReport -DisplayConcealedNames $AdminCenterReportDisplayConcealedNames } + # Apps Installation if ($PSBoundParameters.ContainsKey("InstallationOptionsAppsForWindows") -or $PSBoundParameters.ContainsKey("InstallationOptionsAppsForMac")) { $ConnectionModeTasks = New-M365DSCConnection -Workload 'Tasks' ` @@ -425,6 +578,94 @@ function Set-TargetResource -AuthenticationOption $ConnectionModeTasks } } + + # Forms + $FormsParametersToUpdate = @{} + if ($FormsIsExternalSendFormEnabled -ne $currentValues.FormsIsExternalSendFormEnabled) + { + $FormsParametersToUpdate.Add('isExternalSendFormEnabled', $FormsIsExternalSendFormEnabled) + } + if ($FormsIsExternalShareCollaborationEnabled -ne $currentValues.FormsIsExternalShareCollaborationEnabled) + { + $FormsParametersToUpdate.Add('isExternalShareCollaborationEnabled', $FormsIsExternalShareCollaborationEnabled) + } + if ($FormsIsExternalShareResultEnabled -ne $currentValues.FormsIsExternalShareResultEnabled) + { + $FormsParametersToUpdate.Add('isExternalShareResultEnabled', $FormsIsExternalShareResultEnabled) + } + if ($FormsIsExternalShareTemplateEnabled -ne $currentValues.FormsIsExternalShareTemplateEnabled) + { + $FormsParametersToUpdate.Add('isExternalShareTemplateEnabled', $FormsIsExternalShareTemplateEnabled) + } + if ($FormsIsRecordIdentityByDefaultEnabled -ne $currentValues.FormsIsRecordIdentityByDefaultEnabled) + { + $FormsParametersToUpdate.Add('isRecordIdentityByDefaultEnabled', $FormsIsRecordIdentityByDefaultEnabled) + } + if ($FormsIsBingImageSearchEnabled -ne $currentValues.FormsIsBingImageSearchEnabled) + { + $FormsParametersToUpdate.Add('isBingImageSearchEnabled', $FormsIsBingImageSearchEnabled) + } + if ($FormsIsInOrgFormsPhishingScanEnabled -ne $currentValues.FormsIsInOrgFormsPhishingScanEnabled) + { + $FormsParametersToUpdate.Add('isInOrgFormsPhishingScanEnabled', $FormsIsInOrgFormsPhishingScanEnabled) + } + if ($FormsParametersToUpdate.Keys.Count -gt 0) + { + Update-M365DSCOrgSettingsForms -Options $FormsParametersToUpdate + } + + # Dynamics Customer Voice Settings + $DynamicsCustomerVoiceParametersToUpdate = @{} + if ($DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled -ne $currentValues.DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled) + { + $DynamicsCustomerVoiceParametersToUpdate.Add('isRestrictedSurveyAccessEnabled', $currentValues.DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled) + } + if ($DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled -ne $currentValues.DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled) + { + $DynamicsCustomerVoiceParametersToUpdate.Add('isRecordIdentityByDefaultEnabled', $currentValues.DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled) + } + if ($DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled -ne $currentValues.DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled) + { + $DynamicsCustomerVoiceParametersToUpdate.Add('isInOrgFormsPhishingScanEnabled', $currentValues.DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled) + } + if ($DynamicsCustomerVoiceParametersToUpdate.Keys.Count -gt 0) + { + Update-M365DSCOrgSettingsDynamicsCustomerVoice -Options $DynamicsCustomerVoiceParametersToUpdate + } + + # Apps And Services + $AppsAndServicesParametersToUpdate = @{} + if ($AppsAndServicesIsOfficeStoreEnabled -ne $currentValues.AppsAndServicesIsOfficeStoreEnabled) + { + $AppsAndServicesParametersToUpdate.Add('isOfficeStoreEnabled', $currentValues.AppsAndServicesIsOfficeStoreEnabled) + } + if ($AppsAndServicesIsAppAndServicesTrialEnabled -ne $currentValues.AppsAndServicesIsAppAndServicesTrialEnabled) + { + $AppsAndServicesParametersToUpdate.Add('isAppAndServicesTrialEnabled', $currentValues.AppsAndServicesIsAppAndServicesTrialEnabled) + } + if ($AppsAndServicesParametersToUpdate.Keys.Count -gt 0) + { + Update-M365DSCOrgSettingsAppsAndServices -Options $AppsAndServicesParametersToUpdate + } + + # To Do + $ToDoParametersToUpdate = @{} + if ($ToDoIsPushNotificationEnabled -ne $currentValues.ToDoIsPushNotificationEnabled) + { + $ToDoParametersToUpdate.Add('isPushNotificationEnabled', $currentValues.ToDoIsPushNotificationEnabled) + } + if ($ToDoIsExternalJoinEnabled -ne $currentValues.ToDoIsExternalJoinEnabled) + { + $ToDoParametersToUpdate.Add('isExternalJoinEnabled', $currentValues.ToDoIsExternalJoinEnabled) + } + if ($ToDoIsExternalShareEnabled -ne $currentValues.ToDoIsExternalShareEnabled) + { + $ToDoParametersToUpdate.Add('isExternalShareEnabled', $currentValues.ToDoIsExternalShareEnabled) + } + if ($ToDoParametersToUpdate.Keys.Count -gt 0) + { + Update-M365DSCOrgSettingsToDo -Options $ToDoParametersToUpdate + } } function Test-TargetResource @@ -442,6 +683,54 @@ function Test-TargetResource [System.Boolean] $CortanaEnabled, + [Parameter()] + [System.Boolean] + $AppsAndServicesIsOfficeStoreEnabled, + + [Parameter()] + [System.Boolean] + $AppsAndServicesIsAppAndServicesTrialEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled, + + [Parameter()] + [System.Boolean] + $DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalSendFormEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareCollaborationEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareResultEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsExternalShareTemplateEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsRecordIdentityByDefaultEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsBingImageSearchEnabled, + + [Parameter()] + [System.Boolean] + $FormsIsInOrgFormsPhishingScanEnabled, + [Parameter()] [System.Boolean] $M365WebEnableUsersToOpenFilesFrom3PStorage, @@ -454,6 +743,18 @@ function Test-TargetResource [System.Boolean] $MicrosoftVivaBriefingEmail, + [Parameter()] + [System.Boolean] + $ToDoIsPushNotificationEnabled, + + [Parameter()] + [System.Boolean] + $ToDoIsExternalJoinEnabled, + + [Parameter()] + [System.Boolean] + $ToDoIsExternalShareEnabled, + [Parameter()] [System.Boolean] $VivaInsightsWebExperience, @@ -765,4 +1066,170 @@ function Update-M365DSCOrgSettingsInstallationOptions } } +function Get-M365DSCOrgSettingsForms +{ + [CmdletBinding()] + [OutputType([System.Collections.Hashtable])] + param() + + $url = 'https://graph.microsoft.com/beta/admin/forms/settings' + #$results = Invoke-MgGraphRequest -Method GET -Uri $url + $results = @{ + isExternalSendFormEnabled = $true + isExternalShareCollaborationEnabled = $true + isExternalShareResultEnabled = $false + isExternalShareTemplateEnabled = $false + isRecordIdentityByDefaultEnabled = $false + isBingImageSearchEnabled = $false + isInOrgFormsPhishingScanEnabled = $false + } + return $results +} + +function Update-M365DSCOrgSettingsForms +{ + [CmdletBinding()] + [OutputType([Void])] + param( + [Parameter(Mandatory = $true)] + [System.Collections.Hashtable] + $Options + ) + + try + { + $url = 'https://graph.microsoft.com/beta/admin/forms/settings' + #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + } + catch + { + New-M365DSCLogEntry -Message 'Error updating O365OrgSettings Forms Settings' ` + -Exception $_ ` + -Source $($MyInvocation.MyCommand.Source) ` + -TenantId $TenantId ` + -Credential $Credential + } +} + +function Get-M365DSCOrgSettingsDynamicsCustomerVoice +{ + [CmdletBinding()] + [OutputType([System.Collections.Hashtable])] + param() + + $url = 'https://graph.microsoft.com/beta/admin/dynamics/customerVoice' + #$results = Invoke-MgGraphRequest -Method GET -Uri $url + $results = @{ + isRestrictedSurveyAccessEnabled = $true + isRecordIdentityByDefaultEnabled = $false + isInOrgFormsPhishingScanEnabled = $false + } + return $results +} + +function Update-M365DSCOrgSettingsDynamicsCustomerVoice +{ + [CmdletBinding()] + [OutputType([Void])] + param( + [Parameter(Mandatory = $true)] + [System.Collections.Hashtable] + $Options + ) + + try + { + $url = 'https://graph.microsoft.com/beta/admin/dynamics/customerVoice' + #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + } + catch + { + New-M365DSCLogEntry -Message 'Error updating O365OrgSettings Dynamics Customer Voice Settings' ` + -Exception $_ ` + -Source $($MyInvocation.MyCommand.Source) ` + -TenantId $TenantId ` + -Credential $Credential + } +} + +function Get-M365DSCOrgSettingsAppsAndServices +{ + [CmdletBinding()] + [OutputType([System.Collections.Hashtable])] + param() + + $url = 'https://graph.microsoft.com/beta/admin/appsAndServices/settings' + #$results = Invoke-MgGraphRequest -Method GET -Uri $url + $results = @{ + isOfficeStoreEnabled = $true + isAppAndServicesTrialEnabled = $false + } + return $results +} + +function Update-M365DSCOrgSettingsAppsAndServices +{ + [CmdletBinding()] + [OutputType([Void])] + param( + [Parameter(Mandatory = $true)] + [System.Collections.Hashtable] + $Options + ) + + try + { + $url = 'https://graph.microsoft.com/beta/admin/appsAndServices/settings' + #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + } + catch + { + New-M365DSCLogEntry -Message 'Error updating O365OrgSettings Apps and Services Settings' ` + -Exception $_ ` + -Source $($MyInvocation.MyCommand.Source) ` + -TenantId $TenantId ` + -Credential $Credential + } +} +function Get-M365DSCOrgSettingsToDo +{ + [CmdletBinding()] + [OutputType([System.Collections.Hashtable])] + param() + + $url = 'https://graph.microsoft.com/beta/admin/todo/settings' + #$results = Invoke-MgGraphRequest -Method GET -Uri $url + $results = @{ + isPushNotificationEnabled = $true + isExternalJoinEnabled = $true + isExternalShareEnabled = $false + } + return $results +} + +function Update-M365DSCOrgSettingsToDo +{ + [CmdletBinding()] + [OutputType([Void])] + param( + [Parameter(Mandatory = $true)] + [System.Collections.Hashtable] + $Options + ) + + try + { + $url = 'https://graph.microsoft.com/beta/admin/todo/settings' + #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + } + catch + { + New-M365DSCLogEntry -Message 'Error updating O365OrgSettings To Do Settings' ` + -Exception $_ ` + -Source $($MyInvocation.MyCommand.Source) ` + -TenantId $TenantId ` + -Credential $Credential + } +} + Export-ModuleMember -Function *-TargetResource diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.schema.mof b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.schema.mof index d49b6d575c..024b86dc3a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.schema.mof +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.schema.mof @@ -2,7 +2,19 @@ class MSFT_O365OrgSettings : OMI_BaseResource { [Key, Description("Specifies the resource is a single instance, the value must be 'Yes'"), ValueMap{"Yes"}, Values{"Yes"}] String IsSingleInstance; + [Write, Description("Allow people in your organization to start trial subscriptions for apps and services that support trials. Admins manage licenses for these trials in the same way as other licenses in your organization. Only admins can upgrade these trials to paid subscriptions, so they won’t affect your billing.")] Boolean AppsAndServicesIsAppAndServicesTrialEnabled; + [Write, Description("Allow people in your organization to access the Office Store using their work account. The Office Store provides access to apps that aren't curated or managed by Microsoft.")] Boolean AppsAndServicesIsOfficeStoreEnabled; [Write, Description("Allow Cortana in windows 10 (version 1909 and earlier), and the Cortana app on iOS and Android, to access Microsoft-hosted data on behalf of people in your organization.")] Boolean CortanaEnabled; + [Write, Description("Automatically block any internal surveys that request confidential information. Admins will be notified in the Message Center when a survey is blocked.")] Boolean DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled; + [Write, Description("Capture the first and last names of respondents in your organization that complete a survey. You can still change this for individual surveys.")] Boolean DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled; + [Write, Description("Capture the first and last names of respondents in your organization that complete a survey. You can still change this for individual surveys.")] Boolean DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled; + [Write, Description("Allow YouTube and Bing.")] Boolean FormsIsBingImageSearchEnabled; + [Write, Description("External Sharing - Send a link to the form and collect responses.")] Boolean FormsIsExternalSendFormEnabled; + [Write, Description("External Sharing - Share to collaborate on the form layout and structure.")] Boolean FormsIsExternalShareCollaborationEnabled; + [Write, Description("External Sharing - Share form result summary.")] Boolean FormsIsExternalShareResultEnabled; + [Write, Description("External Sharing - Share the form as a template that can be duplicated.")] Boolean FormsIsExternalShareTemplateEnabled; + [Write, Description("Phishing protection.")] Boolean FormsIsInOrgFormsPhishingScanEnabled; + [Write, Description("Record names of people in your org.")] Boolean FormsIsRecordIdentityByDefaultEnabled; [Write, Description("Let users open files stored in third-party storage services in Microsoft 365 on the Web.")] Boolean M365WebEnableUsersToOpenFilesFrom3PStorage; [Write, Description("Specifies whether or not to let people in your organization receive Briefing email from Microsoft Viva.")] Boolean MicrosoftVivaBriefingEmail; [Write, Description("Specifies whether or not to allow users to have access to use the Viva Insights web experience.")] Boolean VivaInsightsWebExperience; @@ -10,6 +22,9 @@ class MSFT_O365OrgSettings : OMI_BaseResource [Write, Description("Specifies whether or not to allow users to have access to use the Viva Insights Outlook add-in and inline suggestions.")] Boolean VivaInsightsOutlookAddInAndInlineSuggestions; [Write, Description("Specifies whether or not to allow users to have access to use the Viva Insights schedule send suggestions feature.")] Boolean VivaInsightsScheduleSendSuggestions; [Write, Description("Allow Planner users to publish their plans and assigned tasks to Outlook or other calendars through iCalendar feeds.")] Boolean PlannerAllowCalendarSharing; + [Write, Description("To Do - Allow external users to join.")] Boolean ToDoIsExternalJoinEnabled; + [Write, Description("To Do - Allow sharing with external users.")] Boolean ToDoIsExternalShareEnabled; + [Write, Description("To Do - Allow your users to receive push notifications.")] Boolean ToDoIsPushNotificationEnabled; [Write, Description("Controls whether or not the Admin Center reports will conceale user, group and site names.")] Boolean AdminCenterReportDisplayConcealedNames; [Write, Description("Defines how often you want your users to get feature updates for Microsoft 365 apps installed on devices running Windows"), ValueMap{"current","monthlyEnterprise","semiAnnual"}, Values{"current","monthlyEnterprise","semiAnnual"}] String InstallationOptionsUpdateChannel; [Write, Description("Defines the apps users can install on Windows and mobile devices."), ValueMap{"isVisioEnabled","isSkypeForBusinessEnabled","isProjectEnabled","isMicrosoft365AppsEnabled"}, Values{"isVisioEnabled","isSkypeForBusinessEnabled","isProjectEnabled","isMicrosoft365AppsEnabled"}] String InstallationOptionsAppsForWindows[]; diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/settings.json index 8265f292ef..831efc9c19 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/settings.json @@ -10,6 +10,18 @@ }, { "name": "ReportSettings.Read.All" + }, + { + "name": "OrgSettings-Forms.Read.All" + }, + { + "name": "OrgSettings-Todo.Read.All" + }, + { + "name": "OrgSettings-AppsAndServices.Read.All" + }, + { + "name": "OrgSettings-DynamicsVoice.Read.All" } ], "update": [ @@ -18,6 +30,18 @@ }, { "name": "ReportSettings.ReadWrite.All" + }, + { + "name": "OrgSettings-Forms.ReadWrite.All" + }, + { + "name": "OrgSettings-Todo.ReadWrite.All" + }, + { + "name": "OrgSettings-AppsAndServices.ReadWrite.All" + }, + { + "name": "OrgSettings-DynamicsVoice.ReadWrite.All" } ] }, @@ -28,6 +52,18 @@ }, { "name": "ReportSettings.Read.All" + }, + { + "name": "OrgSettings-Forms.Read.All" + }, + { + "name": "OrgSettings-Todo.Read.All" + }, + { + "name": "OrgSettings-AppsAndServices.Read.All" + }, + { + "name": "OrgSettings-DynamicsVoice.Read.All" } ], "update": [ @@ -39,6 +75,18 @@ }, { "name": "83f7232f-763c-47b2-a097-e35d2cbe1da5" + }, + { + "name": "OrgSettings-Forms.ReadWrite.All" + }, + { + "name": "OrgSettings-Todo.ReadWrite.All" + }, + { + "name": "OrgSettings-AppsAndServices.ReadWrite.All" + }, + { + "name": "OrgSettings-DynamicsVoice.ReadWrite.All" } ] } From ea6036b5687463492ebfbeb1b0b00632a24672b8 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Thu, 22 Jun 2023 17:42:18 -0400 Subject: [PATCH 06/40] Fixes --- CHANGELOG.md | 5 +++++ .../MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6dcf37bb48..43e0207031 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change log for Microsoft365DSC +# UNRELEASED + +* O365OrgSettings + * Added support for Forms, Dynamics Customer Voice, To Do and Apps & Services settings. + # 1.23.621.1 * AADAdministrativeUnit diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 index aba934e135..0be1c86b2d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 @@ -499,7 +499,7 @@ function Set-TargetResource { $briefingValue = 'opt-in' } - Set-DefaultTenantBriefingConfig -PrivacyMode $briefingValue | Out-Null + Set-DefaultTenantBriefingConfig -IsEnabledByDefault $briefingValue | Out-Null # Viva Insights Write-Verbose -Message "Updating Viva Insights settings." @@ -1098,6 +1098,7 @@ function Update-M365DSCOrgSettingsForms try { + Write-Verbose -Message "Updating Forms Settings" $url = 'https://graph.microsoft.com/beta/admin/forms/settings' #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } @@ -1139,6 +1140,7 @@ function Update-M365DSCOrgSettingsDynamicsCustomerVoice try { + Write-Verbose -Message "Updating Dynamics Customer Voice Settings" $url = 'https://graph.microsoft.com/beta/admin/dynamics/customerVoice' #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } @@ -1179,6 +1181,7 @@ function Update-M365DSCOrgSettingsAppsAndServices try { + Write-Verbose -Message "Updating App & Services Settings" $url = 'https://graph.microsoft.com/beta/admin/appsAndServices/settings' #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } @@ -1219,6 +1222,7 @@ function Update-M365DSCOrgSettingsToDo try { + Write-Verbose -Message "Updating To Do Settings" $url = 'https://graph.microsoft.com/beta/admin/todo/settings' #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } From e2695f52faa76c6ef58eb7222b2095a3861f1e04 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 23 Jun 2023 09:31:15 -0400 Subject: [PATCH 07/40] Updated ReverseDSC to v2.0.0.16 --- CHANGELOG.md | 5 +++++ Modules/Microsoft365DSC/Dependencies/Manifest.psd1 | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06aad58757..2432a5f678 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change log for Microsoft365DSC +# UNRELEASED + +* DEPENDENCIES + * Updated ReverseDSC to version 2.0.0.16. + # 1.23.621.1 * AADAdministrativeUnit diff --git a/Modules/Microsoft365DSC/Dependencies/Manifest.psd1 b/Modules/Microsoft365DSC/Dependencies/Manifest.psd1 index 92c0169c9e..b7202a25c5 100644 --- a/Modules/Microsoft365DSC/Dependencies/Manifest.psd1 +++ b/Modules/Microsoft365DSC/Dependencies/Manifest.psd1 @@ -82,7 +82,7 @@ }, @{ ModuleName = 'ReverseDSC' - RequiredVersion = '2.0.0.15' + RequiredVersion = '2.0.0.16' } ) } From c70c480251f52a4a862b62f0145a067dedc49e3f Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 23 Jun 2023 10:29:57 -0400 Subject: [PATCH 08/40] Update MSFT_TeamsUserCallingSettings.psm1 --- .../MSFT_TeamsUserCallingSettings.psm1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUserCallingSettings/MSFT_TeamsUserCallingSettings.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUserCallingSettings/MSFT_TeamsUserCallingSettings.psm1 index d0c2c1cf56..040d5b62b2 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUserCallingSettings/MSFT_TeamsUserCallingSettings.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUserCallingSettings/MSFT_TeamsUserCallingSettings.psm1 @@ -393,7 +393,7 @@ function Export-TargetResource Write-Host $Global:M365DSCEmojiGreenCheckMark $i++ } - return $dscContent + return $dscContent.ToString() } catch { From c6aa935d5940565fff8840c0ee91409149e7cbb1 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 23 Jun 2023 11:51:17 -0400 Subject: [PATCH 09/40] SC Doc Updates --- docs/docs/Images/Add-eDiscoveryCaseAdmin.png | Bin 0 -> 49725 bytes docs/docs/Images/AddComplianceAdmin.png | Bin 0 -> 63362 bytes docs/docs/Images/AddSPNeDiscoveryRole.png | Bin 0 -> 55046 bytes docs/docs/Images/AppIdRetrieval.png | Bin 0 -> 42044 bytes docs/docs/Images/CreatingNewSPForSC.png | Bin 0 -> 74460 bytes docs/docs/Images/GetComplianceCase.png | Bin 0 -> 170545 bytes .../authentication-and-permissions.md | 59 ++++++++++++++++++ 7 files changed, 59 insertions(+) create mode 100644 docs/docs/Images/Add-eDiscoveryCaseAdmin.png create mode 100644 docs/docs/Images/AddComplianceAdmin.png create mode 100644 docs/docs/Images/AddSPNeDiscoveryRole.png create mode 100644 docs/docs/Images/AppIdRetrieval.png create mode 100644 docs/docs/Images/CreatingNewSPForSC.png create mode 100644 docs/docs/Images/GetComplianceCase.png diff --git a/docs/docs/Images/Add-eDiscoveryCaseAdmin.png b/docs/docs/Images/Add-eDiscoveryCaseAdmin.png new file mode 100644 index 0000000000000000000000000000000000000000..1b714f17cba22090b3367333ae2597eda73d9ed1 GIT binary patch literal 49725 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�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 Kn*YSe=YIe=Dyvuk literal 0 HcmV?d00001 diff --git a/docs/docs/Images/AddComplianceAdmin.png b/docs/docs/Images/AddComplianceAdmin.png new file mode 100644 index 0000000000000000000000000000000000000000..a81697f33eac60fd371aa14781a3cf69574f19b1 GIT binary patch literal 63362 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 N14BM-_}9_z{ujK6GPVE! literal 0 HcmV?d00001 diff --git a/docs/docs/Images/AddSPNeDiscoveryRole.png b/docs/docs/Images/AddSPNeDiscoveryRole.png new file mode 100644 index 0000000000000000000000000000000000000000..49c2e6ac5289100373797fef2a5b173044c4f9d5 GIT binary patch literal 55046 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 literal 0 HcmV?d00001 diff --git a/docs/docs/Images/AppIdRetrieval.png b/docs/docs/Images/AppIdRetrieval.png new file mode 100644 index 0000000000000000000000000000000000000000..93a0ec0e3211588849968079c4b71e5f0169098d GIT binary patch literal 42044 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 literal 0 HcmV?d00001 diff --git a/docs/docs/Images/CreatingNewSPForSC.png b/docs/docs/Images/CreatingNewSPForSC.png new file mode 100644 index 0000000000000000000000000000000000000000..f769f66a82d2affb676b21a61bd7145c2190e702 GIT binary patch literal 74460 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 BP&)ts literal 0 HcmV?d00001 diff --git a/docs/docs/Images/GetComplianceCase.png b/docs/docs/Images/GetComplianceCase.png new file mode 100644 index 0000000000000000000000000000000000000000..35b684454284877f6a70fc042d6438c260c98503 GIT binary patch literal 170545 zcmdSAcTkgG(>IO

Lv`C))=wHYD%yjNCR1I8Nqd%NwzO9{rU7u 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�ruh3PpHkAh&Wpa>A!B7X7#-Ed5N9r>vrF*w#uwbUe~WZ3@cqD*z(YQ&`m-zq)FKmH@MXzm*5AE5-V%jS!SsZG-`jDX(OQbX# zmyna9#AG;no8r4|(~Bc4d5giyfe51r(=tcZzVENPR~=j`tvJ$QT*JuiE^qJ0<)Z(9 zO2H@Ik5^l{^s1Z}GfBKc85RYc=2zPV=;Vit#X?Ba64iK%Ve`+Cjx{}#=fTj~!jpm@ z>!7whPh)~GB^d!Xb#y7(&70&;S(jI2`o<3-zVf;o?UM6GL9OfD>xp zA`7-`;v+z*zG^Z4d;f5dB_y;9`-pDDI&T`;)j?;q(`2Is%o9~P;>wlIhWH)1mfFqL z?=P6aqDE>7H88HKd~RENSs6{OWIFBijB>=3$CTJ@vPU}IWoLBre~t44FC2?rkD^9e zh!g>9E^v5L99z&8$uvUPj%Y^(Y=#L&O*KgF1?k}7Ju2!Dm0bQpovP{^9H$FE@m;W)6GokMwVBIxo9YCu;1(4lQlU2mFn5+J&!%@1|k~ z0BdEpAVOx+HhHORF8NpoYQW7i``|qAv@{sZ4=k^8FcTcd;+f4;J=PQCdmfNIfO|-%_Ri*{J-y z+%G3v61U<7!6aiHY*{Ia-%CPg?OtOWd`oy^A;(Jhf?V;|`q&Pt{g@?xS^JA;@y$M) z_mLrHA)|YPPfhSMua@<<>tib6Dxe*|>(UXtue(Jk#`V3Mp5Yisx!-FAJ(Kc|xk%6{ z-oikWp0HOyL2<`G4R!|0Q7GGEDQUmrc z!G?<2Ru+o-=h4-K+$Fr{%3+C{#iy4W;>>gC3Kd!mDwN|SO5Ywa_&H)(l_#lb!Z*Ti zM=dIA|Hz)We*nk6H8E@o%{>rc0JZ*%c#&)Oe(*WShQTb7)p{`d4`@MN4J0Q1`_w9^ z+^z{U_{LY8t)xN&R;f8YayHfAGEbvxY76^~kghQCTZOmM(JSF4(ASz0R%}Vo6$J&F z&r_Q1_dTJLo6%!V&q8tXana>9jhj^rjx)`#5KGut)C30Q!``4hpz>qCyyz70W(FkL zpRKAjd+Tv?PVjA#m4&pP{apk_NTm4m91$}>8Pr36kYbgUbTv?=8+~P4P z;DR&L*(mhKg{>U(r@twl`vAQ#(+;_$d%4VKcBfn^E*oYb(Xd?k)ZML$&8IX%=Q%}O z+kmL!KCZTM_GZ*6`4saEnXsEQj7g(t8MN_F^@d0(=b#vwlNlvB;*9+INZdJp;ElF~ z-0?^6LqRv*2^}*^IG@f;T>GnAVjRjCYa|=3E%@Efs+^PSM&$-TDKf0}0ZAj@iSZ`8 zO~lXrl)nie2j-6}EbunbkU2bgC5BJk%YR>1*->kA&u!~#KR6>zHA1ozsHQ>-Zs$sc z9kyOYp1qNv-)>C1>AXv@J4Szp6#Vl$@Xeb1Ckf;I$LwP^go zN;GS|ERv|>uU(4nm-(=+(6)IY)7wjZIArGjX_6-p_E^S41Y#!SC zSa^Rs{OYK~6EZk`J8A~#eLJ{SyfW*$Rv#k<@?D)x_U08Zc?Ake!Kfwx&eZBI=sUGt zbNF3 zBo;|Ct-HfNJMMD=#eC&P=bVKqq^XW-w8~*Vwx7H(DRy6Js}d@Hd+^9LM1X(H+}M6v zB{!k6=ghKiAt+I$_cs`4bn)?4;-}4T4Oos z!caRxs%J(^D3pww=BAuV043t>6wzX2+thv2K;+qEblTgBGYoRM_N^Q9U#I=E-~1EQ zyonEGS~bH${It89XWpEy*J(6=ppwVGH1ZQ7Os=l_M_=Im&B+ks^HC6a|4d7(e6Ju| z1}Jaa00D?el6$*KbqWF+K zG+pvm_cw8(e6yVW_`D(Y3tNB(db3Q{emf5^Riq_#+b5|= zw;JbiA8)e$4w+wx@?7_Q{nY#h10%pos%i_?c0q?Y1>+E*R!D;&QYZyJ^*UGrRVkw% zvEBGQ7 z2Ut;KKVvrOWz(vGb~`GJVuftwWkMgHzut7`cxHQxGBcy&I>Rs(6BXQ<>^NgG{Q2;> z(4$A|o2C5-hOwHg+}meDDvEn-_M>e_T&7z3j#sfoT!-pka&vYUG!!dbu7#djEphDq z(6en0f&cXS+O&~)Rv?hPR+juFs1lc_?=*}sf@9%gD>Frmj(7k3&{0F zz^^D4oti4$r`mlTFa!XJRD+a(Ly>2Mpx?A13tZ}G#G^6Qpwm3TY)TyEQX6#`u82W; z9ZnV_}JM+b1Xz7Nlri`XOY)6EMB5-A00d|3H;43t~q!_$9JyHrR<#|p2LE7FG;_Diukx_A&s3O zgn}xB9oFeyS3TqdL-?T~=u=VWXD-L`9u)xcoDWO(<#v~gZZWSMbDnt_*LgJ_d5(W; zxP}X`5>}&eZeThOKUU=>j391VK;Y}PEgRdsxKTazAzl2umuZry?dKAPGe#Dc>z>0O zo_9`%`gL=bU-k_yT(oY2^ez5zx&g^v?W)jGD7FVGLIQ*lRn9`rVADy+JSEYQz=v&< z;;NO!Ni*$PHjg)wCtAg3^Sl#PQm-V0p?FPSXX|lpy70|JNJ-^yBK7IhwwcR^shO(s z%RJqF@Hezhs0Yo>$C=LrFnActN9=ts8~E3T((O6qdG;T(TPx;PhDw^do$R~1HoN5Q zXCcid4_qk={trrwA;z?LV~0Od%j5jHIX~4tbl$h|W{ckl*mW5FLw9f^GQ=AA!&V@6lupvH-YJaxBirsGe0h`yOo7~qzh@-Qm9;l<~w$yR;M3p*ZaM{-{IZCSbtwgI72_LD~C^EUG zIq~{khYU)&frGkRSRHuNuYMMx;hJJ~Y@#oo3(lF)_vfyjymVuULuJ3Z28};%uEB5| zOBA-;znZGsW%M{qH$kBX9QGPZi!C{JRYAV8U;sdK4JKWNE!2hB?-(eDQBoqdQW`JX z2!Fwp^gxb$^0HrV(Hy^R5hx+qXc`XK(;(5C9&_3Ig?HmiI>4rN;T)oHEH~G?lth8u zv0oLkClvSLzSfB%5#;58mtR&23i)oF5cJUF%J&|=M^)J#b)YSs_HvtWb)Ui&Ikt{W z+%8&<KrSUDd5&o= z_3G_AIlP1aHp=3LP3hIShSxoHXp%ki9Um; z)5E_>*8Xa(kE=j>=j!R_U@YOxpfTE^cYZ>%i*F`;7Pd3-{FSYu?aQxALlSqf?7qUH z$*N12+SAj>UNj6-P+EXwZ^a(*rpVLYUh~HG;zhl6RTU$G|A0LLTSQ!OTN^OWex-zV z+X;Q)n>~Ej5>m@Ayuyl*d;OzB_~SEb*GE}cl&P`gk@o#aCH#{^#lynZo5D z8ZIGN9nzulOo*T~I85ACq@rGS_90hN{nd0Qp(_rvR(k<4rkfG6DZ*Jx?>Coc@RT4vP-19P|XIO<3iZkSmry)-is* zyKq+~6_b=dxITfgzhSx!AiENKq*lVzq?uNwxY&A7z|2TP9sSX2gTIJDq@ee>qD5H1 z3N7GdWrbdZkG=Z_8Wo~Z?3YY4zPJ#EMbOSLS_ksd|ETK^v8OHuJDRBEM$|V}RQ#|i zW#5#Fj8x_rf2$=$3@)=~?Eg7?0d!U8??JY2#iHE>*s8pg?QJaL=8J9KtshGA(>bX2 zRpWZG`iu4)p;J!)ORCvc`AGRId#*K(Uf!qcI*E-Z_{IM`9~vmzVnA_CB^`$COH;!y zlexsL70g)+#?EGU?!1y99W*!DO6+_G4R{w!l6twae?w_PJ}yFi6&W={4Z8@Ph+wPY z;JLlV`XwhNG!Y-`&{avLmDQw|5xhm&JWK8ADM}EwMkftoE@{yr-xFxe?!}%>?}SDj zh33J6W1H7TR|0y5UqPJ5x;4TlMw_`z4N)esE*QGKCS2;LDnRn9YRa}wvT7F!*$|O zE77lj5wT>h$}X!%VL9GoR=TjpOS9+AkG-1gd=A=F|@2^W05c2Hl(jalPIL!Klb zREGyEB{{&XXDB0%vw>0{F|h_g(cGwW*m|28AmRsW9}56{b=U0^xq)8J1;;Eg0q{jg zAnVFrZoa|gLs6iaOZR!Rk_ z_Ty)S{z)+d-|eD=e#`eLFnQ26)W|CVJ)*EZ2D+ukNp+v zIbwi&{*{0Ep2pI>YKN(`%S}}w;eK}aW$pk}89>~cQ66w@RoV2@ecV9Sf0`&t(3?9IrzG+bnHR*YWkxeh-OnJS4d!&)%qM_eb2EJM_nR*ZT?9YA=1XvkzJEVh*2oebK03J7Vv%v~XjkXGyQ2z17Q=lpdj)d6JVC z#Jpd}NmgFIj*LD@JI_l$+Qh3G-0rj49p@mibavHVkM=wUe>T_7b9?sV>Mzf4ZPNUy zm3vw>MerVRwnYnm=+E^*7{pVDo_CFCY2c86BJo$z0%s*sVQMBv$_3DcCO#S-7d?3} z!aHHbbFc4#6zhVV(gY5V|8n&~EbXYuq$F3Hn#IQwO*=}u?FK|ANm@x^_Fw9%X;C&7 zG6y0AIapwCNlTC;7O6-26JQ8^p(NR-npO#Hvg-D}yM!DAM08lC9Vu+4XN3@fl4)2+ zVq`@iJW(eP5K9l{uf6lL?S^07Kc_R*UcWEFp6X}8(REE~kRZW0@U0z^L8(2Q}BI$l!_APu&QB=JXM=P zPfkVM<>e3$+^Vo6is_6tCwtEbi>EX=A)Y6% zwvn59L6dIVwNW3h***|6Yzx*YN%|P+Kc%5W39}6dJn*YJriL;Z6A{dZ zt~we^fLbNWBN2GK1^@~yoRw-;LqVsFHyWCVEF|;?s#o)>2DOmC)PpaH;)AFN04y|n zpAZN>Uz#(mK5fpZ=r9M6$ozzyk34d^aXu@3-n327(koF1T4}5=(*Z0W5F$8`H&*?{ zJ%7a>H@Z<}WOa<~by_=ms^6hyB9xS#n1K?3u)vq|!kn9fe>X>!+BQmzw)(WM%%QVa z%(K0%>oHrMB*_6JC3tR^J{1M1$sn^|dU9TjS^H>kNbWHsKwy*O66sd_)we~$sq)B+ z3apBXv>u6{N8qn}MfO`J#>V`Wn42Q< za{CaTIN-XK1TGEo0KeWTliA=+*~*W>E2c;6U-tn|wMHzt`St(a_(2E?M~~(A`Hz?$ z83-9N%AYw9!OHpQEr|>&FFTXLvvlc8 zm-@EZrb*5co!O4KZQT0#$4Q|{Nq=x*jcvU*GWf}aDs8ZI=J1hJ@(?u~gG-x^iNu-7 zx1;II0d!*fqUM=)qauRg93~|5=d^jGlve!S1H$6F=KJs=Ia2eTKv9y z{q|aW|BuJ*_Xy!372KYJn~0SUS%i+bmWt{c2xlFjM=z|7>qfCcANQlxg{L0w&8#&FN?`pjPGe1mp z6!8nnr`0tCnf$q_UR1F1vXR@2jwM<}8u(L&~YQfL;!2PteYIpqI+Kt@)Lk?#M zCG^K>s)|zq)hn6cb5cE#<01X|<`HW3GgC*?C2>3K7)h^8K#b}|D(kVpTJn3Cla{`TC4wCpMU8D`t$TEQH*rL|{)#~-5*;2a8VrzRgUn1UT zb3BG!n;EYfsdYS(9vN-sP((tP110fO12XNL58GtQI zg{?)jLh=&(BAkdc%YAn4RV8+wVuaf6`j@(@cvN6dBpP8p-ve^e z#0c%ATuYbnk35+{;J#HUrC#BDugulCwFWFHAyTiRj0^5$clp4-^3DuwO7t}AxrGiN zYH553SOtf7B(j1Q5fB&V`|H7tdSiRa>B{MqGn-W9f8!!w#!lnI+3uiLS*qzMsy@Lz z*P@$4)Ll3xCp3^$L$#xqGTJVor4a{*I`MrZRX_w8atEf4{Bi){DAk3&t5Dys9tXKF0Ba6hZ8>t=X@i5 ze+r2ht$X&Ce+JI7-53kSZ7?d6@-jw@8o~%u&_MuVIJ8%4>j6U1A4VVx z7?Ll(kVMV>qzw{Js6A}V+Jp4zt;)L1Du{%ErEQE*8kY6&;L;^Y4kdU;IKwA_7Jbw&k-g>g^iPp>}Wu+m+PXgA` z<3CH4qID`5rc3oc-|v{Sus=#EZL9d&u{_ib&zIelSc%FOya<_$YHqlDhS?xLAUIFf zW#=h<1dZ@$8)uhoh(hJid5jdfhL)(ox2=0<2cG`D!QefNThz_vz4~@8&*6qC%is zt}@ntluc3Ui2zmL@!+8lM5~v!7jE)y87HXB*DWBoR`07*8uK%2~E1tp;cC# zms9n(C?>;T@Q3Cj=|h*)xY%`-Pl)BUcn}P*gTN56~8v${?Gav<-@B;zwE2jgg7+WntAUqj3B z-;z8#|6^(!aG6t*|APvBaNYlVV%+~PMsNA4{|k$IaJ7Rkv55bZ4PE+QUSX%8iIlr8 zeNAnpK1hm7SHca}&jc$3hRt7RHSs51-S;D0xE*tG($q;HPjw8y>b~3@W!5;CVpm9p zjQs%@JaK=&=+H~(8eFn8J9bb580=#12{@5{YjS*xQT@-f3H=Y&cUC$-#$*AoK&3AB z4f&7v>53tOo9Q}RpX|~(|Gb|R;XL?&!yn|w+^CGI_5E{nb@w8brs_0c!duEaBx^Bh zi5P37s2eBZIG7ojG4(l^|L~b_@BjPymj5B|`d96*jA%a`5?(p|dv0plZGWvF#sbeD zqgN~T#F0F^xvOt?9kX!l57C{~sC@>>4fdW7WPMm&083vpIGhGheMxw^rI-jCf^mQ_ zMb&$H>KP@YelVND0ldGW==tdjp8ai>NBTE?3>hL2kR_~#!I&aRR$MW^k_gmjd=FPhTL+# z@;6{Lo~1QpZA%6*8N+<)dw7=D&e-M#^@3c`Uje^877EiIGicaRVBmU@g!lA3(9ln3 zQ#Po4iT`~AQh^&B9owCyp)k7_(tR_`6&bu%vJn0_;M-;NK>uRQvwoRB@r{fOU5BX! zJVqKw1VjPQESau#)f98(1O>`_wQ2QeifSWtS_I=P!chTotzHRUhmAVzN{>SB6tT*0 zGnFn3u~vX)P3d2=-M~s z+6Z$WR_3{*DIDhFhf9c88#1#peX@xs08!QHkUd@7G#Oj_-uqn|0M#aYMe*}xCjd-I z344*u?;>`eF(2{}2^Tz&U$wU2ASSOHHO0<FR>h?Lc|EF|aRSgat!N#=dH-U5FHyU? z=T>y}w2A(G-D4@zD$CY>bM7(OT|HdDs%Fqc6kNtzs$Iz4LQ6mR(=%i89{oNI9~!Wq*PIThv$_KxQ;qHn*n~MydV~(P^qt)i`}A+C;{?>MxD!!eGke>ogvzfq zU(7HR%96{uMrte-G=Kt@(?clc80<^1PgPhr){LFi`0<`EIT)cYs?VHx5SU;b`zy(nn zR0j%MUL>t1z%t*`4L!1ZEYvaKLMUytbSNgRZo(d=xp6*o`!V?;Fds>uR2KG#X`=x= zzzQKNkjgP=d4J~;yk>MCxgJ*&cP9e~5&(?mVRZE4lS%^VE#3Y@7ULjb@`KyVoLCTb zcG>tadGP>RyWL$TBk!80EM7Ek*PST5Z~#R;9`-N2Ht7vsQ@tl&)@8I|b}5LbeHC9B z%JFN)4j4!;BQ58*e}p~X!e5}>VJQ>@|f{< zsiu(R-g*!@?O1KNZBcMI5c&g1UBDPAt>K)pf=9(fAf4NcWhPyOLxXF#Lp<7AR{Rvn zUW!}~*>|m+`LWQ{?6WsEJ-K{Wu$>refZ<{h>f-m~(oDyq5Z8^~V)E=%6REr#j%^t> zIZ3F~Ov7kA3kLb;Yy(*3M(-nn50U0r!O`Jad6@$YbLq>jmon`$Hq3ihh#X?)Yiy;^>o%Q(PLJ7DOnQtJ1A>D~7ZXNu7=m7G1^KWrN1 z^XK>x@|FrK(R8~=x&%M@$R6VHvzF!Km*F|J0|w5sfbVu6y;}qMIPHgh!L;TDb+0M{ zOXgV?SkRk$!jhTj^4<@Bjx7OLDO5s*5wt^>-@HJzn; z_5IBl1zYfB^K;#1&Rz5(QZ#2)L)2JpIlPUOVDAd z8@k79c6JpnY3!TJB-#ytd8TnMH9#$^!Sw&+IxAov{IrRW;TX)>U>0ziK_-8- z0W<{N>=tyqOGmbSnQP@{F*FzC6ZQDBSMK)q>`;~^sbPEQ9_>|TPY6yANR^)*R3n@%;di2BG;j9PCWsm?|SgoA*)tF5NZ1%$dj*-Eh7dntFtpg7@ z`7G!Rx>q@);louI0o%6AcZiD&{j`8Rsg z%$qqpj1#886wc7i3c!*r@fEaazLDn-xr~K9V7Z9-0vnjth?82x3;pc*rZMxrmom=L zA6vIU3KQ}&7pGOPrD_=}ELZ)7d4DLyMrYx?e z2({=enmO&DkYb+_X3KlZeCUBRS985gy$=fa3D%dEcIh$E&u?IeuS(PuGgQ6YdCKR3 zzN_Fu^`sx+DIWVFS)D=dTOJp>{S7w?)VzSoJ!ZQWW^PKAhRg;`Fs|Ieta%T-%u^td2lm^p3z$Q9{Hl+}k z=Y};}%+Rj?nWFIr_MiV$JY~_iK7%gMKKRe@w)pv9(L$SZLH9gg-sPUK3So?kwJj_4 z1iyOY_3HKX0Uh)suln@PRHh3xpWBB^^j)Vg$2IqG(@wo|JM^F($+-T_`#=`)1yW;j zrwCRMy?-EZV(8GnEbWf(qvglXj`PcGKxy*SHm>fsOC>$L3!i6Ngl?QSGJC6wDTJYz z{Gu-cG#!A!r7L`55>hdJeVjfeeP7q3!#FPp$l%+mA*X`zMgtfwQFmL)&JR8C1-8al z4al^gxW=n*J{~&MyPWKo00Ho3GOVpoPi4I^z_`Yt6H1!UMRx~iT@`yn%n%$Yuk?{s z+W!?!8)t=nRw%yAf#2Pkn_B9V+3i->^kJi)Z4Qqrmn(onQR(Wj&3s~6n+`b_NrZ2RI6r{XQc>X@Ks&bz<`G5t#iW}~cN2|*M z&}K0T*lH}q7|;x7c^?r#ZleE8fp1(?1=^dPfU zwnF_Ab>n5?`i{G?=}3hf+*^!2KMJ{lqR=PS%}*J2NK3g=4Xj?!YCw_X?R;?v(IKZN z=X3B>UQb2hOqwb9p#gh#v}m_8R~1{L?bBs(qNO1^Y-+J8!ISxj&SS58!W(moW2E_2 z(=A6*IlbbbWlVnaZ6x^LlrFdroJ_kwx9<6?B?-=a}c zQTG-$ty-Zy#Leh#{F=wACbh0>Amj8A00KI9f5Lmlaew1mC~anjZ@(zBaC3FOO}eT~ zK&negBdj1oW+04QhRC2qomrLj5K6C}d$zyV(4&pTl7&PC*}7)#Xb=C}W95@>LXT&s zO%6}nC$>Ee_wV@#5Sb+8Qgi8xYWe-goA-!#jb}!x9#s)CmdoMKBPJl0$LW-Sy;Rq% zMQ)MV(u9G$_D;^QXN%qj=zV~YIu**SnmiL&${l^gPuW6rUEULI%(0@iT<3veUX*Due!) zOsEn`DkG@5n`!zD1Q)d~t3_%sK;h?mqapV&ft$Bqx0=|7jL7z@hd;l6>prF&niIU6 zG;xd%Z4{uLxLnkIvN|>l`DbtEq{1EhppJ~*0BuYm89v0Fmfld(SD67T?G}-WwLRF% zD&GfdtsDOK%pMyt4YYL78V1lLF6z_Up z4;iE<;3~3U9A*9=@ZQn?fcK(W{|me~|L#BFy&z>-ZW|-6R99e=0tDi@4AX46RkT~@AlX{W;sIDom=R*K`0n z@1feAiBe>Gjp>^GGL?h!CKr#RVV(|AKdQ_4FT(*6@q?Py_vocj5?R6eb54DZkZ&8x zktQ8c5v3(kVzx*<0Q%oQ^0_41m93D{OgIbPx+)@-*eT=jT!Z#a53*Fogzf4&w9N<_ z!LP#SSuL0{*PBIY4j2XvX@9|B>IRug!>@Z!^qVKHmDPj{W$FS(PtLzhuZ~sM3c^h8 z+)PO79_OzgyUZrlNz7>ILTkQ%)C0pl%8oz-bD}WtmP**}f$2p_)3o;iZarTUh6vK+ z4?}DoM$eH8`X^ZWa2``PP#su8jvO=Xz-g}}DB;`q%B?NGeM$Ww@~3Df=W56yoOIy- zuI`+kN0JFOiRNcWe~2f0+z%dxV*JiRCeW4iQXxHui=<#A%eF zUkmTZf*qPrchhdcz?U!6`$y*zgz!VmP`X(0eGa+}!A$$@L=n3D)g9aekZg1OjUBdT zVwEtq#>VN2R|x&+wLqZ&zvY6Vxas2sd8IS!&~#Id%=B`wM;KXVl#E<_jR_hl-rq+* zbD#AJb{?Gr)-6*B0Cm7`qtB0@9f>Cp2d+EF@RJ{M{q=|o6rArWziZ#|s+Vgw{CLmi zlfvv$sR3iI^(p`SlyVv#XTC_wWLncx`tx=G_hHDx0Xs_Q z-P!~Tzd->Xkw#{b8gJf<%b$|w*OCkO+L^toGGir#FJrYyFul=5%3m!IieOH>-Ba?v zKeSu^h;QHKld%y`GaP|au=Dl_j<;;Dlkbx4Mf>#DS|>QbYE5YI<}pd*B!nLCBU1aBh=ziLD zHU<5HUvC8>W=-y&2eHUQ-~|O`*P`gB3g?$$@djMeLZ{6}*4-aNkk^Q>w9x@#RZj5R zyI0dwSi_k1kS%Abi#vLq?Qnvode~gCaI_s&RZ8xcKkF=Q7rx*g%$w6|)nl>5ah||= z@lOB|qI>xaM9F}z2RgFi8)PdSac`eipJ)et-xvzZUs@To+Q_WHr7pcGT6c)?h!DH> zr{HASD?_RT~(@RmJFFD&C#ux6W@HZ*@qM zV^^Nekw-MKNp?|Ufz5#S4H$V}w86HM;u|(FUlh_99$a-l8sGw)6rxBxz>Fh z`Pd+o9$_;dBTEENjwk&Jch8437p8q+szR234WH@=2;Ph*gFz-2!q#V{98^72sG(4_ zRUlD8uR}(%i9%7GK9>7S)nkqb*K-sk0aX;-Ntx3(WlkU}mk8W?qK-6Zvvz`8n8NSx za-0o~6t%1}0jn|PD~^P7r5Ss-y@cuq02th;;0@q_kG?f-DXDM&aN&hHM^NvTFI;^b zkKI(2-X?O6LY}5(CTh_1l@VbW2=EEoRI?z5;o{atGEmlpUx_}M!P{zssW(wU^aOA z2Q929-ozT%JgFRy4^USC-rx2JKTwsho|w;`SvP(A6tDy~9F_d1i#6p4-z+8SBVMMe zwcE*SMitaZrQ5ogPT;Gtj!0mr?>Or5<-?tyYu;y*3EdKbZ3|@i6^PHcjN0#lG(Vuj9o!=_ZcA5u#)h4>?=eeMaiq&PA+pld zuI2v5;b-?Ak#Ni!rH8ZB(z*$`fl&E>X_PLB5)<;Kz@=jb*i?T30^( zI;CeL9n^bSibhz@|3hDQS}t?U(V*pq$VRXDVv#Apz>S&93G!7_WeDZb87Q-A0$N*e zLIGxw60HCHZDDzr&tp@p5R(-bVAKgcFOm`+fn!zG)ts3hmm#1<%$`4U8FNI z7}eGL1Hu>@RN>8i!}Y_m!i<>>GB)I}TVcc|5BvqUujcq$2BJm`@e`V@kOWJ$qE*%=6?4 zZH!a81B=)u+-PxQN2?Vi?zV6&=w1OY8|-F~Z9Tg!&kUscc^0}o#AgdR-{mHF)3&j3 zK-B|WVeH}dWz4`_Ljw84DQ1c8=AqWobt6GY0IhUWK?`2c4Otsj2dXeYUHbyld&Fz& z0sT(hO$kkfIcwm^UiiGs(5+VtjTLZ&EY`t3z3t?>d(rE`Q02w)4{AW>yI4cM-J@t! z`E$k$nDSoZXZovPKI-R%yN7><@_9p-%Y@Af&5pEo9`g8#XIjI~Bej-JH-cDl-#H;b zlQZ13>(L`xg&WAG$vG{NSPs)z3F-=!1E3nMNihxY8kQ*zLiq|uuX*#B0JZABS~nfL zSU``S{$1tEMor;1TvR5?Y~lG6-JKWHP8K^pANd-5B>x}w-ZQGHuI=|#5eo{apeR)o zks=@h(m_B(X`y$Bi1a2UASFRTKmkFe*U&oz={+|fpoCsR2}Ps?5_(8N3)zeNexALb z{ho35IOlvhU*0ho0|%@T7jw-u=XK5N`u+b~SvwJpmp8un;fMuk5+b*z?Sc&WRNr%= z=x3{eL7L%g6u+F=67JFha=XpYDW^R84GCjqa zknBV99Y@lhTll@v%EBXW_Nu8S?KtIeZtL;;y6$wPCf4$|e`U4`y}yO&(5tnc36{U? zINMh7x&P9-ba6S@n_(#fEO0^p=RWisHk5AL#Ecv`pQ~4+<_El5*o^LFnL78`#Gjkd zo(IS7Tx8Y|A&EzV&6$~D!MAjawkKRIjt@XwJMAowPh|!{z%k}@*9+fEJ#Se&tHKL( z^mm9jJvX{rzg#dd;vD=wgp~bk6Fheq`0S?&YP;Qebuga|IBf-5IDP=Kr9bYDV7Py- z^XK2w`7*1ZhY@T67fEL8@n2@Te7}fc!nIr`>#yKrK;J^sgu`oc$p;U(C1A`p5p!|K zaQ(z!rnYxs%S0kvA#MAXehkCr*XnPD{mw}AvEO*k>N=P0+b5`VT5As-1aeN$zdEQ8 z`R(rrVB;GXeXwz|@ktcM0Rh=JyaS~6pO?bBy7D4leAOqwHsYpWvlzZ+?K3aki$ZLg za{CJ-H(LDtxJQPJeFZ7c2-2`(*b8b%qc-YC~T?;Jep zoVfHj^L5qFi>vhpk~6Lr&)=zi=5mu7z!kb?X2iCa&ZThn6kjVk?ThV8{)|azXSLc} z=!m4K34mh$8Z^d9^8@0FIe_6vTUJ^7BI`y^I-Jd){{!1o9VzY;xt7Y)7ee!UvanY| zL(k3bX0worq+Qclj;@9lx`6l_>f4&2_`@Ux>X(2$Mfrl?s&ThN{);vXbAH5K=B$57 zv#itR>7lLw(&nO-yXPWF!&{nfJAS;c8DgXD0fcDMem{JlK=LJiu)nTn%=mcs0{wZP z(Z_?^w|kGTha44^m-q$wJ5=K~R#DXoEoNt4AX>&eIpqpLji*P}MGL-5Q(zYv_VaG* z-XtIC(e1x~st3%vOAT%L_nc!DH-Kr^kZnOIVxM+RTW>bTk_095RIJxkKa(W`u^Ul3 z;f3?YEnR$t-U~I@{TMrJn9#8TwG4f3^S1m33|-V+E1%ITb&q4h$cBiVBh?2XfS^=< zrZABmlQc7n!?9sLcrErBu5#`PeDW94ZHQE+nGALsiRQq9ZdG|3Vyu3i*werxx>xV# z2EDuujC+*-fCp{(wE9#B2ssb*9#hhY!+KP!!?TK0vB5$KIIY(C(?Y~qCcEQ5(;dIm z)4C(-qpdy052a$t0JI;P_RT`Aq>7{9#9}ow=c-P`Ulh+kLjQ7eTaI$b3s&JLUp{5y>Uc`@2D-hED)dUY!d#m<15aZ z*}3X$(5@+KYya$&hJ85`-6Ouh?5x1)46&!y=jg+8=5r(He>zNX(9^`NC-6wV%*qU7 zo$ENuHr5on`1Z@yVYD7XxD03rt0OS8E(B05EAk45M2^* zmu$}Bo@u0a*~PW`n+;ttZ{)XFJQu)xsyKPSHb^8^`K~{phMB5tfm3=W8QQznx`cyz z?6FLFX!y?w-`@{*G`fdyPU~i`OU%i9naSt$yvWg`vHL=z0&2s&u_m!x=YB*@fdU7x zTl2nvr}R3%Kfxso>|R36f3yBb5AUC=vdlS4^DN|0ZSyMMCxUW%Y=(zH<5wfaD?=3{ zFEkpPBN~=R-n=Qdz_xH)?>7!X_;U<>(QgY2pp6%wjtN8eT$hr171*d&$Ff`ykb9vj zP^(dC??cWMr`Y`%j%85IS?~^RjEn%F(Nnw25hM`nj~jgRl4QhhkU>bu4JY=ZM+W8> z!hl?{xsmV4LRi~vO9k>6LJQPC|q{;=~n(csmC(lL*uvK z=>3On&pzp)#co=$vU|LZP^Njil&y#V;IL9&22W2O3JA;7QA6UvB`aamP&Q9S1S0q7#-Go2v9p>%BHwqg)IY$3jzo|#QyaB(T?SPZ*lr8 z0-!M=G1o{Oin0=Ts^SbitV(?CT3Fjb_!#yv)r*{1H7lHcwPpNg4V&+t{*v=p;}#)F zowOLa%I!Qh0($s7$Nx72BG)Q0cy=;wx)vq5={dvOwl$n9y3UpXwAqd{0wvV9hk)W@ zYdI#SHL!tf@@(fDK`Z z5-s2mz3sek=F4Z-+{$2NoI9iSXL|=OK)Hdnhq++*@R?M zED++4)q#VHnt`b~vE#JJbzuqnOFd@=mhEJ=Y?h2kwML1sEYwV^4wI9JGhH1EC-G5Sq->x?QsCwQAVQ{W$vDZS z#8;ierChI=X43Fo!TUl(ZoHY5<$el?n~qqRiy;t(g9u|E|2{McVniQk<%Q>pu5%RghA!zYV`L84QbhmJSlpd z>4|4#Ph`wan&^Xa@0ko8w$~j62)PVMTtkaRg*AJIlZVRgF5*4%iyyZ>3of2bZectd zFb;r2Sli1I`SW$mH&5F1@qP4P3|J)}j<~)&UI;&9PWQ{?Jepoe9+@Va%vN&7GrW=W;?(G zuFYL4&>0Bb+u=?gNAs(kr>p2UYyYh8>S)r{bxLa* zxFV(%VJntwb1`>c_A(;3P9s<(G~QSLhHZr160`))TY2zMW2xF5@=3aXN6-Gt19daP;_BGu4IKytqu7G5DaGws->Aa8cf!5n#3`4k5;*jc2=-bH4S8Si$(^a(9#|fP4Q=`rJN`BQT!z}N4^GQ z>#&^TqFJqaJ%attt@+C#z;UcgjxuE>`o5MWRHjsVb+9&wZHCkP2C}9t@GvpvStD(D zGo8%FR&B@K9O%(Tmh`cK#>2jILgMSBY{Jp>*2|uwykx9$ovkt{jgjAFSnpZYZjdNfBx0U0*r8URjAwm^*Ci8nrUgb*U{L6~F z#X#)2IU)xK3P?y6gc6jF+6ixpW>P~R=%*Xkc5(8LTi+Bn_`$8>zfX=bZITGuyx+z> zZ_#l+AA4^DL27DzMaqiye5tnV<1Nwh2$&tZVqP_hW82dify{J0H{yPcd1+?t-WpTO z57=-tOPk!&fm$4}l>AMhGmtkSoPC$V0r4>>k$#Hvl2rkMT%c!*tTG;IK`!D&UrcX3 zBg>u6ce5D=KW$RtELq-#?Sh->jzFOMX&_zO7x$i%jurMp2#}9!0e=J$pXy! zdS0eM(o06LTg>D2d7wmkLXQjR3}m3LZ3x^K(|!R4IR+d9MbP7xXcizOD7P`0CMxvX zI0x`8*XujtFPyx0w=t6;4xjcdD=JvPvxT%bgRtediN3s zm_FOe@tA!RRQ#re2IC9?^#J{WXadvsJ)zlj)u&1;FpQe`w1-YMy16er%Z_(``{(ZiDhfJ7b!cDzsBZ5ru@x z6O?@2(n_~{Ke%Nq72FP+}&OMdmt=R5*(i%Q&OpYEm6u3l-eqMn@G z&k0UbK)r+lv%rnJVi62iTru$siku33ruFk}*3NcngpHyZebO%l0rd(KurjWZU@i01)87ImPbJv5csU z)r3ddvjgn{#8$77d11*P*Hp`OjHLGt6s=Z3HE^kz>mHmPe@e+fORk=}{Dwih%-_AD zkAS@5_j(`wtrk>a)^C~uMslkG11UdOB%J7s{Vn2b3xe7`;hkvuJX_+&>E!?>L{kM< z3m?0IkXGC`LQShLZzS&cOip)~0<>-Kg(A(Hy3Qv~@#M&*mp3)=rTaX$hSh_^%Byyr zcS{CtjWsd|FoniO-x@Di^S?IiGfMJiD?Bk0tlj)Y#rx2@27l%X3eLiTHESY|67cBvx$|;-c$MI4@1Z7m)V^xYv4tfOS|?v>A5D7*T9o=aHk@w zfLDCW%s?j^O8)MNJ(nN8yE)0KU8i&%6Z@@yVVYB^!(Vre0#{=DB^ctUC zI?ilQ1v|-?1Q_hcRL3y39zG?Eg9E3IfU@yosCO{^iWA@Q==G7llYj#7BMl0GeN~Jn zg{xUPjyQi@E+e0(p}}cAg?GjdP+Z^Vq7uKuF*kj z>R*N)gOzVMw}_;BSae|xDG*Ym)M_xUwXM_K&-?LH0p$EJz>4t`~pjD4t?)*bS`yX|GJ zF;3>e3t^DzC_2k}TZI7F@oem}NWa{`5y@Vpf8u;~`4n#(R8pI*E}v%kp!v7GV|sP# z6z4{*8>0uO;2*iLPSec=i}Kt!|LLL+kh3R?_Uq!}l)xpWphi9tYV6fNkZx#WdAf8X z@zQU}*;yM-sBNSqhw3ycPXrdi{WVZr^SuV4ez{qYF&m$$=~9S%I0aO+nT zr7TrJXE>^cSvHl%Eg$j@@7M}zKv&Cu$2SEwG}n9EFLGbn?QCvRXsi6iThCF|A|gd~ z!8|lMR&qL3=sXSIPR9AYh?%S$s1XJ?x-^p!?N+*0A{#PJY)$lc-Do}n&giA%!{GA9 zV1UliRSA=w`z=S@0}Og$eybY+`-_;Ed;I{JCv(*Rr@)*DxWUQfSj*B$3~nB)q6RN2 z(dqK7&7Tv^o(SwyJvQ)BfyoHw49RIyMr>3%Sk20ThEDt(N~^)bm0qHiS54#n<%_S|q*_)b25_aVV$fPTr<1M2Xbpt< z%X6sQmj)B00bWcqU3v@-R}N3V$=V(fFh>d&e1BV$8Ph6t*WIM+lDITPu4ns6Fys#A zFqkk$03?bB;{{#dmxp~Y$QIrOu^M`YT+XUPm2$}U!>>)$MRRg}wDh$HB4sfoE#KBQ zKiu1@bqz5flb|aqu(steSZQ6S>sJJZjTr)u@V5{;zu_0%ujHCJov~SumE0gq_Iok+ zH|&l&$p3bP`N}tCY5nH?1=KUrr1|z5beDw=zJ{{>V2oY25RTr7I7|^)V-;GPwi>^H zbM1*Rv+8UltHFP++~TJTJ^fEV@1vqNllfB;I%*z(mT?sWOWrdV2~U>Fz>)HU_loiP z`zI}^p28ypf>DyIEZP6`C5^0vlkSTe$(hv|B#_8Hb-O}Em&N#>4z+N}%(=P0%mryu z_;+XU9ID^a2(WFx$@jp!^D}Zg-;3YQya%XR)M(W|pZ~xGl{VWH@ZY5FPi;>1s?47Y zReex5+uLx6nnluSOt`}F#B0+D#UMJ9(J{&7F}zv-rx3_}r^!#jtkzi!#uK$sCDEbl zDrUzm#J+rAR|wu`>|hosr9@R$BC2fp+m`4s?)OYKCUH)wJ_!iN@E_3k{UXV+!3RnH4M4^3!k7`?Ew z#)hd1i*0Xib}6W{+6c5P7Acl=&^>uE+-L~Yl-YPez%?<1kNMk=FHeBFHPBa3(*H<2 zHlbvr{BBFwo<;Ml!$#7zBJx$*Tcgk2-GxJM?D|axpGiUbOM4W}n-e_P{t7`{J!}jF z6#p}SlU%IgH?(-TXg#ubWfnreSAK}4%Ue$pOyg;CmlgKhG%!1MndkX+;~HJ8yOl1# zMfPpW+JVmjb4KZgI;!)L|3Im`h$vJt8U*3RG_G!+)Gz=9?#jzJiYP-KyI1>!)#mhm zV>Qu!(R`08>|0tlr*<;-r!>oaD_sev2zLSxwVN zi@qTHU2y{e-qnILM3RBO1>jB`$9RWocIQiv8W}}V&SfA#ZhQ?=Uwy* z$@s6WYvcZMTYu~jO5El%-{I-bmidSD_i-LCmiYG3Py?Lb*m-(X=8}hFz-qqC_Fs{y zI}9{eEl6tMnPEGqDh32GeP3F`P4FhS1n#T@LTAS}ebe7`erN2o-c*Uzm$mWr$`r22 zIBZNVo`U8Vt2I{1N?2`zF>~TVxBk%j;;0FVyOlwf;E}D-tmWUeW?q^6HLm&u`mlSW zKbxrOu>9?@uldJcKg|a0I9e(ETmz2)4ftzfGv_4i9u%ArKQwZdKA*bWIgk7}`d>gj z$=y{7oz>dGuhBHruuZ%6NSR$ws^_()%VxfPYVgEJfLjF_x;kYP?MDQkqf1{q?(>*^ z_>%7G3E)FcbKZnA5(?UZ!>aO-rhpXO-8w&1AsJ2CaPX=SKG+J;0+jLqUn?_zZ*>mV zVB0yVp!!J)ib+#H`ibrdeMBwKD5@*4%cLIdR6gpVvfN)T(>FT~!*;zTj(USASLq%k z;v7cUI_``e@)4%$US$?h@vrrL!K710fR$9`xyZHF!ph=9%Ft|UsxuqUcXy4E=Bu+X z@2!_k_s9jy=FrhIShTQ2@@<6VLwa^RU-|BQP6yRQ@1p>6xl90tb02KFh5 z^dwx-jD58NkfogWrTtAsO?J-3pE`jzWhXOHT}T z$SxZOTT=q;(vTkmtoTWRBiC)1*qWNo@c{ZFC;*0uMA@pXc zW}Ln-l-^R-{wjb&SyRl%C3|Z5I@g2zhDO(2#RK%}y7HmGwlOez0EoV_jwSx@6g+e+ zh*!1+3$XKIY>zk9)7>}8%d#$SmK#D?H;fS&w;PD*msXZ>Ed`Q&c)&)oZ_Q5-;MrT0 zvG<$?t*Shl{G9q9RrwuqQirPR#@!`Fkl%X(HUU$~7RYEbaYB)D2%X(Y^V+eV9kfuQ zOZ|D?j+5(P(mKP>w!yU4KQ>6jqIMwi&fHN=D_P+&VkxN@pS4j$DSRw{xw5bq$Cla$ zq*w!k9(IYlV8%hSFZ1I>&2!uGY5$i`7w`VyR zcx|?|EaR>~IT%f{k`G9FPZ>UhqyIL>r0y&r-!5Hwwgl_1-klR|`n;sim9{}CA?nE| zSRfLA*B;Hf#?%zKXK!`o42V2Bv7LQ=Sw1NS?fU{pgz6o>lT{o#5VmX?V$*(5FVbn+ zE$-fQS)!%bye^fL?x%rHK~UGM33XVOI(|WvP}OfwTGR+#zo0Ro3~K^d@pSN%`*U@B z-qR%+v3IBIjf-ylQ#-xg^ez0Y$|G^{zqU?~%_80owTedtx9%Z+RL000-4cl9;8puv zrW?Ma{78J)AV$S^X^sBElf%J^cQXePhKt8HA$ww{()CaFm*`IiG}nHpwKQM8HQ0^M zIzR8$Op+sHT>_EvuZzD4U&r-iGo+4PFAOic+r?;qfsebB`TZ-}xSI!h z@XGUFBK=*t)6T}7C%SbVU&y@H3GGvpDzf2wqf&TBmi`lDHEQ7~plh1^)_+3sFTKsj zYkzMBr@UeRh8VAuX!J{?ffm@rB!wEG4jF-7;-J{2=D%C_0FX!i-`D9}qy6SRGH83E zgtW{CZ>^9>GXPp-TdA1tmVaNY^*=9;llBdo1iIXEF?nLq5({dK+i=&5_o0*mMn8GJ zlM_MUkHMcHpx0jwxW`DG2*|ilyS%AaPkzG(9vCpUcH8TpSq3)6qkr!B)S%&2oqrJ0 zC%U6z-`q})td0%&R?F4EqT{pP1^Y+j%>pdX$p@S|^|rW}7wk6(|A(6V=VzzhnGA(o z``5q!{`T(2m4AKYzkd4vkrw^W&-}#we*jxgF60S&_un`1_lW)XNc?-^{P#%w-;acW zp;qforlMs91}QscLCg?6ZfS=u%M$wBkDI4b?X31i5$zBEpM9Oh-itGJ>n(ZspI?@) zR=|J$gnLEl;=ga=7nHm4MqvT;7FX1u(r!Z`$vfa>=+-z2)vnr6^dsZK9;v~x9^~jKJaSrgbot;b@qJoMLw>zm{U_s-R!5*mHs6*@KgEx(TUzP(q6M~ z6uGDW#0|dpmlT13NdFB0?|^onJB)xGJC^79RC)f&`To;73_VNkQwi8P=L0lpYx5Ri zICy!5^8hr+(qr)=w`T)zMh0NmA#6<^A#ABY?$AGe)cqzOKmnnIV(Zf{S1{B@-*{ z3&;3Jjc^4lKJ(*#F^Xtk(O^nnD1)s9qdiAlhrqK-0PuTB)b457{x9Pga{u*?Wxq|K zf)tGbjwPf_ofJ0o&*<1XP#kcXnpy#!&dY%rmiHgjp@Gu9Bt?FBE>8ry_J(RXZy;>F z8RLl}*44!!F}i4x@y`SSW)-YgTVpO@P9H~kPL%19cK&|&It$yLPP=3XlX5@PbN=w| zyN53RF^X8a>O$J#i%%=ITWe)mTJ+jGdz%J`Ihw(_5*aD-c z(+r=f8HTG{UUG4KC^^^Ki##6}eGsaii&Q&k+Fc*uT%tf-29Sy#)R}Wr9pS?4cu-zZ zYgf%Cdw>Zwsu4k9T8aAiJ(GTjo_}JmQEQ;)4am062_7#f0*5buavG_CEbZ;w589tj<}q`lA`B2%YMBq7 z#>@nn;}y-5q_DJ^kKQo6)7!42S;|~_H|!h<^nwVnP;_aV$k44K;xRLDmon|0*jzSg zA|5bh_V&Qj_AEwnk~f@>9Pwo}kmYi<@jddRBDM3OA1qF6hML~g5=KLJ0o$(0sfT&{ z(Bt!nfDyn^DD>@0WX#-=UyW(g_t~Jc9~p_4mej%MNu=zCRuC7_w_6YNa6jz(_}oZ^ zpKX&P{6fUSCaJn4qi2sjU}Vn380ZHYNlbZ?6`e6L4)jI})-}(AZix{K+m)YMAL^RS z82?4FmjqrWjZ24m3hFbA7_O!>JtcA;vuEQNNouFoKiM$6Q#bYoBrZ;!iU-Ym)cIz+ zQ#?PBo!K>5ni>&dni5a>Ztre@`WRX+pqr;TIha`+cOpen1zWfDp3#H~=ORh5s>>fx zaB)ye^F41EU;=UK9nZ>U&hZ8x&uhy!U4RtdEstYhF2shhR(D(#c)FM|pe5^*sc0xy zw}DR^9F7rKRsDOXc(U8|U-FIr};=?DZ@?@FZ37R=O zPjjY?mglw-{p-_TpYP@@#TbL&vi1i)1G}2Yf!@_*Y>pF-)Z0>5aJaiaS1_~XP0sPg$nWD9 zo#!Zy1Ic;fIq#Yr3)pg$8yfkfegDwHrG2nbN1X|}2d3`o>T_t| z9LBWN(=n<+l(6cN7uFtF=)k>AFwA#e)a*kG$iou#bI&@DQg%3x-nA-J#b1BsY1a?Im5lGSui%s0@q`*`unb6Kf`L zOx!zZfzu+xC02J;A*VPtlOxIN^{teAZVkwAPWg z$J-?q{@w8PnX5sP3J1ztdrKu=(bpc8J1GWv{8@WF*W$Y-^|;T8us2|(X;ccU*2~Z( zvzKWqTWS~AhVyV05U{4q$aA))ZY+Qd6rN&i$ZThp@Am7(p{6BEye*^LPRSy=$$ZIH zQq|8iz0y36w`|JTXtl{L{SFT`#R@{S`PBe#uFGj1$D16yP@@Z1YxR9a5`JNiS(A*u ze2px$@O14QJt7-l2<_C9tkzb!v6RAPXZy@hWb?XJPu-D!$3p@;YS+Po!=`FGg(<(k z6Dce+P#GWzoB3HI8p*e2Q&<%yrB?eq6@E>ZLcOh@9ve?bN0f3y5$|tJ>>$EOX~4k7AlPikYq1Qjac_cvVM$ zZ#Xvn%=GI=W3-ba6w9@yKey|<+7)0Z4f&#}N~^yc%G5*a&y2S)e`OD9ilUP!V?v}B z9*15xv>Lrt&=0k}kdwJd+38fvz1pG5GxXi^sEsBTZ~Wk=LXkG;>nat}-*~IE=S^LO zUbct#W%bK5%?lq|s>+Ny5f9FEvyz;i!#n`!frBF_nj8_sE@N0^XyU+s)7HX}$VQ58 ze`5WWQE(k}YoFej$inz4hMeHdAY*J<639C2C$QFNNrSH#U=!CisfuD^P09||q~=ij zHV1|pHtPnoC!6ea?;6i%N$D_K;R1EAKPpDP*d7~_+3%OFT~Na6)G=H!e=EPOmp3Wt z04typ78=}^8T8s%P*8e}2gFZbAiS5#tyj3q^7 zp(Nu9oNk+n9L&lO@cUl~-jbLk~P7rmE(HouQlL=i%Jpj6cCSfx3>Pou6SH+1gD5l~CLGR$>6f5~dh} z<}Y3CYV}%R%uo-SJscDnfqM?8V#Msxc{`I}n8(f4*Vm?|xqld(OsemR&XA5)^|zmk zqbfCHw94V$RqLH|_U11tF(u%yu8`$K8RR2OZC!%NKx9!rD~?_CW@Mv9lxwztpS7ZL zTF$Z2Vd)4$=k;LgDU{c!uSrbbcJcsPK?G@ctZ4g}?|t4{wdvjV}sxVcLjjcI4gXAQa0d>9zPmiEFx& zeAkzwpV>R-<|vF4-z;-k$jR5MPDH{A9&UB?be{JOlvyt3aMAimP7oh9!F~foF|7-n zb$-aKmHqi3fs)D!)(LerGzY8eYvrg%3WT(@Yj~(gu7vvumFL7c_h#%< z=0n%20!mpcimDlsQYI$LAv(VF%I0J)XvD%`NdxYUOW_IY3Mf*%;Q@ngK}GJu2sttuMK9+| z6aN&{ZMNgC8UFa9>&BH=#cXB;Sre$5Mr*J{voc_aVv^tOQ4Zh3LI+Q;ANdZ)v$CjKihOIPmHetQ}kEkFjPhN|Gp%a$e5_|J0vx?03f8 z{mI~OdDyh+oFKruAr(Vtf^tBNZfByIsW|q<8eb&5#BPB1~1D zC@Lb%nMyV<>T}8PVVs6w7H{`8zC`SVThIOc{u5c+?=g*HU@@LX-GS}nMo+)$+k}Mt zWV|m?yvy@0BY!n~ZoZ)ZqM|kl$kcQ9R$&< zx+95Ar!x;Q1JF`==$qpv@uZ?2CJ_i;(+FG0|ILzp5LM9j;UK8RF(si=6Qgbc~$86N^H=gEFQe`t1^sarW z#po!tm)o@K(+eBjS+nojDhW$wQN*3%`Mmo};lE_$AGg4U`x5M@7!mt+wtfYuRLVi< zoKN6EL;rhAQM75R@>DgL(A1(_&(hm=feB1bLvuS0csOGGyBGC#i+w&Yn;);;b-@%_L)?b=yt&C-YdbdB&4Q^Xf_XnCM*5?^jAMj3JmX_ZBpU6DwkbXC`U!J6DJFLogY z6=?e|(Zft}-Y-Q`H>?KMn6^i1-H%G!&N1~+f^lZ!kW8Q>jE~--?Xld#Y^q{ z<&*JtJS2Vo`}Pn^Wf_ljSvOOzA-}@DWU@+suqd#GePO;KI!Z4zqNCqaBXhEf9Ub5v z0;^d5ILO~`HWCFpG^cs-+A_iYKqF`0qS@nBX_XoL?m1&%IytBQtX#V=Q(N{8#6lE| zyOk^Q*ABZ7X4>|gqo8=GU`JOG!C^_sLm0&+7u0kJ zQYB+kN@p*t&t85GyEh=8=e;Cpj`HZ8EU-)--}UGhLmp|>j{RYIXBLhqy;e9tQP-Hf z=9yJ$V%gmLvxRX=6R~9Ptv+fi8FQThb|G;H9j1Tuq3BMsQa zq9ouY_(N~o{rhBPVGuFQ1eyA%b(169)*SqeX12UTgnH^v<8A;Ggf6ELB(6H?#}IIE zbY)eSe%cv1SKjSVB$>yCR3Nm0C=O;F)u~E&%|}tdI$x$r|GLCSSA=`uyS4=pWdyn7 z%@&t$GZLGROA?7-i`79tZV)bT?3L)OQ@oP>V8*PHuP!wo_V?pd>VWA@i7w2JFOH8>NOk398Ed{F z0n=+;u!h1w36UgEnRe)m6~qG42a*_CUMcgIn9$|*r3tW?CF zp@ggXva~VGYs5faWzLlJWpZ0>GsBe#yYf%aL4!st?x%ZIjzp0%d62;#)Vu2+`BHE_ zre5YvFCXmu1)8Fo+tMp(*nSd3IC19%gD-**+0;pB;*Mhxh3>~uNP+R~QPG7M17Xzj z)N3U4xr+fozm!*Ra20zOYQCEA#k2Ra;9#8-GHa2eFJg=yEId_!k4^25BTT;B@TZ8& zyjo6FEdCuQA-?mOH|S!~gem;)zaAf>$jsX4&mb+2lps1Kh^$t6BM{^ZjJxx`xJ>+% zUs0~cC}7|pi1ou4OwYCUB&R^_5!bj?nHyQvrC zPFy@jyKWAoY>N5NIDPAWpKuyc4dRT9QL$aEIH#;>)=)+eBFx43`k)P^u}T}=_)z?#AvExs1)3aI) z$L)M)DDh%{cEl=v@+c3|6}jIj{)Lisr>0kxCH9jywqJm>%TBASqEuG0BLp_ef1^N4 z*hRs6$3LaCKvtutSFCWiqb%!`)#-C&jfFG^mVoRrA6qhx)4&$M4T(f&j0Ulgh8O&P zaMUSUMhJCnw>}gq3F(-H`)F@Bm%pGp6xg|L7vyh;ukbA$&bbck`+;b9pOW}ebw(+= z0k`TjZn_Zet{*QXkK4mHJ&x~`*7NybY;fK|{q5>6oiZ*2F^S+;_6Ls`NzS3ivdI>)p?=#l_U zGgHiBV;XKI#i^NP={&3eI#dEbdNugJmRFq5LawoNGNL3QPb1O?ZhP1x0PVIa*s|y5 z_utXysD@3UdtbK{!bQ2B(FIwar)IrauX8~&3C5zAIpe=TI=(nMupjX4SaW%0FbT*< zcR+dxD9bw5uqJe)-^#gwz8)A>B&4?H*fVsQSWl0q|2*AXgZOgbzAjCRD_8Q3S$r=w_=HwTIsyWPhR7>QAl zW;AgbuyRXXFK2Q>*<{JbCEo}woOm+bdHK%5Fx|<&%3y`_OOnB}UQ_Vb=0e9mn<{nt zV%ufbh5}=+-4{<)8KS?W%Z-(B-e@@3d%bi&x)(O0c|4q>y8FRk#5C=$?fGJz`=NGr zgDHzh`vXL+=Myy}07Iv@BnZpSE1UR-W8}QreT` z7b`g*wLb1jZHy1iobnR8<*+KYl=bHvX-`bW)i2*`xr;aHgO^LC6-4@necHj96)a7c zey^iBMeAXk{3r%>hla;{5R~%?@Hwg)u9Gbk}C+77mpxWnavTSW4yQ@HnSMJ))GTzX{ zol9lOfn#Gaw(x2h@(!p@aqG=t*SDQmnJNjB4U`#E55sP^jJyD&W`U9fq#JA}Tq3+4@G1ybK-uom<^71V0(suMmIsaeNYd|5ti}`OXWZ zFHJxoETHANrmb0_*M~A-ROjl^$$@D$SixQC;el{#Zdcz{UU^sWf{<$KUcFC%$)ImFrkf zehT@FHe&8{QH79sw%Ub5bcy-|{^F(XS4QC;jEAr#cjZH|8q+Xn;jRPs>ogr2kp6T@ ztQ|TPp&{!AA+%GqAq?08W|s&GX_Zsti0*~HX*#gdZ%N2E_fr;IIMN%BM?yVOmg`FH zl`g-ICyl5N$hQ2;2WJnM9?1h{XW<2sa)CXmW%imYM)u!;@lAabO<*iHE=Z}atbGA# zSOPnUu;sCtr#zP9ZRuI}@H`r7vNs=be;VdS9&-en=4~e7nG2SBiUr~_{A<)CuJ9{5 z=!noiA6(;~nR=M@IUqHFJycU=VM1*v*C)yl801#opym6a?`1)f0iO?BdWNMBs|U7| z!NR=N@oe6b0rU z@tJ`sV8y`xKtfdW-V#=N=zaVh3>dAsKCd~?w?C5SB=D@x4#Bp+Y^SI9u90876S{%f zTe&ouU}rHUhGFH}l(OD*DY@=ug#TUgJulI#ziByFkrI)vcnxvE8k`=`uIx=HGQW$C zA=m=pxGfE1=KxF$>Dpuu<;yTfUE{=k|Y4DyE>?ihpmnUg_;%nMSUC{*BZJwT~t9tF%=X zX4QrkeKZwUJ+2+3)GA;&KW09BBc{~QddIk6toWvEpTod4L+=rBz#nQ!`c4$^5_}Sc znPNjv!Zl>@J(O3qlUH|O4Bs=YQs5x(w%p%O1z3+O;R8c1$Z~}{8>d};;o9O3Buv9Z?RPuYvG#q+8Bv%c|w2;|= zc(DG1Pt0-kyW88chBB`!T9YGq4ehD>7^fNWV_*?`z4?a)$9_L+t&k1*pp(@KS6FyW z*ok=$6m|fTkTQl5hFnUPP%K+B1-bVyl0ptH!N!2@N9cuGbzaO z*vv_a^XcW;l>pXx`Gxm|v%d$d7H|we4jr)CXM!(Hz)C%!Q_SPKlyFF=)NPb^lHFGJ zUsB1iNr%yDBw!sTm&;!;6C#JIVs6_{?S%dCgD2`$#FhhcZ3TAn&t;u*s2y?K%+3|KwIzsLJ9>sKEVV#Q{np<8KTQ`=}gt`?k zSQoNc3Ai8i(^`sI%988oXga}`_VzOeWgH&2eX>q!0nv@yD815oNPiOv#JNBF$&uZ2 zKNQrRX=4FhJz9%R$Uf~7Q37k$O$s`0?-+psG!?;PzP!G44r{uBQtu^RJlUpjWa`lZ zzSc9vJHF&yMrl48T_6d_sc9rE`NZ-^^Ox_3RER$m=MpJJxrHJO4|^U#yG;tV2omuj zEg3(N+vh>H=4H;;WrR$DKU~$oeNe(Mi7&$mTw$La#+wy$2kjGO>wg)_0b$2%n#mD+ z5FZ8vb zzW5>D{>*z`jCFW}#_<7Pk?YpRdxbjQ` z>EIJ8S0eQl#9~-jF?Mj&VIbLTaPjBd2mTzX#^1f>!9K^P%V6z7FZR01oagC#wuV4q z=`x~tenCI>iiFbmN;PT722{AvT^mUP2jh-}M^KKKC1h>amresZNkSSw#AbDqRX zzZ~6X1ZU6^a<-Ek9P}0v4+nxaPfs@SG^|9NA9?1GVVnNqLBFop<3(hZW<1{R7V-y9 z#;kixX$Mic8TEbbCtF=(+MWk;tzLCpjmTf14$bD;m$I{T!x9DVhIKNEDKf@o%N3Pw zI9d8&I|?G)PId*$YPb@PIpL`CyAzui-nBq8U8S{jci{sVaqCB>VB7^D5|lJ# z0D2{1K7P*l!AU;$+OV9SmGn*VF{%Q=YE>?b|IiwZUKM>!$;A;b{9+X0Kmyw=@uqRN z2Qt<=&hcdOJd(dL)Mw#)*|u@)1vKH1HIB;)g7egl+AeXjGO0OPj{+??s=;lIB2OM5 za#T|>jb&f#C-2Y191#o6mc<(wzI0RG9gp$Lmi7+`z(Sv65-5QRimm&^ui1fqX`>lR zzu*^t(WbDXqPe(_KDLmeNwK;LhNl=6Df!V*@0<%m%ubmO%=MtFrWbo+2KSLy$-Xmt z8pOR%<+uy7?XCV3f~9ee`~*+t?r?Bbw;Qo=GtMw=#kUL$oeL1I7YmS-gLG(s7K&+_ z9<<6FL^Hy0YVopBude;C?dPUdK=bnTNh66CH&20$qMg!n8i+mIAu1L#qAr_oSozY@ z$0XkICJ;D{GKp@SD?P%H9~T^wiiXyMeA>VqUmiCG6zSW4yGdYo{+^Mu6Uj8tD!(pX zq%PSOAwDmo?P;k!-i_?fve&H?u1o!EfQGQ2DYM1w+tZ_tuf#N-ly++16aRy~_Y7-d z`}@6dvjrPq0i*>)MUbi#BcVh~4>sM?4WJ%Y+U)I!qD;irWkVq4Wh&yorB(+;3k zHaoLj0NaoAEuJMRt!ESYdXiVidedHbuC)Ahbt$#fO;|xvHQ`u?M zPE&i<>8bd3pKITOU#woP>nbi%W6#foF#in!;%^i!&_=4R)Mw;z5m|~SBO_+r`v~vk zjhYHyjQaGAr!O=COHTI5-C$F!=WwxXrq18B)oV>m3i`VkQX2yEv?7T?(=qAeJ()qw z%Uuu#sXB91wv#V|-rGI4RmkQ^lhZJ|`yuq4GSi28zMfQ)G!sg*;_@t)lCHVueq5k@ z&UXKjLBh}S$&pOv$m6nX*#VH!5GM7C8R_y``HgSVrh7uh<+7^eCK&MSXY|sy`-d3t4C@jYAtDi?Ltd z3ytiIiZm2!zjNpkTvv;td5O@?_;O9f!2T~9P3`(9$mz#Sj)fSKc>AF11S!wntD@AQ zj+ti8CefCje9rnsR3UWm)Wv99QW&4B6{W8wKc05zB_G29hkcd(V?{QO5LE>*$FMbY zGmRC3HJ&Rr7>(gRMMKV(KSlGPLR0;}PN3Yrp5$5utIX`OvV6F}^m0dKtS@l##wrt> z=Jj)S?6XG`rsp=N+?<(&8}TU{wli%kw6Os3^854htlSvl`zbVT+OeqgQ>U8L7#*D` z4Ncn_;JcErowbsht&~8*?2YI&9~TjD;VC22McCx$Z=5fGCK>`DP$qa)6F82;^(pg@ zQ*J755ByP0w_p1ORPa^Cq0SH?^$NNfgDT*t*Li zj^r?YX5uGJw0kthnO3KGb?F~Gn&ZY+&s5!?NQU+IpV#;L|jGjC4)#tHxP4Vr(f{|Dav^#Au~{ysz^$UCuqo@wkJ z%~Qp$Y0viOeRl(LCk~HU=7HJ%!J5J&-6Nef#Lh?cJtU5z}Mk>+3N*aoC0U?XGfis5`R2a9z7U#WfV6Yv1;9 zV+P4{l>iv@cCPM6NH1-I^g&#G-r30tJZ7h|!1vyk;Y8@GWfECFr201K6s5l=HoE zs1Cv2clQiM0F#!-p&-I0%{)N^u@VwwVXF6n_$Qa=|@`f}2TF^BnE z^`C#_DCKQn+@*AA<0v~Vp|=Ve;pp|4;U;Za;=%LX_^TBKh1bz@6AV1orp$<@k%q*9%yk0&R`NPD!0y0NDDc>1eE7K5OLKf=v%aZe zuGZWFM!0$}pH}2wSXokMF5Y*5fmP(Q=MFuSrrUg>5_60eSc0`XBW^nJaq82vx6EcR z>&ucZENz6mFJ1#*m;x9O3X`J8YhbU*`~5Bt4Cwd`Y?D+EQ>vA|889gJN02nI_!kFi z&Q=&dIvTC*IyV)VGKRvD8G_|f@~TWN{itIJH<&0Yz}y-)M$s3@Hl z^?hEXp``1Y1Q|9b#jjsHx9nC4Wq7+wf9hRX$b=EvKXt+Vwzk8Aya^);a4Fh5Z~WQ* z%y6$}1ZU>F-qH$?EPtOqReIljD$J%|+jX#jpFmEs!RU^no4gSIo>^!2^qcHF@K*k& z$csSYt0r;b2uvg8`Q&>ZPI!0O(ox3Cd?E<6dE~VsFmcIHiID)D}wEi={K5)3kM$%IW_Lbky3NH6)W!|K?B->V^Vf*(x z=lZXCw!S0L?22=I%k>8qtCP=5yLa9%qakypHKL-Qawy0U>!L(jY54!-mHA-OnzcrHBVyDTN-ei(tzJaKK^)6pzwY?;b4vF*yH~62)_Z5LS4CZ8dDw&67K~HvMVM(^mY$yeMDmwPnhxd|cELm<20khcx;8g~D z@h%d+pUf{qm*8asG9tcnYXnN{|HMlS^s`6Wv8;kYW{Z9CjuYZ#2hT1=1`C`MYo#vm zBqnq}{aKI&bDx1^Y`2=`4@s9@Ki6`ykd|*v%XqKrfDL%4W8ocPLs5pNkiO$uAOL;n zz9&~e{@o7#-izFb~k8vs3}UD>HM~^cXig zO!l_X1pUMm1p$SLf?z)XzOE`UQE2vD+xr95R_*MKP;GeOn%$RXLPdYd9b2y$vl$fQ zaQ0mPgR2a$i#*KZgM0_S7eM=bS7NCbht3^U;+dVYX@(+wUgNaC`G=-iqLH7k{d8 zrzEhR)vYbo!A1pT@x+0Epr+$~LPw3L41`!|T=L6S%{ucdV^|cVfaC`Wvm$O(=pDe0 z_Q(+VI6jOwrVWn&pfK=wee&sPETizbdclS2+49-IrXPl*0w76gmuFS5pn5J#^E2y~h9JS)>U)2onxl-WOQkMP%ox13Hi9F2^zpMh*m$dmOeR=3gN@RNU$iU&TIq0|> zpnW^4AuG2cV2gVY(Vz@Ed4{z&5pdrKMRXpoa5G{}V`O}XK4`se;=PMAM$S9Pui8NN z#f|5qYl~UkN?;mgFefvTTwAB(3B8iU#Eds2akbcdcnh{zVfXC2 zD$NR6QL^^0A^^AxzJsH?4V0hby*AGU7n3}sa?3f_W*2{tgY+&e|5mtdIYby6Jb06hN&Gi(*)k{vWt_x_AYYV>q zvW+z&&>F!^sb1AXvJj@O>3nvqm^4WK0f(XY=BMc=X!|6O zRQGQoA7c%IKF`bvX3LH-cWxMPi5ucwrq3D#MO>#az#%I2GZUoy=lp={q znx|NSN--u&Gr9d;2bS#yMupoPw?ayx7X_et9}PyK*wP@{aVxv0-Rr}brGU38?CbNx@`9JV+b*@0xk(R`7XvvFyZHpQ;cV3erC zxmBZ6UtyWH=>KGj;i*R_mH?(Donr33(~OwVXxAV7xRs%CY3lF$Cw1l-A$251HNqq{nUNV^}>eq(!I)h;{xX0`I%M~OGC+aZz^I>&F-t_v~Qo27-(y+4-h z{mLL1UrrWitUWdT$#Ve=)*6z7gK%_tOP9$G@ku>a|2@bkJ*RCn{zEwi z`ezq;d891!Ky6^h4ePv9nE(+akI@gFweYGi)j-{MhB?oah@3E4X~S-QHv40@=zcLd z=-T`BF=%$o{PYO6P<$uV0POjv;ej)hAsd<5R-Z=BJ?-zGe86{W8jpxYoF8G*v{bv7 zSjkw4_n&57Aa}ZS^FT=U#Ovxd$tH>#Kj-biy$rM>9pwOPb&UCFw%?}MC!fM$)UGup zi%CHAS6{ha)>dqmxJa+0-*{H$KjTZ^SSB|Y0h>(N=v+A<8n<-zlcT&C|9+hQf*f|* z(Ld7l!OKWhT8BMB+*KTGF`-CrxDD3p5dZ+tgc`329rRc2S96+PN#lU-vbV_T%W z>1ui6gbT`*&Dv_XZ-yykr73(kANN{{5R=&lu2{*iHDA@q!ebdXM@@a@P+AV~*B-__5{G zq&ML`?oy-IfLX?nweIjei>Ao~w7WdC?L{E*O}Fh4p7yi>_pxoMorMzzn9UU0SqRHy z_vJ!9HXH~d52$JlMM>EVQ@13b>NO}F6QxXIH_xpX2>DdNnR>L{qL|sQmFDghuZpJc zZ~oVCnM(o5V*aL4sO<%vP)4VTgO$!8f+Q!?aSrDd{&b6m%E%tU^(h7rSSBjo#}lkN z`I8U17%tM|)x9b%oRa>jzOR(?f&XQTl^$$g4(COq!1>;F(5*B$w}q4|@hys6l%n&^ zG~eC4ke&2d`oVR5?b`qik7#I zK~G0}+~GO*i%d=%lsTL=0Q(xj>%u9=3_uC+_vhu}Ti}vmFk+|m^1{qh%h7fZtz+m0 z8t0tYsqrJVFa2!(_a7jucvl9al3xZYphf>;L(rN5{lh^9BIyS!3<-1OBR4I#wbL^B zWLRXWS))1WPO`klq+iRaRK&_!h0iZ3k+R5WXg~t?`A{ZvzM-F2l0v`trM22sCK%fi zXB|1LN^`DOrG@8OVP0G;ER$jW3sqlbfdqn^(!ueW%{u3<_c$!wQ zI!enf40WdlK@uEFiZ|Wkbko*uQ1>1jlo{}J_MG|Grs5hbB3Z$aaCKaRxV%^%zalUP zy&VW(Lisvx4E;>J(haL-o1G(&n-tH$VJ*eFrLtk7n1 zqeoQTCgkYJ!~wB11-+_q_O(Rb<5%7j+~%)$9m52+GOk{ z*17k$34A)~2-tCdG@#VUCkRJ5Q@(nG6>S*AoH1jid2y1D9f8h7N^)LHPp3}6nx%r9 zxRBNn?Rj{GdFKPCpV?O0%W^J`c53$B>znR~#LAoK0U?pd;GV#hEEkl4e7%RFL^#25 z&NK(_ohW%eB_M78AgDs8Jq54PbtZx5Z+%;KbL6dDTFZ%`qO}+=qg>FM@;yLGR~>gVJaP;mcN*K%N$~0+|J921qg{!B zy=1?3@b`f-V2|hP{B&raquXAaveGOEUx)1Y%q%Q)XiJP&JY{BxW)J;@Tt&V)e0Y5G z+t5W4d#;zK__wDo5%^`@B2FWnP6i75(3ct**m`NHtaOM5ef@V}u`m-ml$k}M`GmM| zqv6?--OABX9JE{Bab@Y2C)Rxy#J`>fl=-{OriGbody_Pt&Dq5>cO?#$uDf?GFa|@3 zX>{8Af+*5ggGRgV3C|jQUQ6tzszUpE&-)61$y(|0oR;Dz-%chEP*d{n@7Ff=Cynl{ zvV@Y@gYgm=sSsS~njx2j)LVn4EIujJqBBC;Ymm1-wk>E#Lf^{EKTZiAg)06KZ1Qh( z|9YhGl=^H>Zx$!WR>EttlClDnkt81Ib+te3a^2u#&0RlANUhWX(2Sqt-{q$;LR!~J zO}2+q#P7dG@DjX@*x6LaPD|qCwFL-`sl>v|QC`6N^j2CjM0j6Yha?d*>~ z*CLP-urc=1l$c>4{fvLZZbVja&uRD=08l!o)TzYS5j(Rq3BK1Ce+LaGdyi{X;HnZm zLtwC^zVAXSAO%2i@)!4B5YCZ&@5xn7y4JnGBM`X@F$&L9K;iArtr{5qj;XNjVRr0z z`m&x0tgj&l@E%EsBe8zQZ3)VecwLoyw7V0ww`!z?|8isFl|-15?XR4k8FKa5SbaCu z`L8$`)8y@0Chq$zJVOU3u}=^~JZ0Pmnd}OWA}%$cEOhjx_r~HjOlkuS+YJolncOQz z4zkzK_kttggMM;3x zH(r1Ewa_De^F)9Ps>rML><(4F1hiR!PVRvw>lAEuNLMPVS`w(ctt~Av)l5(MMTDva zU&Vt*nY%HB#U9^J2azIUhHQT#==(vXJ~mdtlad;*50(lX-P>a`PIa7RvAnF2p0nk? za)(DgyT^-*`l6e&T*uUZ>Ur4}e$uwy=wizQBzi4#?Jn+BD10ucge0zD>y5~a>{i}^ zFKWQ^tveD7FbB%CZ}-N4u0ukj^Uy-r?A!QMcr3jTNJ!*uw+^xICmU3(2q)-@qRht| z>XZ7ZwXf7KV<@bEEL3RS4QN=b)YVC5XZWLg;M3hk=%RbRD%5(QjHZXS{KfSTz94Wc zvsM!5Jq0b9B)4{>RqH*zw;HvUl6-;=7iWE){mhRohpd^W3FR%V?hK+&xMySY+OJ!g zBOV@OA%Sy1G!UqH<%$$ef5=w*3735TdgL2N8AQyW_#IA+l;HlZ)#HBfMV zva&c2l=PMpLAjdWx62n{Y+*dz!R6-ysF1ZSFQsoxMpsp*wjP3(+eI4rrn)Q61VG7q z*?d>MavD;KcRC7EE^o=Y1s#-iVI!Z!ir&mX;36fSn-4wZN4`}32qVPwcv!LGcd#>C z)jx7X2C8k%H`<`cu3ImTR=@_h6p{IX53rIom6S-EfyLnxA;KQ|)g6r5az!`)&0+B_ ze63foS+Mf)J9}G#dEs_68=!oaw^Xjd_kkT!d-v;?R_A1J7xI`GgoiJe!ZOr#u9|xz z+jr`*o__joCFfCBwsr{*q4;(uK)4(?rtFu{Ig+Z-jOJ0^X@-i5ti@B)>_TpHT-2>Z z%cf=6{oHFYa3mGkBPS{@RH{!<;QMQZ$_vVmfMo88cO*Giqp#||-`K`j{bq4~$cJM& zXh8`g&tv%n%#&(@gmD5{U4XUpb3b$PqLq5oiP8$!Ig0VFx9KbUPwI

    +
  1. Create a new Service Principal and associate it with your app registration:

    +

    Start by connecting to the Security and Compliance PowerShell module and run the following line to create the service principal. The cmdlets refer below won't be available if you don't connect first (use the Connect-IPPSsession cmdlet). The AppID and ObjectID represent the application id and its object id. You can retrieve these by navigating to your app instance on the Azure Portal or by leveraging the Get-MgApplication cmdlet from the Graph PowerShell SDK. In my case, my custom App Registration in Azure AD is named "MySCApp" and I am giving the name SC-SPN to the new service principal I am creating.

    + +Retrieving an app registration id from the Azure portal. + +PowerShell Script to create a service principal + +``` powershell +$App = Get-MgApplication -Filter "DisplayName eq 'MySCApp'" +New-ServicePrincipal -AppId $App.AppId -ServiceId $App.Id -DisplayName "SC-SPN" +``` +
  2. + +
  3. Grant the eDiscovery Manager role to your new Service Principal:

    +

    Run the following PowerShell command to grant the eDiscovery Manager role to your new Service Principal. The ID passed is the Object ID of the Service Principal you created at the previous step. If you don't have it handy, you can use the Get-ServicePrincipal cmdlet to retrieve it.

    + +Grant the eDiscovery Manager role to your service principal + +``` PowerShell +$SPN = Get-ServicePrincipal -Identity "SC-SPN" +Add-RoleGroupMember -Identity eDiscoveryManager -Member $SPN.ObjectId +``` +
  4. +
+ +
  • +

    Add the Service Principal as a case admin: + +

    The Service Principal requires one last permission in order to be able to retrieve values from the Security and COmpliance center cmdlets. Run the following PowerShell command to add it as a case admin:

    + +Grant the eDiscovery Case Admin role to your service principal + +``` PowerShell +$SPN = Get-ServicePrincipal -Identity "SC-SPN" +Add-eDiscoveryCaseAdmin -User $SPN.Name +``` +

    +
  • + +
  • Grant your app registration the Compliance Administrator role:

    +

    The last required step is to add your app registration to the Compliance Administrator role.

    + +Add your app registration to the compliance administrator role. +
  • + +

    We are now ready to authenticate using our app registration to test and confirm that all is working as expected. To do so, you can use the Connect-M365Tenant cmdlet and pass it the information related to your app registration. Below is an example using our app registration. Replace the appid, tenantid and certificatethumbprint parameters by your own. If you are getting an error connecting, you probably haven't granted the Exchange ManageAsApp permission to your app as described in the following article: https://learn.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps#step-2-assign-api-permissions-to-the-application

    + +Connecting using your app registration and retrieving cases. + +``` PowerShell +Connect-M365Tenant -ApplicationId '8154ba3e-3e73-450e-8690-53cfc0eb0d66' -TenantId 'xxxx.onmicrosoft.com' -CertificateThumbprint 'xxx-xxx-xxx-xxx-xxx' -Workload 'SecurityComplianceCenter' +Get-ComplianceCase +``` + ## Using Authentication in DSC configurations See the next chapter to see how to use the Authentication options in DSC configurations From 1fb2988f00cce8b28840517947feee637b8c769e Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 23 Jun 2023 11:58:15 -0400 Subject: [PATCH 10/40] Update authentication-and-permissions.md --- .../user-guide/get-started/authentication-and-permissions.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/docs/user-guide/get-started/authentication-and-permissions.md b/docs/docs/user-guide/get-started/authentication-and-permissions.md index 2d2aba9cec..2812a87576 100644 --- a/docs/docs/user-guide/get-started/authentication-and-permissions.md +++ b/docs/docs/user-guide/get-started/authentication-and-permissions.md @@ -213,7 +213,7 @@ If you want to leverage Service Principal Authentication (using an App Registrat
  • Create a new Service Principal and associate it with your app registration:

    Start by connecting to the Security and Compliance PowerShell module and run the following line to create the service principal. The cmdlets refer below won't be available if you don't connect first (use the Connect-IPPSsession cmdlet). The AppID and ObjectID represent the application id and its object id. You can retrieve these by navigating to your app instance on the Azure Portal or by leveraging the Get-MgApplication cmdlet from the Graph PowerShell SDK. In my case, my custom App Registration in Azure AD is named "MySCApp" and I am giving the name SC-SPN to the new service principal I am creating.

    -Retrieving an app registration id from the Azure portal. +Retrieving an app registration id from the Azure portal. PowerShell Script to create a service principal @@ -233,7 +233,6 @@ $SPN = Get-ServicePrincipal -Identity "SC-SPN" Add-RoleGroupMember -Identity eDiscoveryManager -Member $SPN.ObjectId ```
  • -
  • Add the Service Principal as a case admin: @@ -248,13 +247,13 @@ Add-eDiscoveryCaseAdmin -User $SPN.Name ```

  • -
  • Grant your app registration the Compliance Administrator role:

    The last required step is to add your app registration to the Compliance Administrator role.

    Add your app registration to the compliance administrator role.
  • +

    We are now ready to authenticate using our app registration to test and confirm that all is working as expected. To do so, you can use the Connect-M365Tenant cmdlet and pass it the information related to your app registration. Below is an example using our app registration. Replace the appid, tenantid and certificatethumbprint parameters by your own. If you are getting an error connecting, you probably haven't granted the Exchange ManageAsApp permission to your app as described in the following article: https://learn.microsoft.com/en-us/powershell/exchange/app-only-auth-powershell-v2?view=exchange-ps#step-2-assign-api-permissions-to-the-application

    Connecting using your app registration and retrieving cases. From 85322e291628d297394db9a4dbae9a7428b500dc Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 23 Jun 2023 13:00:46 -0400 Subject: [PATCH 11/40] FIXES #3402 --- CHANGELOG.md | 3 ++ .../MSFT_EXOAvailabilityConfig.psm1 | 42 +++++++++---------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2432a5f678..c4bdfd739f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ # UNRELEASED +* EXOAvailabilityConfig + * Fixes an error where an error was thrown when the OrgWideAccount wasn't set. + FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 index 020bff550b..98a228b3d4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 @@ -74,34 +74,29 @@ function Get-TargetResource { $AvailabilityConfigs = Get-AvailabilityConfig -ErrorAction Stop - if ($null -ne $AvailabilityConfigs) + if ($null -ne $AvailabilityConfigs -and $null -ne $AvailabilityConfigs.OrgWideAccount) { $AvailabilityConfig = ($AvailabilityConfigs | Where-Object -FilterScript { $_.OrgWideAccount -IMatch $OrgWideAccount }) } - - if ($null -eq $AvailabilityConfig) + else { Write-Verbose -Message "Availability config for $($OrgWideAccount) does not exist." - return $nullReturn } - else - { - $result = @{ - OrgWideAccount = $AvailabilityConfig.OrgWideAccount - Ensure = 'Present' - Credential = $Credential - ApplicationId = $ApplicationId - CertificateThumbprint = $CertificateThumbprint - CertificatePath = $CertificatePath - CertificatePassword = $CertificatePassword - Managedidentity = $ManagedIdentity.IsPresent - TenantId = $TenantId - } - - Write-Verbose -Message "Found Availability Config for $($OrgWideAccount)" - return $result + $result = @{ + OrgWideAccount = $AvailabilityConfig.OrgWideAccount + Ensure = 'Present' + Credential = $Credential + ApplicationId = $ApplicationId + CertificateThumbprint = $CertificateThumbprint + CertificatePath = $CertificatePath + CertificatePassword = $CertificatePassword + Managedidentity = $ManagedIdentity.IsPresent + TenantId = $TenantId } + + Write-Verbose -Message "Found Availability Config for $($OrgWideAccount)" + return $result } catch { @@ -348,8 +343,13 @@ function Export-TargetResource return '' } + $OrgWideValue = "NotConfigured" + if ($null -ne $AvailabilityConfig.OrgWideAccount) + { + $OrgWideValue = $AvailabilityConfig.OrgWideAccount.ToString() + } $Params = @{ - OrgWideAccount = $AvailabilityConfig.OrgWideAccount.ToString() + OrgWideAccount = $OrgWideValue Credential = $Credential ApplicationId = $ApplicationId TenantId = $TenantId From 0d84f587b020dc45ad34db667e00902248a5e815 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 09:27:36 -0400 Subject: [PATCH 12/40] FIXES #3407 --- CHANGELOG.md | 9 +++++++ ...neDeviceEnrollmentPlatformRestriction.psm1 | 26 ++++--------------- 2 files changed, 14 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2432a5f678..9c115cb74f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ # UNRELEASED +<<<<<<< Updated upstream +======= +* EXOAvailabilityConfig + * Fixes an error where an error was thrown when the OrgWideAccount wasn't set. + FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) +* IntuneDeviceEnrollmentPlatformRestriction + * Fixes an error where the WindowsMobileRestriction property was still being assessed dispite it being deprecated. + FIXES [#3407](https://github.com/microsoft/Microsoft365DSC/issues/3407) +>>>>>>> Stashed changes * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceEnrollmentPlatformRestriction/MSFT_IntuneDeviceEnrollmentPlatformRestriction.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceEnrollmentPlatformRestriction/MSFT_IntuneDeviceEnrollmentPlatformRestriction.psm1 index f1d1d48447..8bcbc736e7 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceEnrollmentPlatformRestriction/MSFT_IntuneDeviceEnrollmentPlatformRestriction.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_IntuneDeviceEnrollmentPlatformRestriction/MSFT_IntuneDeviceEnrollmentPlatformRestriction.psm1 @@ -110,20 +110,6 @@ function Get-TargetResource { $config = Get-MgDeviceManagementDeviceEnrollmentConfiguration -DeviceEnrollmentConfigurationId $Identity -ErrorAction silentlyContinue - <# - Not using the DisplayName as a key due to android profiles - Android profile are generated using 2 singlePlatformRestriction policies: 1 for android and 1 for androidForWork - Both policies have the same name - - if ($null -eq $config) - { - Write-Verbose -Message "No Device Enrollment Platform Restriction {$Identity} was found" - - $config = Get-MgDeviceManagementDeviceEnrollmentConfiguration -Filter "displayName eq '$DisplayName'" -ErrorAction silentlyContinue| Where-Object -FilterScript { ` - $_.AdditionalProperties.'@odata.type' -like '#microsoft.graph.deviceEnrollmentPlatform*Configuration' } - } - #> - if ($null -eq $config) { Write-Verbose -Message "No Device Enrollment Platform Restriction {$Identity} was found" @@ -536,7 +522,7 @@ function Test-TargetResource { $source = $PSBoundParameters.$key $target = $CurrentValues.$key - if ($source.getType().Name -like '*CimInstance*') + if ($source.getType().Name -like '*CimInstance*' -and $key -ne 'WindowsMobileRestriction') { $source = Get-M365DSCDRGComplexTypeToHashtable -ComplexObject $source @@ -551,7 +537,6 @@ function Test-TargetResource } $ValuesToCheck.Remove($key) | Out-Null - } } @@ -560,9 +545,7 @@ function Test-TargetResource $ValuesToCheck.Remove('TenantId') | Out-Null $ValuesToCheck.Remove('ApplicationSecret') | Out-Null $ValuesToCheck.Remove('Id') | Out-Null - - #Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)" - #Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $ValuesToCheck)" + $ValuesToCheck.Remove('WindowsMobileRestriction') | Out-Null #Convert any DateTime to String foreach ($key in $ValuesToCheck.Keys) @@ -574,9 +557,12 @@ function Test-TargetResource } } + Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)" + Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $PSBoundParameters)" #Compare basic parameters if ($testResult) { + Write-Verbose -Message "Comparing the current values with the desired ones" $testResult = Test-M365DSCParameterState -CurrentValues $CurrentValues ` -Source $($MyInvocation.MyCommand.Source) ` -DesiredValues $PSBoundParameters ` @@ -959,8 +945,6 @@ function Get-DevicePlatformRestrictionSetting } } $results.add($keyName, $hash) - - #$results.add($keyName,[Hashtable]::new($platformRestrictions.$key)) } } From 9ee61e8001dabef385f4739f0df3a542859cc732 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 09:27:57 -0400 Subject: [PATCH 13/40] FIXES #3407 --- CHANGELOG.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c115cb74f..38b1be973e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,13 @@ # UNRELEASED -<<<<<<< Updated upstream -======= * EXOAvailabilityConfig * Fixes an error where an error was thrown when the OrgWideAccount wasn't set. FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) * IntuneDeviceEnrollmentPlatformRestriction * Fixes an error where the WindowsMobileRestriction property was still being assessed dispite it being deprecated. FIXES [#3407](https://github.com/microsoft/Microsoft365DSC/issues/3407) ->>>>>>> Stashed changes + * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. From 1ccfb9b0c545ee3b24f2a5c281e593aec9815a9c Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 10:31:53 -0400 Subject: [PATCH 14/40] Update MSFT_EXOAvailabilityConfig.psm1 --- .../MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 index 98a228b3d4..9bf80ec4b8 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_EXOAvailabilityConfig/MSFT_EXOAvailabilityConfig.psm1 @@ -78,7 +78,7 @@ function Get-TargetResource { $AvailabilityConfig = ($AvailabilityConfigs | Where-Object -FilterScript { $_.OrgWideAccount -IMatch $OrgWideAccount }) } - else + if ($null -eq $AvailabilityConfig) { Write-Verbose -Message "Availability config for $($OrgWideAccount) does not exist." return $nullReturn From 5b46c88f14e066ee0af91052ada4162deea4cd1b Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 14:24:23 -0400 Subject: [PATCH 15/40] FIXES #3417 --- CHANGELOG.md | 3 ++ .../Modules/M365DSCPermissions.psm1 | 40 +++++++++++++------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ef5ce52bb3..889ab12d81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ FIXES [#3407](https://github.com/microsoft/Microsoft365DSC/issues/3407) * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. +* MISC + * Fixes an issue with Update-M365DSCAzureAdApplication where it was throwing an eroor complaining about duplicate keys. + FIXES #3417 # 1.23.621.1 diff --git a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 index 285cc661e8..b06aaaf576 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 @@ -1414,8 +1414,7 @@ function Update-M365DSCAzureAdApplication { Write-LogEntry ' ' Write-LogEntry 'Checking app permissions' - $permissionsSet = $false - $allRequiredAccess = @() + $allRequiredAccess = @{} foreach ($permission in $Permissions) { if ($permission.Api -eq $null -or $permission.Api -notin @('Graph', 'SharePoint', 'Exchange')) @@ -1445,9 +1444,11 @@ function Update-M365DSCAzureAdApplication if ($null -eq $appRole) { - $currentAPIAccess = @{ - ResourceAppId = $svcprincipal.AppId - ResourceAccess = @() + $currentAPIAccess = $allRequiredAccess.($svcprincipal.AppId) + + if ($null -eq $currentAPIAccess) + { + $allRequiredAccess.Add(($svcprincipal.AppId), @()) } $role = $svcPrincipal.AppRoles | Where-Object -FilterScript { $_.Value -eq $permission.PermissionName } if ($null -eq $role) @@ -1468,13 +1469,7 @@ function Update-M365DSCAzureAdApplication Type = 'Role' } } - $currentAPIAccess.ResourceAccess += $appPermission - $permissionsSet = $true - - if ($null -ne $currentAPIAccess) - { - $allRequiredAccess += $currentAPIAccess - } + $allRequiredAccess.($svcprincipal.AppId) += $appPermission } else { @@ -1482,8 +1477,27 @@ function Update-M365DSCAzureAdApplication } } + $requiredResourceAccess = @() + foreach ($provider in $allRequiredAccess.Keys) + { + $valueToAdd = @{ + ResourceAppId = $provider + ResourceAccess = @() + } + + foreach ($permissionEntry in $allRequiredAccess.$provider) + { + $permissionToAdd = @{ + Type = $permissionEntry.Type + Id = $permissionEntry.Id + } + $valueToAdd.ResourceAccess += $permissionToAdd + } + $requiredResourceAccess += $valueToAdd + } + Update-MgApplication -ApplicationId ($azureADApp.Id) ` - -RequiredResourceAccess $allRequiredAccess | Out-Null + -RequiredResourceAccess $requiredResourceAccess | Out-Null Write-LogEntry ' Permission updated for application' From 787512f07187265bc40c0f43fbeac8ce5d92e97b Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 15:02:50 -0400 Subject: [PATCH 16/40] Update MSFT_AADAuthenticationMethodPolicyAuthenticator.psm1 --- ...thenticationMethodPolicyAuthenticator.psm1 | 106 +++++------------- 1 file changed, 30 insertions(+), 76 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADAuthenticationMethodPolicyAuthenticator/MSFT_AADAuthenticationMethodPolicyAuthenticator.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADAuthenticationMethodPolicyAuthenticator/MSFT_AADAuthenticationMethodPolicyAuthenticator.psm1 index 9bf5d35d5d..a62467bdfc 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADAuthenticationMethodPolicyAuthenticator/MSFT_AADAuthenticationMethodPolicyAuthenticator.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADAuthenticationMethodPolicyAuthenticator/MSFT_AADAuthenticationMethodPolicyAuthenticator.psm1 @@ -242,58 +242,6 @@ function Get-TargetResource $complexDisplayLocationInformationRequiredState = $null } $complexFeatureSettings.Add('DisplayLocationInformationRequiredState', $complexDisplayLocationInformationRequiredState) - $complexNumberMatchingRequiredState = @{} - $complexExcludeTarget = @{} - if ($getValue.additionalProperties.featureSettings.numberMatchingRequiredState.excludeTarget.id -notmatch 'all_users|00000000-0000-0000-0000-000000000000') - { - $myExcludeTargetsDisplayName = Get-MgGroup -GroupId $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.excludeTarget.id - $complexExcludeTarget.Add('Id', $myExcludeTargetsDisplayName.DisplayName) - } - else - { - $complexExcludeTarget.Add('Id', $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.excludeTarget.id) - } - if ($null -ne $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.excludeTarget.targetType) - { - $complexExcludeTarget.Add('TargetType', $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.excludeTarget.targetType.toString()) - } - if ($complexExcludeTarget.values.Where({ $null -ne $_ }).count -eq 0) - { - $complexExcludeTarget = $null - } - $complexNumberMatchingRequiredState.Add('ExcludeTarget', $complexExcludeTarget) - $complexIncludeTarget = @{} - if ($getValue.additionalProperties.featureSettings.numberMatchingRequiredState.includeTarget.id -notmatch 'all_users|00000000-0000-0000-0000-000000000000') - { - $myIncludeTargetsDisplayName = Get-MgGroup -GroupId $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.includeTarget.id - $complexIncludeTarget.Add('Id', $myIncludeTargetsDisplayName.DisplayName) - } - else - { - $complexIncludeTarget.Add('Id', $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.includeTarget.id) - } - if ($null -ne $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.includeTarget.targetType) - { - $complexIncludeTarget.Add('TargetType', $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.includeTarget.targetType.toString()) - } - if ($complexIncludeTarget.values.Where({ $null -ne $_ }).count -eq 0) - { - $complexIncludeTarget = $null - } - $complexNumberMatchingRequiredState.Add('IncludeTarget', $complexIncludeTarget) - if ($null -ne $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.state) - { - $complexNumberMatchingRequiredState.Add('State', $getValue.additionalProperties.featureSettings.numberMatchingRequiredState.state.toString()) - } - if ($complexNumberMatchingRequiredState.values.Where({ $null -ne $_ }).count -eq 0) - { - $complexNumberMatchingRequiredState = $null - } - $complexFeatureSettings.Add('NumberMatchingRequiredState', $complexNumberMatchingRequiredState) - if ($complexFeatureSettings.values.Where({ $null -ne $_ }).count -eq 0) - { - $complexFeatureSettings = $null - } $complexExcludeTargets = @() foreach ($currentExcludeTargets in $getValue.excludeTargets) @@ -499,15 +447,12 @@ function Set-TargetResource $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $CreateParameters.featureSettings.displayLocationInformationRequiredState.excludeTarget.foreach('id',$groupid) } - if ($CreateParameters.featureSettings.numberMatchingRequiredState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ - $Filter = "Displayname eq '$($CreateParameters.featureSettings.numberMatchingRequiredState.includeTarget.id)'" | Out-String - $groupid = (Get-MgGroup -Filter $Filter).id.ToString() - $CreateParameters.featureSettings.numberMatchingRequiredState.includeTarget.foreach('id',$groupid) - } - if ($CreateParameters.featureSettings.numberMatchingRequiredState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ - $Filter = "Displayname eq '$($CreateParameters.featureSettings.numberMatchingRequiredState.excludeTarget.id)'" | Out-String - $groupid = (Get-MgGroup -Filter $Filter).id.ToString() - $CreateParameters.featureSettings.numberMatchingRequiredState.excludeTarget.foreach('id',$groupid) + + # DEPRECATED + if ($CreateParameters.featureSettings.ContainsKey('NumberMatchingRequiredState')) + { + Write-Verbose -Message "The NumberMatchingRequiredState feature is deprecated and will be ignored. Please remove it from your configuration." + $CreateParameters.featureSettings.Remove('NumberMatchingRequiredState') } $keys = (([Hashtable]$CreateParameters).clone()).Keys @@ -558,45 +503,54 @@ function Set-TargetResource $UpdateParameters.Remove('Id') | Out-Null # replace group Displayname with group id - if ($UpdateParameters.featureSettings.companionAppAllowedState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ + if ($UpdateParameters.featureSettings.companionAppAllowedState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users' -and + $UpdateParameters.featureSettings.ContainsKey('companionAppAllowedState')) + { $Filter = "Displayname eq '$($UpdateParameters.featureSettings.companionAppAllowedState.includeTarget.id)'" | Out-String $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $UpdateParameters.featureSettings.companionAppAllowedState.includeTarget.foreach('id',$groupid) } - if ($UpdateParameters.featureSettings.companionAppAllowedState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ + if ($UpdateParameters.featureSettings.companionAppAllowedState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users' -and + $UpdateParameters.featureSettings.ContainsKey('companionAppAllowedState')) + { $Filter = "Displayname eq '$($UpdateParameters.featureSettings.companionAppAllowedState.excludeTarget.id)'" | Out-String $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $UpdateParameters.featureSettings.companionAppAllowedState.excludeTarget.foreach('id',$groupid) } - if ($UpdateParametrs.featureSettings.displayAppInformationRequiredState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ + if ($UpdateParameters.featureSettings.displayAppInformationRequiredState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users' -and + $UpdateParameters.featureSettings.ContainsKey('displayAppInformationRequiredState')) + { $Filter = "Displayname eq '$($UpdateParameters.featureSettings.displayAppInformationRequiredState.includeTarget.id)'" | Out-String $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $UpdateParameters.featureSettings.displayAppInformationRequiredState.includeTarget.foreach('id',$groupid) } - if ($UpdateParameters.featureSettings.displayAppInformationRequiredState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ + if ($UpdateParameters.featureSettings.displayAppInformationRequiredState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users' -and + $UpdateParameters.featureSettings.ContainsKey('displayAppInformationRequiredState')) + { $Filter = "Displayname eq '$($UpdateParameters.featureSettings.displayAppInformationRequiredState.excludeTarget.id)'" | Out-String $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $UpdateParameters.featureSettings.displayAppInformationRequiredState.excludeTarget.foreach('id',$groupid) } - if ($UpdateParameters.featureSettings.displayLocationInformationRequiredState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ + if ($UpdateParameters.featureSettings.displayLocationInformationRequiredState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users' -and + $UpdateParameters.featureSettings.ContainsKey('displayLocationInformationRequiredState')) + { $Filter = "Displayname eq '$($UpdateParameters.featureSettings.displayLocationInformationRequiredState.includeTarget.id)'" | Out-String $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $UpdateParameters.featureSettings.displayLocationInformationRequiredState.includeTarget.foreach('id',$groupid) } - if ($UpdateParameters.featureSettings.displayLocationInformationRequiredState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ + if ($UpdateParameters.featureSettings.displayLocationInformationRequiredState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users' -and + $UpdateParameters.featureSettings.ContainsKey('displayLocationInformationRequiredState')) + { $Filter = "Displayname eq '$($UpdateParameters.featureSettings.displayLocationInformationRequiredState.excludeTarget.id)'" | Out-String $groupid = (Get-MgGroup -Filter $Filter).id.ToString() $UpdateParameters.featureSettings.displayLocationInformationRequiredState.excludeTarget.foreach('id',$groupid) } - if ($UpdateParameters.featureSettings.numberMatchingRequiredState.includeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ - $Filter = "Displayname eq '$($UpdateParameters.featureSettings.numberMatchingRequiredState.includeTarget.id)'" | Out-String - $groupid = (Get-MgGroup -Filter $Filter).id.ToString() - $UpdateParameters.featureSettings.numberMatchingRequiredState.includeTarget.foreach('id',$groupid) - } - if ($UpdateParameters.featureSettings.numberMatchingRequiredState.excludeTarget.id -notmatch '00000000-0000-0000-0000-000000000000|all_users'){ - $Filter = "Displayname eq '$($UpdateParameters.featureSettings.numberMatchingRequiredState.excludeTarget.id)'" | Out-String - $groupid = (Get-MgGroup -Filter $Filter).id.ToString() - $UpdateParameters.featureSettings.numberMatchingRequiredState.excludeTarget.foreach('id',$groupid) + + # DEPRECATED + if ($UpdateParameters.featureSettings.ContainsKey('NumberMatchingRequiredState')) + { + Write-Verbose -Message "The NumberMatchingRequiredState feature is deprecated and will be ignored. Please remove it from your configuration." + $UpdateParameters.featureSettings.Remove('NumberMatchingRequiredState') } $keys = (([Hashtable]$UpdateParameters).clone()).Keys From fdadffb3d465b01a896c14a917eb68f789513aa9 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 15:04:29 -0400 Subject: [PATCH 17/40] Update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 889ab12d81..e6662e9a7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ # UNRELEASED +* AADAuthenticationMethodPolicyAuthenticator + * Deprecated the NumberMatchingRequiredState Feature Setting. + FIXES [#3406](https://github.com/microsoft/Microsoft365DSC/issues/3406) * EXOAvailabilityConfig * Fixes an error where an error was thrown when the OrgWideAccount wasn't set. FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) From 4ccc41ed067af5e78f425b43ac94a0da6d79e4fd Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 15:05:45 -0400 Subject: [PATCH 18/40] Update Microsoft365DSC.AADAuthenticationMethodPolicyAuthenticator.Tests.ps1 --- ...icationMethodPolicyAuthenticator.Tests.ps1 | 77 ------------------- 1 file changed, 77 deletions(-) diff --git a/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADAuthenticationMethodPolicyAuthenticator.Tests.ps1 b/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADAuthenticationMethodPolicyAuthenticator.Tests.ps1 index d87861e8cb..8563556698 100644 --- a/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADAuthenticationMethodPolicyAuthenticator.Tests.ps1 +++ b/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADAuthenticationMethodPolicyAuthenticator.Tests.ps1 @@ -100,17 +100,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } -ClientOnly) } -ClientOnly) - numberMatchingRequiredState = (New-CimInstance -ClassName MSFT_MicrosoftGraphauthenticationMethodFeatureConfiguration -Property @{ - state = 'default' - includeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - excludeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - } -ClientOnly) } -ClientOnly) Id = 'MicrosoftAuthenticator' isSoftwareOathEnabled = $True @@ -191,17 +180,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } -ClientOnly) } -ClientOnly) - numberMatchingRequiredState = (New-CimInstance -ClassName MSFT_MicrosoftGraphauthenticationMethodFeatureConfiguration -Property @{ - state = 'default' - includeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - excludeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - } -ClientOnly) } -ClientOnly) Id = 'MicrosoftAuthenticator' isSoftwareOathEnabled = $True @@ -343,17 +321,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } -ClientOnly) } -ClientOnly) - numberMatchingRequiredState = (New-CimInstance -ClassName MSFT_MicrosoftGraphauthenticationMethodFeatureConfiguration -Property @{ - state = 'default' - includeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - excludeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - } -ClientOnly) } -ClientOnly) Id = 'MicrosoftAuthenticator' isSoftwareOathEnabled = $True @@ -412,17 +379,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } } - numberMatchingRequiredState = @{ - state = 'default' - includeTarget = @{ - targetType = 'group' - id = 'Fakegroup' - } - excludeTarget = @{ - targetType = 'group' - id = 'Fakegroup' - } - } } '@odata.type' = '#microsoft.graph.microsoftAuthenticatorAuthenticationMethodConfiguration' isSoftwareOathEnabled = $True @@ -495,17 +451,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } -ClientOnly) } -ClientOnly) - numberMatchingRequiredState = (New-CimInstance -ClassName MSFT_MicrosoftGraphauthenticationMethodFeatureConfiguration -Property @{ - state = 'default' - includeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - excludeTarget = (New-CimInstance -ClassName MSFT_AADAuthenticationMethodPolicyAuthenticatorFeatureTarget -Property @{ - targetType = 'group' - id = 'Fakegroup' - } -ClientOnly) - } -ClientOnly) } -ClientOnly) Id = 'MicrosoftAuthenticator' isSoftwareOathEnabled = $True @@ -565,17 +510,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } } - numberMatchingRequiredState = @{ - state = 'default' - includeTarget = @{ - targetType = 'group' - id = 'Fakegroup' - } - excludeTarget = @{ - targetType = 'group' - id = 'Fakegroup' - } - } } } ExcludeTargets = @( @@ -655,17 +589,6 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { id = 'Fakegroup' } } - numberMatchingRequiredState = @{ - state = 'default' - includeTarget = @{ - targetType = 'group' - id = 'Fakegroup' - } - excludeTarget = @{ - targetType = 'group' - id = 'Fakegroup' - } - } } '@odata.type' = '#microsoft.graph.microsoftAuthenticatorAuthenticationMethodConfiguration' isSoftwareOathEnabled = $True From 0eb46a1cf78ee73dfbfd8add071f4cad2473d522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andi=20Kr=C3=BCger?= <15608729+andikrueger@users.noreply.github.com> Date: Mon, 26 Jun 2023 21:22:33 +0200 Subject: [PATCH 19/40] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 889ab12d81..55b16598be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. * MISC - * Fixes an issue with Update-M365DSCAzureAdApplication where it was throwing an eroor complaining about duplicate keys. + * Fixes an issue with Update-M365DSCAzureAdApplication where it was throwing an error complaining about duplicate keys. FIXES #3417 # 1.23.621.1 From c3e7fe9447cb94b3df5dcf68c5751bdfc8eb303f Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Mon, 26 Jun 2023 16:27:59 -0400 Subject: [PATCH 20/40] Fixes #3390 --- CHANGELOG.md | 3 +++ .../DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 | 1 + 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6662e9a7f..cf0c8988cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ # UNRELEASED +* AADApplication + * Updated the Test function to ignore the AppId parameter. + FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) * AADAuthenticationMethodPolicyAuthenticator * Deprecated the NumberMatchingRequiredState Feature Setting. FIXES [#3406](https://github.com/microsoft/Microsoft365DSC/issues/3406) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 index 26f91298fa..0a8840e906 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 @@ -323,6 +323,7 @@ function Set-TargetResource $currentParameters.Remove('Ensure') | Out-Null $currentParameters.Remove('Credential') | Out-Null $currentParameters.Remove('ManagedIdentity') | Out-Null + $currentParameters.Remove('AppId') | Out-Null $backCurrentOwners = $currentAADApp.Owners $currentParameters.Remove('Owners') | Out-Null From e5d8142dea7ddbb1c150422abc961bca92c787b1 Mon Sep 17 00:00:00 2001 From: Yorick Kuijs Date: Tue, 27 Jun 2023 08:46:30 +0200 Subject: [PATCH 21/40] Fixed various issues --- CHANGELOG.md | 6 ++ .../settings.json | 54 ++++++++++++- .../MSFT_TeamsAppSetupPolicy/settings.json | 54 ++++++++++++- .../settings.json | 54 ++++++++++++- .../MSFT_TeamsCallHoldPolicy/settings.json | 54 ++++++++++++- .../MSFT_TeamsCallParkPolicy/settings.json | 55 ++++++++++++- .../MSFT_TeamsCallingPolicy/settings.json | 54 ++++++++++++- .../MSFT_TeamsChannel/settings.json | 55 ++++++++++++- .../MSFT_TeamsChannelsPolicy/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsCortanaPolicy/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsEventsPolicy/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsFeedbackPolicy/settings.json | 55 ++++++++++++- .../MSFT_TeamsFilesPolicy/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsIPPhonePolicy/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsMeetingPolicy/settings.json | 55 ++++++++++++- .../MSFT_TeamsMessagingPolicy/settings.json | 55 ++++++++++++- .../MSFT_TeamsMobilityPolicy/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsOnlineVoiceUser/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsPstnUsage/settings.json | 55 ++++++++++++- .../MSFT_TeamsShiftsPolicy/settings.json | 55 ++++++++++++- .../MSFT_TeamsTenantDialPlan/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsTenantNetworkSite/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsTranslationRule/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsUpgradePolicy/settings.json | 55 ++++++++++++- .../DSCResources/MSFT_TeamsUser/settings.json | 55 ++++++++++++- .../MSFT_TeamsVdiPolicy/settings.json | 55 ++++++++++++- .../MSFT_TeamsVoiceRoute/settings.json | 55 ++++++++++++- .../settings.json | 55 ++++++++++++- .../MSFT_TeamsWorkloadPolicy/settings.json | 55 ++++++++++++- .../Modules/M365DSCPermissions.psm1 | 80 ++++++++++++++++--- 53 files changed, 2727 insertions(+), 159 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2432a5f678..32bbbbe2c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ # UNRELEASED +* Teams resources + * Added required application permissions to support [Application Based Authentication](https://learn.microsoft.com/en-us/microsoftteams/teams-powershell-application-authentication) +* MISC + * Added API to the Organization.Read.All permission in the Get-M365DSCCompiledPermisisonList cmdlet + * Fixed Update-M365DSCAzureAdApplication where an error was thrown when multiple permissions were specified + for the same API. * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json index 62ab93f169..26c5e867ca 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json index 4465a916bb..a1c3a80cea 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json index e20dbeab65..280d84c44e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json index dfd82b9e49..2e92e04fd7 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json index 0ec6c2ad35..7b3514509c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsCallParkPolicy", "description": "The TeamsCallParkPolicy controls whether or not users are able to leverage the call park feature in Microsoft Teams. Call park allows enterprise voice customers to place a call on hold and then perform a number of actions on that call: transfer to another department, retrieve via the same phone, or retrieve via a different Teams phone. The New-CsTeamsCallParkPolicy resource lets you create a new custom policy that can then be assigned to one or more specific users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json index 3aacdaf1a7..0ce1246dad 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json index f892590ffd..7866b960c1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsChannel", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json index dda2fa7f1b..4a88ea087e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsChannelsPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json index 39063bf20a..8076442a53 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsClientConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json index 04c530577a..83d38597c4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsComplianceRecordingPolicy", "description": "This resource configures an Creates a new Teams recording policy for governing automatic policy-based recording in your tenant. Automatic policy-based recording is only applicable to Microsoft Teams users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json index 035008677f..a04a247a36 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsCortanaPolicy", "description": "This resource configures an The CsTeamsCortanaPolicy resources enable administrators to control settings for Cortana voice assistant in Microsoft Teams..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json index 4c7a7d0d80..384ee339d1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsDialInConferencingTenantSettings", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json index de239f7117..6d210e64de 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEmergencyCallRoutingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json index 9c6ee3da95..7dabbc87d4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEmergencyCallingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json index 79bc6fb983..38e6d7dfbe 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEnhancedEncryptionPolicy", "description": "This resource configures an Use this resource to create a new Teams enhanced encryption policy..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json index 7401605043..03263bf2e9 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEventsPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json index fe43c0d2c2..d52e573188 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsFederationConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json index 6bc5667ae0..930a24de32 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsFeedbackPolicy", "description": "This resource configures an \r\nNew-CsTeamsFeedbackPolicy [-Identity] \u003cstring\u003e [-UserInitiatedMode \u003cstring\u003e] [-ReceiveSurveysMode \u003cstring\u003e] [-AllowScreenshotCollection \u003cbool\u003e] [-AllowEmailCollection \u003cbool\u003e] [-AllowLogCollection \u003cbool\u003e] [-EnableFeatureSuggestions \u003cbool\u003e] [-Force] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]\r\n.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json index 9b17ec1b95..89a47bfb78 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsFilesPolicy", "description": "This resource configures an \r\nNew-CsTeamsFilesPolicy [-Identity] \u003cstring\u003e [-NativeFileEntryPoints \u003cstring\u003e] [-SPChannelFilesTab \u003cstring\u003e] [-MsftInternalProcessingMode \u003cstring\u003e] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]\r\n.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json index fa9341c8d3..a24e3c8bb9 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGroupPolicyAssignment", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json index 6fea2ba83d..ec9978a553 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGuestCallingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json index c9a9bf0134..7d2261a1e1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGuestMeetingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json index 74dd5abf03..b7f759abf2 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGuestMessagingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json index 644d99fca1..ebace7a6e4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsIPPhonePolicy", "description": "This resource configures an New-CsTeamsIPPhonePolicy allows you to create a policy to manage features related to Teams phone experiences. Teams phone policies determine the features that are available to users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json index 6ddbaeb34d..d729bbe86d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingBroadcastConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json index 7931481613..45e2ba374c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingBroadcastPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json index 7b6478c075..c167d029d8 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json index a5b7648ef0..5e6bfb7ca9 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json index 5fa5b1f83f..047821d77a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMessagingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json index 488606e2a6..80097bf748 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMobilityPolicy", "description": "This resource configures an The TeamsMobilityPolicy allows Admins to control Teams mobile usage for users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json index 82bcd4d4bc..0361281b70 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsNetworkRoamingPolicy", "description": "This resource configures an New-CsTeamsNetworkRoamingPolicy allows IT Admins to create policies for Network Roaming and Bandwidth Control experiences in Microsoft Teams..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json index d2f484f661..c526398b58 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsOnlineVoiceUser", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json index c7f5f059cf..72c00f6cd0 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsOnlineVoicemailPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json index 74e7d589af..c014b4409c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsOnlineVoicemailUserSettings", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json index ef5b8ff83b..d9d7dce986 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpgradeConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json index 1cabea8371..1771d361f5 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsPstnUsage", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json index b820df31c8..d7f5934818 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsShiftsPolicy", "description": "This resource configures an This resource allows you to create a new TeamsShiftPolicy instance and set it\u0027s properties..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json index 6bcabe9b64..f9abdd364a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantDialPlan", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json index b4600064cb..efd4d76924 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantNetworkRegion", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkRegion to define network regions. A network region interconnects various parts of a network across multiple geographic areas. The RegionID parameter is a logical name that represents the geography of the region, and has no dependencies or restrictions. Tenant network region is used for Location Based Routing..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json index 80bd7ad990..4362113952 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantNetworkSite", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkSite to define network sites. Network sites are defined as a collection of IP subnets. Each network site must be associated with a network region. Tenant network site is used for Location Based Routing..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json index 12741cc123..fd38cd8699 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantNetworkSubnet", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkSubnet to define network subnets and assign them to network sites. Each internal subnet may only be associated with one site. Tenant network subnet is used for Location Based Routing..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json index c11577ec47..45a5028ed6 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTranslationRule", "description": "This resource configures an Cmdlet to create a new telephone number manipulation rule..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json index 4c2b5d61c3..28a8d6203c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUnassignedNumberTreatment", "description": "This resource configures an Creates a new treatment for how calls to an unassigned number range should be routed. The call can be routed to a user, an application or to an announcement service where a custom message will be played to the caller..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json index 6dcae3a8f3..7579e25385 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpdateManagementPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json index ef5b8ff83b..d9d7dce986 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpgradeConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json index 23ab8a9ada..4f8b08cdfe 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpgradePolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json index c4884d54a6..dbd4b667c6 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUser", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json index a5e3bd9e96..221d17e18f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsVdiPolicy", "description": "This resource implements Teams VDI Policies.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json index ab0e36fa13..fc98edbd0d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsVoiceRoute", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json index d7cdbe6262..6b4c1196bf 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsVoiceRoutingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json index 219cf077ca..57c4e2f3eb 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsWorkloadPolicy", "description": "This resources implements a Teams workload policy.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 index 285cc661e8..23baad9258 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 @@ -65,6 +65,7 @@ function Get-M365DSCCompiledPermissionList $results = @{ Read = @( @{ + API = 'Graph' Permission = @{ Name = "Organization.Read.All" Type = "Application" @@ -73,6 +74,7 @@ function Get-M365DSCCompiledPermissionList ) Update = @( @{ + API = 'Graph' Permission = @{ Name = "Organization.Read.All" Type = "Application" @@ -1415,7 +1417,22 @@ function Update-M365DSCAzureAdApplication Write-LogEntry ' ' Write-LogEntry 'Checking app permissions' $permissionsSet = $false + $alreadyAddedPermissions = @() $allRequiredAccess = @() + + $graphAPIAccess = @{ + ResourceAppId = $graphSvcprincipal.AppId + ResourceAccess = @() + } + $sharePointAPIAccess = @{ + ResourceAppId = $spSvcprincipal.AppId + ResourceAccess = @() + } + $exchangeAPIAccess = @{ + ResourceAppId = $exSvcprincipal.AppId + ResourceAccess = @() + } + foreach ($permission in $Permissions) { if ($permission.Api -eq $null -or $permission.Api -notin @('Graph', 'SharePoint', 'Exchange')) @@ -1425,6 +1442,12 @@ function Update-M365DSCAzureAdApplication } Write-LogEntry " Checking permission '$($permission.Api)\$($permission.PermissionName)'" + if ($null -ne ($alreadyAddedPermissions | Where-Object { $_.API -eq $permission.API -and $_.PermissionName -eq $permission.PermissionName })) + { + Write-LogEntry " Skipping permission. Already in the list!" + continue + } + switch ($permission.Api) { 'Graph' @@ -1445,10 +1468,6 @@ function Update-M365DSCAzureAdApplication if ($null -eq $appRole) { - $currentAPIAccess = @{ - ResourceAppId = $svcprincipal.AppId - ResourceAccess = @() - } $role = $svcPrincipal.AppRoles | Where-Object -FilterScript { $_.Value -eq $permission.PermissionName } if ($null -eq $role) { @@ -1460,6 +1479,10 @@ function Update-M365DSCAzureAdApplication Type = 'Role' } } + else + { + continue + } } else { @@ -1468,12 +1491,29 @@ function Update-M365DSCAzureAdApplication Type = 'Role' } } - $currentAPIAccess.ResourceAccess += $appPermission - $permissionsSet = $true - if ($null -ne $currentAPIAccess) + switch ($permission.Api) { - $allRequiredAccess += $currentAPIAccess + 'Graph' + { + $graphAPIAccess.ResourceAccess += $appPermission + } + 'SharePoint' + { + $sharePointAPIAccess.ResourceAccess += $appPermission + } + 'Exchange' + { + $exchangeAPIAccess.ResourceAccess += $appPermission + } + } + + $permissionsSet = $true + + # Code to track already added permissions + $alreadyAddedPermissions += @{ + API = $permissions.API + PermissionName = $permission.PermissionName } } else @@ -1482,10 +1522,28 @@ function Update-M365DSCAzureAdApplication } } - Update-MgApplication -ApplicationId ($azureADApp.Id) ` - -RequiredResourceAccess $allRequiredAccess | Out-Null + if ($graphAPIAccess.ResourceAccess.Count -ne 0) + { + $allRequiredAccess += $graphAPIAccess + } - Write-LogEntry ' Permission updated for application' + if ($sharePointAPIAccess.ResourceAccess.Count -ne 0) + { + $allRequiredAccess += $sharePointAPIAccess + } + + if ($exchangeAPIAccess.ResourceAccess.Count -ne 0) + { + $allRequiredAccess += $exchangeAPIAccess + } + + if ($permissionsSet) + { + Update-MgApplication -ApplicationId ($azureADApp.Id) ` + -RequiredResourceAccess $allRequiredAccess | Out-Null + + Write-LogEntry ' Permission updated for application' + } if ($AdminConsent) { From 65a20f4c4d09fa94ad556d2ba0d4be49eb95facd Mon Sep 17 00:00:00 2001 From: Yorick Kuijs Date: Tue, 27 Jun 2023 08:46:30 +0200 Subject: [PATCH 22/40] Fixed various issues --- CHANGELOG.md | 6 ++ .../settings.json | 54 +++++++++++++++++- .../MSFT_TeamsAppSetupPolicy/settings.json | 54 +++++++++++++++++- .../settings.json | 54 +++++++++++++++++- .../MSFT_TeamsCallHoldPolicy/settings.json | 54 +++++++++++++++++- .../MSFT_TeamsCallParkPolicy/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsCallingPolicy/settings.json | 54 +++++++++++++++++- .../MSFT_TeamsChannel/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsChannelsPolicy/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsCortanaPolicy/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsEventsPolicy/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsFeedbackPolicy/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsFilesPolicy/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsIPPhonePolicy/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsMeetingPolicy/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsMessagingPolicy/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsMobilityPolicy/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsOnlineVoiceUser/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsPstnUsage/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsShiftsPolicy/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsTenantDialPlan/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsTenantNetworkSite/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsTranslationRule/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsUpgradePolicy/settings.json | 55 ++++++++++++++++++- .../DSCResources/MSFT_TeamsUser/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsVdiPolicy/settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsVoiceRoute/settings.json | 55 ++++++++++++++++++- .../settings.json | 55 ++++++++++++++++++- .../MSFT_TeamsWorkloadPolicy/settings.json | 55 ++++++++++++++++++- .../Modules/M365DSCPermissions.psm1 | 6 ++ 53 files changed, 2664 insertions(+), 148 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6662e9a7f..66734e0f2d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,12 @@ * IntuneDeviceEnrollmentPlatformRestriction * Fixes an error where the WindowsMobileRestriction property was still being assessed dispite it being deprecated. FIXES [#3407](https://github.com/microsoft/Microsoft365DSC/issues/3407) +* Teams resources + * Added required application permissions to support [Application Based Authentication](https://learn.microsoft.com/en-us/microsoftteams/teams-powershell-application-authentication) +* MISC + * Added API to the Organization.Read.All permission in the Get-M365DSCCompiledPermisisonList cmdlet + * Fixed Update-M365DSCAzureAdApplication where an error was thrown when multiple permissions were specified + for the same API. * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. * MISC diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json index 62ab93f169..26c5e867ca 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppPermissionPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json index 4465a916bb..a1c3a80cea 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAppSetupPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json index e20dbeab65..280d84c44e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsAudioConferencingPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json index dfd82b9e49..2e92e04fd7 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallHoldPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json index 0ec6c2ad35..7b3514509c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsCallParkPolicy", "description": "The TeamsCallParkPolicy controls whether or not users are able to leverage the call park feature in Microsoft Teams. Call park allows enterprise voice customers to place a call on hold and then perform a number of actions on that call: transfer to another department, retrieve via the same phone, or retrieve via a different Teams phone. The New-CsTeamsCallParkPolicy resource lets you create a new custom policy that can then be assigned to one or more specific users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json index 3aacdaf1a7..0ce1246dad 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallingPolicy/settings.json @@ -8,8 +8,58 @@ "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json index f892590ffd..7866b960c1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsChannel", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json index dda2fa7f1b..4a88ea087e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsChannelsPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json index 39063bf20a..8076442a53 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsClientConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json index 04c530577a..83d38597c4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsComplianceRecordingPolicy", "description": "This resource configures an Creates a new Teams recording policy for governing automatic policy-based recording in your tenant. Automatic policy-based recording is only applicable to Microsoft Teams users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json index 035008677f..a04a247a36 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsCortanaPolicy", "description": "This resource configures an The CsTeamsCortanaPolicy resources enable administrators to control settings for Cortana voice assistant in Microsoft Teams..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json index 4c7a7d0d80..384ee339d1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsDialInConferencingTenantSettings", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json index de239f7117..6d210e64de 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEmergencyCallRoutingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json index 9c6ee3da95..7dabbc87d4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEmergencyCallingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json index 79bc6fb983..38e6d7dfbe 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEnhancedEncryptionPolicy", "description": "This resource configures an Use this resource to create a new Teams enhanced encryption policy..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json index 7401605043..03263bf2e9 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsEventsPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json index fe43c0d2c2..d52e573188 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsFederationConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json index 6bc5667ae0..930a24de32 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsFeedbackPolicy", "description": "This resource configures an \r\nNew-CsTeamsFeedbackPolicy [-Identity] \u003cstring\u003e [-UserInitiatedMode \u003cstring\u003e] [-ReceiveSurveysMode \u003cstring\u003e] [-AllowScreenshotCollection \u003cbool\u003e] [-AllowEmailCollection \u003cbool\u003e] [-AllowLogCollection \u003cbool\u003e] [-EnableFeatureSuggestions \u003cbool\u003e] [-Force] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]\r\n.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json index 9b17ec1b95..89a47bfb78 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsFilesPolicy", "description": "This resource configures an \r\nNew-CsTeamsFilesPolicy [-Identity] \u003cstring\u003e [-NativeFileEntryPoints \u003cstring\u003e] [-SPChannelFilesTab \u003cstring\u003e] [-MsftInternalProcessingMode \u003cstring\u003e] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]\r\n.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json index fa9341c8d3..a24e3c8bb9 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGroupPolicyAssignment", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json index 6fea2ba83d..ec9978a553 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGuestCallingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json index c9a9bf0134..7d2261a1e1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGuestMeetingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json index 74dd5abf03..b7f759abf2 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsGuestMessagingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json index 644d99fca1..ebace7a6e4 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsIPPhonePolicy", "description": "This resource configures an New-CsTeamsIPPhonePolicy allows you to create a policy to manage features related to Teams phone experiences. Teams phone policies determine the features that are available to users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json index 6ddbaeb34d..d729bbe86d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingBroadcastConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json index 7931481613..45e2ba374c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingBroadcastPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json index 7b6478c075..c167d029d8 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json index a5b7648ef0..5e6bfb7ca9 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMeetingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json index 5fa5b1f83f..047821d77a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMessagingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json index 488606e2a6..80097bf748 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsMobilityPolicy", "description": "This resource configures an The TeamsMobilityPolicy allows Admins to control Teams mobile usage for users..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json index 82bcd4d4bc..0361281b70 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsNetworkRoamingPolicy", "description": "This resource configures an New-CsTeamsNetworkRoamingPolicy allows IT Admins to create policies for Network Roaming and Bandwidth Control experiences in Microsoft Teams..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json index d2f484f661..c526398b58 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsOnlineVoiceUser", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json index c7f5f059cf..72c00f6cd0 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsOnlineVoicemailPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json index 74e7d589af..c014b4409c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsOnlineVoicemailUserSettings", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json index ef5b8ff83b..d9d7dce986 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpgradeConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json index 1cabea8371..1771d361f5 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsPstnUsage", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json index b820df31c8..d7f5934818 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsShiftsPolicy", "description": "This resource configures an This resource allows you to create a new TeamsShiftPolicy instance and set it\u0027s properties..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json index 6bcabe9b64..f9abdd364a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantDialPlan", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json index b4600064cb..efd4d76924 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantNetworkRegion", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkRegion to define network regions. A network region interconnects various parts of a network across multiple geographic areas. The RegionID parameter is a logical name that represents the geography of the region, and has no dependencies or restrictions. Tenant network region is used for Location Based Routing..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json index 80bd7ad990..4362113952 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantNetworkSite", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkSite to define network sites. Network sites are defined as a collection of IP subnets. Each network site must be associated with a network region. Tenant network site is used for Location Based Routing..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json index 12741cc123..fd38cd8699 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTenantNetworkSubnet", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkSubnet to define network subnets and assign them to network sites. Each internal subnet may only be associated with one site. Tenant network subnet is used for Location Based Routing..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json index c11577ec47..45a5028ed6 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsTranslationRule", "description": "This resource configures an Cmdlet to create a new telephone number manipulation rule..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json index 4c2b5d61c3..28a8d6203c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUnassignedNumberTreatment", "description": "This resource configures an Creates a new treatment for how calls to an unassigned number range should be routed. The call can be routed to a user, an application or to an announcement service where a custom message will be played to the caller..", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json index 6dcae3a8f3..7579e25385 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpdateManagementPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json index ef5b8ff83b..d9d7dce986 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpgradeConfiguration", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json index 23ab8a9ada..4f8b08cdfe 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUpgradePolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json index c4884d54a6..dbd4b667c6 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsUser", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json index a5e3bd9e96..221d17e18f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsVdiPolicy", "description": "This resource implements Teams VDI Policies.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json index ab0e36fa13..fc98edbd0d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsVoiceRoute", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json index d7cdbe6262..6b4c1196bf 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsVoiceRoutingPolicy", "description": "", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json index 219cf077ca..57c4e2f3eb 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json @@ -2,14 +2,63 @@ "resourceName": "TeamsWorkloadPolicy", "description": "This resources implements a Teams workload policy.", "permissions": { - "graph": { "delegated": { "read": [], "update": [] }, "application": { - "read": [], - "update": [] + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] } } } diff --git a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 index b06aaaf576..e7cc4f2ef0 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 @@ -65,6 +65,7 @@ function Get-M365DSCCompiledPermissionList $results = @{ Read = @( @{ + API = 'Graph' Permission = @{ Name = "Organization.Read.All" Type = "Application" @@ -73,6 +74,7 @@ function Get-M365DSCCompiledPermissionList ) Update = @( @{ + API = 'Graph' Permission = @{ Name = "Organization.Read.All" Type = "Application" @@ -1461,6 +1463,10 @@ function Update-M365DSCAzureAdApplication Type = 'Role' } } + else + { + continue + } } else { From 9f36b86442a052e5789b1180248a276e72ca5d31 Mon Sep 17 00:00:00 2001 From: Yorick Kuijs Date: Tue, 27 Jun 2023 09:21:39 +0200 Subject: [PATCH 23/40] Fix issue in Teams Settings.json --- .../DSCResources/MSFT_TeamsCallParkPolicy/settings.json | 1 + .../Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json | 1 + .../DSCResources/MSFT_TeamsChannelsPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsClientConfiguration/settings.json | 1 + .../MSFT_TeamsComplianceRecordingPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsCortanaPolicy/settings.json | 1 + .../MSFT_TeamsDialInConferencingTenantSettings/settings.json | 1 + .../MSFT_TeamsEmergencyCallRoutingPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json | 1 + .../MSFT_TeamsEnhancedEncryptionPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsEventsPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsFederationConfiguration/settings.json | 1 + .../DSCResources/MSFT_TeamsFeedbackPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsFilesPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json | 1 + .../MSFT_TeamsGuestCallingConfiguration/settings.json | 1 + .../MSFT_TeamsGuestMeetingConfiguration/settings.json | 1 + .../MSFT_TeamsGuestMessagingConfiguration/settings.json | 1 + .../DSCResources/MSFT_TeamsIPPhonePolicy/settings.json | 1 + .../MSFT_TeamsMeetingBroadcastConfiguration/settings.json | 1 + .../DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsMeetingConfiguration/settings.json | 1 + .../DSCResources/MSFT_TeamsMeetingPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsMessagingPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsMobilityPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json | 1 + .../DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json | 1 + .../MSFT_TeamsOnlineVoicemailUserSettings/settings.json | 1 + .../DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json | 1 + .../DSCResources/MSFT_TeamsPstnUsage/settings.json | 1 + .../DSCResources/MSFT_TeamsShiftsPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsTenantDialPlan/settings.json | 1 + .../DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json | 1 + .../DSCResources/MSFT_TeamsTenantNetworkSite/settings.json | 1 + .../DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json | 1 + .../DSCResources/MSFT_TeamsTranslationRule/settings.json | 1 + .../MSFT_TeamsUnassignedNumberTreatment/settings.json | 1 + .../DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json | 1 + .../DSCResources/MSFT_TeamsUpgradePolicy/settings.json | 1 + .../Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json | 1 + .../DSCResources/MSFT_TeamsVdiPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsVoiceRoute/settings.json | 1 + .../DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json | 1 + .../DSCResources/MSFT_TeamsWorkloadPolicy/settings.json | 1 + 46 files changed, 46 insertions(+) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json index 7b3514509c..a5ecfb5841 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallParkPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsCallParkPolicy", "description": "The TeamsCallParkPolicy controls whether or not users are able to leverage the call park feature in Microsoft Teams. Call park allows enterprise voice customers to place a call on hold and then perform a number of actions on that call: transfer to another department, retrieve via the same phone, or retrieve via a different Teams phone. The New-CsTeamsCallParkPolicy resource lets you create a new custom policy that can then be assigned to one or more specific users..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json index 7866b960c1..dee81a4f7e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannel/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsChannel", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json index 4a88ea087e..4b66589796 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsChannelsPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsChannelsPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json index 8076442a53..22cd2209da 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsClientConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsClientConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json index 83d38597c4..b8fda88200 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsComplianceRecordingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsComplianceRecordingPolicy", "description": "This resource configures an Creates a new Teams recording policy for governing automatic policy-based recording in your tenant. Automatic policy-based recording is only applicable to Microsoft Teams users..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json index a04a247a36..29f24a7054 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCortanaPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsCortanaPolicy", "description": "This resource configures an The CsTeamsCortanaPolicy resources enable administrators to control settings for Cortana voice assistant in Microsoft Teams..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json index 384ee339d1..c724419253 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsDialInConferencingTenantSettings/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsDialInConferencingTenantSettings", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json index 6d210e64de..fb295bc7fa 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallRoutingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsEmergencyCallRoutingPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json index 7dabbc87d4..cb0c7b024e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEmergencyCallingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsEmergencyCallingPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json index 38e6d7dfbe..48a0be14a1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEnhancedEncryptionPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsEnhancedEncryptionPolicy", "description": "This resource configures an Use this resource to create a new Teams enhanced encryption policy..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json index 03263bf2e9..0a09263260 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsEventsPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsEventsPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json index d52e573188..eed45912f6 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFederationConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsFederationConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json index 930a24de32..5a7e739b6d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFeedbackPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsFeedbackPolicy", "description": "This resource configures an \r\nNew-CsTeamsFeedbackPolicy [-Identity] \u003cstring\u003e [-UserInitiatedMode \u003cstring\u003e] [-ReceiveSurveysMode \u003cstring\u003e] [-AllowScreenshotCollection \u003cbool\u003e] [-AllowEmailCollection \u003cbool\u003e] [-AllowLogCollection \u003cbool\u003e] [-EnableFeatureSuggestions \u003cbool\u003e] [-Force] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]\r\n.", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json index 89a47bfb78..833e62ff10 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsFilesPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsFilesPolicy", "description": "This resource configures an \r\nNew-CsTeamsFilesPolicy [-Identity] \u003cstring\u003e [-NativeFileEntryPoints \u003cstring\u003e] [-SPChannelFilesTab \u003cstring\u003e] [-MsftInternalProcessingMode \u003cstring\u003e] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]\r\n.", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json index a24e3c8bb9..45b3ea5389 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsGroupPolicyAssignment", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json index ec9978a553..d74d464b0f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestCallingConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsGuestCallingConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json index 7d2261a1e1..0bff93617d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMeetingConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsGuestMeetingConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json index b7f759abf2..5acaf68ddc 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGuestMessagingConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsGuestMessagingConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json index ebace7a6e4..88879e1a97 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsIPPhonePolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsIPPhonePolicy", "description": "This resource configures an New-CsTeamsIPPhonePolicy allows you to create a policy to manage features related to Teams phone experiences. Teams phone policies determine the features that are available to users..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json index d729bbe86d..c950bd251c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsMeetingBroadcastConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json index 45e2ba374c..a799e047d1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingBroadcastPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsMeetingBroadcastPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json index c167d029d8..c698a9e230 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsMeetingConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json index 5e6bfb7ca9..f60844d932 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMeetingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsMeetingPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json index 047821d77a..2d3321017c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMessagingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsMessagingPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json index 80097bf748..041ae1e300 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsMobilityPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsMobilityPolicy", "description": "This resource configures an The TeamsMobilityPolicy allows Admins to control Teams mobile usage for users..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json index 0361281b70..5d24414295 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsNetworkRoamingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsNetworkRoamingPolicy", "description": "This resource configures an New-CsTeamsNetworkRoamingPolicy allows IT Admins to create policies for Network Roaming and Bandwidth Control experiences in Microsoft Teams..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json index c526398b58..367cf1a735 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoiceUser/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsOnlineVoiceUser", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json index 72c00f6cd0..e7babd713f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsOnlineVoicemailPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json index c014b4409c..0c176c593a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOnlineVoicemailUserSettings/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsOnlineVoicemailUserSettings", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json index d9d7dce986..c63b5ab44f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsOrgWideAppSettings/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsUpgradeConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json index 1771d361f5..e54dca3b6b 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsPstnUsage/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsPstnUsage", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json index d7f5934818..a573292965 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsShiftsPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsShiftsPolicy", "description": "This resource configures an This resource allows you to create a new TeamsShiftPolicy instance and set it\u0027s properties..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json index f9abdd364a..1026af32a0 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantDialPlan/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsTenantDialPlan", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json index efd4d76924..0330a6fc48 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkRegion/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsTenantNetworkRegion", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkRegion to define network regions. A network region interconnects various parts of a network across multiple geographic areas. The RegionID parameter is a logical name that represents the geography of the region, and has no dependencies or restrictions. Tenant network region is used for Location Based Routing..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json index 4362113952..44c012879c 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSite/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsTenantNetworkSite", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkSite to define network sites. Network sites are defined as a collection of IP subnets. Each network site must be associated with a network region. Tenant network site is used for Location Based Routing..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json index fd38cd8699..2e5f855e89 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTenantNetworkSubnet/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsTenantNetworkSubnet", "description": "As an Admin, you can use the Windows PowerShell command, New-CsTenantNetworkSubnet to define network subnets and assign them to network sites. Each internal subnet may only be associated with one site. Tenant network subnet is used for Location Based Routing..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json index 45a5028ed6..a8e48894f2 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsTranslationRule/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsTranslationRule", "description": "This resource configures an Cmdlet to create a new telephone number manipulation rule..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json index 28a8d6203c..3782977b16 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUnassignedNumberTreatment/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsUnassignedNumberTreatment", "description": "This resource configures an Creates a new treatment for how calls to an unassigned number range should be routed. The call can be routed to a user, an application or to an announcement service where a custom message will be played to the caller..", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json index 7579e25385..81459a5cae 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpdateManagementPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsUpdateManagementPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json index d9d7dce986..c63b5ab44f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradeConfiguration/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsUpgradeConfiguration", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json index 4f8b08cdfe..c0c7c61d59 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUpgradePolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsUpgradePolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json index dbd4b667c6..38309886ec 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsUser/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsUser", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json index 221d17e18f..abb92b061f 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVdiPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsVdiPolicy", "description": "This resource implements Teams VDI Policies.", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json index fc98edbd0d..34e4bd42e1 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoute/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsVoiceRoute", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json index 6b4c1196bf..32d058bd10 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsVoiceRoutingPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsVoiceRoutingPolicy", "description": "", "permissions": { + "graph": { "delegated": { "read": [], "update": [] diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json index 57c4e2f3eb..b2b411adb8 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsWorkloadPolicy/settings.json @@ -2,6 +2,7 @@ "resourceName": "TeamsWorkloadPolicy", "description": "This resources implements a Teams workload policy.", "permissions": { + "graph": { "delegated": { "read": [], "update": [] From 0cf4f3dcb6b9b12afd8fdc4f02f5619e69e2ef80 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Tue, 27 Jun 2023 10:29:39 +0000 Subject: [PATCH 24/40] Updated Resources and Cmdlet documentation pages --- docs/docs/resources/teams/TeamsAppPermissionPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsAppSetupPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsAudioConferencingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsCallHoldPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsCallParkPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsCallingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsChannel.md | 4 ++-- docs/docs/resources/teams/TeamsChannelsPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsClientConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsComplianceRecordingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsCortanaPolicy.md | 4 ++-- .../resources/teams/TeamsDialInConferencingTenantSettings.md | 4 ++-- docs/docs/resources/teams/TeamsEmergencyCallRoutingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsEmergencyCallingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsEnhancedEncryptionPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsEventsPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsFederationConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsFeedbackPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsFilesPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsGroupPolicyAssignment.md | 4 ++-- docs/docs/resources/teams/TeamsGuestCallingConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsGuestMeetingConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsGuestMessagingConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsIPPhonePolicy.md | 4 ++-- .../resources/teams/TeamsMeetingBroadcastConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsMeetingBroadcastPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsMeetingConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsMeetingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsMessagingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsMobilityPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsNetworkRoamingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsOnlineVoiceUser.md | 4 ++-- docs/docs/resources/teams/TeamsOnlineVoicemailPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsOnlineVoicemailUserSettings.md | 4 ++-- docs/docs/resources/teams/TeamsOrgWideAppSettings.md | 4 ++-- docs/docs/resources/teams/TeamsPstnUsage.md | 4 ++-- docs/docs/resources/teams/TeamsShiftsPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsTenantDialPlan.md | 4 ++-- docs/docs/resources/teams/TeamsTenantNetworkRegion.md | 4 ++-- docs/docs/resources/teams/TeamsTenantNetworkSite.md | 4 ++-- docs/docs/resources/teams/TeamsTenantNetworkSubnet.md | 4 ++-- docs/docs/resources/teams/TeamsTranslationRule.md | 4 ++-- docs/docs/resources/teams/TeamsUnassignedNumberTreatment.md | 4 ++-- docs/docs/resources/teams/TeamsUpdateManagementPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsUpgradeConfiguration.md | 4 ++-- docs/docs/resources/teams/TeamsUpgradePolicy.md | 4 ++-- docs/docs/resources/teams/TeamsUser.md | 4 ++-- docs/docs/resources/teams/TeamsVdiPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsVoiceRoute.md | 4 ++-- docs/docs/resources/teams/TeamsVoiceRoutingPolicy.md | 4 ++-- docs/docs/resources/teams/TeamsWorkloadPolicy.md | 4 ++-- 51 files changed, 102 insertions(+), 102 deletions(-) diff --git a/docs/docs/resources/teams/TeamsAppPermissionPolicy.md b/docs/docs/resources/teams/TeamsAppPermissionPolicy.md index 1649a64342..964b8afe99 100644 --- a/docs/docs/resources/teams/TeamsAppPermissionPolicy.md +++ b/docs/docs/resources/teams/TeamsAppPermissionPolicy.md @@ -43,11 +43,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsAppSetupPolicy.md b/docs/docs/resources/teams/TeamsAppSetupPolicy.md index 6fb0a48dd4..84b58adb0b 100644 --- a/docs/docs/resources/teams/TeamsAppSetupPolicy.md +++ b/docs/docs/resources/teams/TeamsAppSetupPolicy.md @@ -43,11 +43,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsAudioConferencingPolicy.md b/docs/docs/resources/teams/TeamsAudioConferencingPolicy.md index 2fa9af2832..1e95f04a16 100644 --- a/docs/docs/resources/teams/TeamsAudioConferencingPolicy.md +++ b/docs/docs/resources/teams/TeamsAudioConferencingPolicy.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsCallHoldPolicy.md b/docs/docs/resources/teams/TeamsCallHoldPolicy.md index d6955fe4be..11659cc00a 100644 --- a/docs/docs/resources/teams/TeamsCallHoldPolicy.md +++ b/docs/docs/resources/teams/TeamsCallHoldPolicy.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsCallParkPolicy.md b/docs/docs/resources/teams/TeamsCallParkPolicy.md index 1316cd4872..c5ead27b46 100644 --- a/docs/docs/resources/teams/TeamsCallParkPolicy.md +++ b/docs/docs/resources/teams/TeamsCallParkPolicy.md @@ -41,11 +41,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsCallingPolicy.md b/docs/docs/resources/teams/TeamsCallingPolicy.md index 08e1ccf5bf..e02834627c 100644 --- a/docs/docs/resources/teams/TeamsCallingPolicy.md +++ b/docs/docs/resources/teams/TeamsCallingPolicy.md @@ -58,11 +58,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsChannel.md b/docs/docs/resources/teams/TeamsChannel.md index e3ded4e4f2..e82a5fdc4a 100644 --- a/docs/docs/resources/teams/TeamsChannel.md +++ b/docs/docs/resources/teams/TeamsChannel.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsChannelsPolicy.md b/docs/docs/resources/teams/TeamsChannelsPolicy.md index 2295cbc445..58e9b9342d 100644 --- a/docs/docs/resources/teams/TeamsChannelsPolicy.md +++ b/docs/docs/resources/teams/TeamsChannelsPolicy.md @@ -45,11 +45,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsClientConfiguration.md b/docs/docs/resources/teams/TeamsClientConfiguration.md index 7bb061c90e..61a0cf8106 100644 --- a/docs/docs/resources/teams/TeamsClientConfiguration.md +++ b/docs/docs/resources/teams/TeamsClientConfiguration.md @@ -50,11 +50,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsComplianceRecordingPolicy.md b/docs/docs/resources/teams/TeamsComplianceRecordingPolicy.md index e6bd719534..49ba97567f 100644 --- a/docs/docs/resources/teams/TeamsComplianceRecordingPolicy.md +++ b/docs/docs/resources/teams/TeamsComplianceRecordingPolicy.md @@ -41,11 +41,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsCortanaPolicy.md b/docs/docs/resources/teams/TeamsCortanaPolicy.md index f16e39dcad..5a839ca4d3 100644 --- a/docs/docs/resources/teams/TeamsCortanaPolicy.md +++ b/docs/docs/resources/teams/TeamsCortanaPolicy.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsDialInConferencingTenantSettings.md b/docs/docs/resources/teams/TeamsDialInConferencingTenantSettings.md index 4b430890d9..abd82e30cb 100644 --- a/docs/docs/resources/teams/TeamsDialInConferencingTenantSettings.md +++ b/docs/docs/resources/teams/TeamsDialInConferencingTenantSettings.md @@ -48,11 +48,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsEmergencyCallRoutingPolicy.md b/docs/docs/resources/teams/TeamsEmergencyCallRoutingPolicy.md index 1ae3f70510..8a4d7f2460 100644 --- a/docs/docs/resources/teams/TeamsEmergencyCallRoutingPolicy.md +++ b/docs/docs/resources/teams/TeamsEmergencyCallRoutingPolicy.md @@ -51,11 +51,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsEmergencyCallingPolicy.md b/docs/docs/resources/teams/TeamsEmergencyCallingPolicy.md index 4f46b840a7..a595212b66 100644 --- a/docs/docs/resources/teams/TeamsEmergencyCallingPolicy.md +++ b/docs/docs/resources/teams/TeamsEmergencyCallingPolicy.md @@ -44,11 +44,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsEnhancedEncryptionPolicy.md b/docs/docs/resources/teams/TeamsEnhancedEncryptionPolicy.md index ad97ff3939..3c6252cb3e 100644 --- a/docs/docs/resources/teams/TeamsEnhancedEncryptionPolicy.md +++ b/docs/docs/resources/teams/TeamsEnhancedEncryptionPolicy.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsEventsPolicy.md b/docs/docs/resources/teams/TeamsEventsPolicy.md index de2c2e93ec..a241b6c24f 100644 --- a/docs/docs/resources/teams/TeamsEventsPolicy.md +++ b/docs/docs/resources/teams/TeamsEventsPolicy.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsFederationConfiguration.md b/docs/docs/resources/teams/TeamsFederationConfiguration.md index 6527542a92..ba13c65da0 100644 --- a/docs/docs/resources/teams/TeamsFederationConfiguration.md +++ b/docs/docs/resources/teams/TeamsFederationConfiguration.md @@ -46,11 +46,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsFeedbackPolicy.md b/docs/docs/resources/teams/TeamsFeedbackPolicy.md index 7165489816..1dbb8e6b1a 100644 --- a/docs/docs/resources/teams/TeamsFeedbackPolicy.md +++ b/docs/docs/resources/teams/TeamsFeedbackPolicy.md @@ -44,11 +44,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsFilesPolicy.md b/docs/docs/resources/teams/TeamsFilesPolicy.md index e130fe1781..1bd8c17558 100644 --- a/docs/docs/resources/teams/TeamsFilesPolicy.md +++ b/docs/docs/resources/teams/TeamsFilesPolicy.md @@ -40,11 +40,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsGroupPolicyAssignment.md b/docs/docs/resources/teams/TeamsGroupPolicyAssignment.md index 9ff89bdf27..ee566ae6ae 100644 --- a/docs/docs/resources/teams/TeamsGroupPolicyAssignment.md +++ b/docs/docs/resources/teams/TeamsGroupPolicyAssignment.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsGuestCallingConfiguration.md b/docs/docs/resources/teams/TeamsGuestCallingConfiguration.md index db7df97948..4764f83025 100644 --- a/docs/docs/resources/teams/TeamsGuestCallingConfiguration.md +++ b/docs/docs/resources/teams/TeamsGuestCallingConfiguration.md @@ -37,11 +37,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsGuestMeetingConfiguration.md b/docs/docs/resources/teams/TeamsGuestMeetingConfiguration.md index c480072447..e9eab80238 100644 --- a/docs/docs/resources/teams/TeamsGuestMeetingConfiguration.md +++ b/docs/docs/resources/teams/TeamsGuestMeetingConfiguration.md @@ -40,11 +40,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsGuestMessagingConfiguration.md b/docs/docs/resources/teams/TeamsGuestMessagingConfiguration.md index 421959294a..c5fa2585f9 100644 --- a/docs/docs/resources/teams/TeamsGuestMessagingConfiguration.md +++ b/docs/docs/resources/teams/TeamsGuestMessagingConfiguration.md @@ -45,11 +45,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsIPPhonePolicy.md b/docs/docs/resources/teams/TeamsIPPhonePolicy.md index 4a811850d5..7821f34895 100644 --- a/docs/docs/resources/teams/TeamsIPPhonePolicy.md +++ b/docs/docs/resources/teams/TeamsIPPhonePolicy.md @@ -43,11 +43,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsMeetingBroadcastConfiguration.md b/docs/docs/resources/teams/TeamsMeetingBroadcastConfiguration.md index d11bb8e52a..fa2eacceef 100644 --- a/docs/docs/resources/teams/TeamsMeetingBroadcastConfiguration.md +++ b/docs/docs/resources/teams/TeamsMeetingBroadcastConfiguration.md @@ -42,11 +42,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsMeetingBroadcastPolicy.md b/docs/docs/resources/teams/TeamsMeetingBroadcastPolicy.md index ea1590c098..05731066cf 100644 --- a/docs/docs/resources/teams/TeamsMeetingBroadcastPolicy.md +++ b/docs/docs/resources/teams/TeamsMeetingBroadcastPolicy.md @@ -41,11 +41,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsMeetingConfiguration.md b/docs/docs/resources/teams/TeamsMeetingConfiguration.md index e98833902d..cfb74ad539 100644 --- a/docs/docs/resources/teams/TeamsMeetingConfiguration.md +++ b/docs/docs/resources/teams/TeamsMeetingConfiguration.md @@ -49,11 +49,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsMeetingPolicy.md b/docs/docs/resources/teams/TeamsMeetingPolicy.md index 829283b2a5..efb223cea3 100644 --- a/docs/docs/resources/teams/TeamsMeetingPolicy.md +++ b/docs/docs/resources/teams/TeamsMeetingPolicy.md @@ -100,11 +100,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsMessagingPolicy.md b/docs/docs/resources/teams/TeamsMessagingPolicy.md index 9ade36ea7f..3ee08fae1b 100644 --- a/docs/docs/resources/teams/TeamsMessagingPolicy.md +++ b/docs/docs/resources/teams/TeamsMessagingPolicy.md @@ -58,11 +58,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsMobilityPolicy.md b/docs/docs/resources/teams/TeamsMobilityPolicy.md index 55d1bc33a7..dbc8781707 100644 --- a/docs/docs/resources/teams/TeamsMobilityPolicy.md +++ b/docs/docs/resources/teams/TeamsMobilityPolicy.md @@ -40,11 +40,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsNetworkRoamingPolicy.md b/docs/docs/resources/teams/TeamsNetworkRoamingPolicy.md index d1130a8a43..fda32b6d50 100644 --- a/docs/docs/resources/teams/TeamsNetworkRoamingPolicy.md +++ b/docs/docs/resources/teams/TeamsNetworkRoamingPolicy.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsOnlineVoiceUser.md b/docs/docs/resources/teams/TeamsOnlineVoiceUser.md index 42b946220a..885a3bcd2b 100644 --- a/docs/docs/resources/teams/TeamsOnlineVoiceUser.md +++ b/docs/docs/resources/teams/TeamsOnlineVoiceUser.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsOnlineVoicemailPolicy.md b/docs/docs/resources/teams/TeamsOnlineVoicemailPolicy.md index b0262f91e2..9d5dcb4d6b 100644 --- a/docs/docs/resources/teams/TeamsOnlineVoicemailPolicy.md +++ b/docs/docs/resources/teams/TeamsOnlineVoicemailPolicy.md @@ -48,11 +48,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsOnlineVoicemailUserSettings.md b/docs/docs/resources/teams/TeamsOnlineVoicemailUserSettings.md index b4f43faf83..4109f0bb3e 100644 --- a/docs/docs/resources/teams/TeamsOnlineVoicemailUserSettings.md +++ b/docs/docs/resources/teams/TeamsOnlineVoicemailUserSettings.md @@ -46,11 +46,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsOrgWideAppSettings.md b/docs/docs/resources/teams/TeamsOrgWideAppSettings.md index c33f187bc9..2d333b72b2 100644 --- a/docs/docs/resources/teams/TeamsOrgWideAppSettings.md +++ b/docs/docs/resources/teams/TeamsOrgWideAppSettings.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsPstnUsage.md b/docs/docs/resources/teams/TeamsPstnUsage.md index a41b77849a..991a4085d7 100644 --- a/docs/docs/resources/teams/TeamsPstnUsage.md +++ b/docs/docs/resources/teams/TeamsPstnUsage.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsShiftsPolicy.md b/docs/docs/resources/teams/TeamsShiftsPolicy.md index affd975059..d7dc1079f8 100644 --- a/docs/docs/resources/teams/TeamsShiftsPolicy.md +++ b/docs/docs/resources/teams/TeamsShiftsPolicy.md @@ -43,11 +43,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsTenantDialPlan.md b/docs/docs/resources/teams/TeamsTenantDialPlan.md index 6133858c32..ea276b4b6b 100644 --- a/docs/docs/resources/teams/TeamsTenantDialPlan.md +++ b/docs/docs/resources/teams/TeamsTenantDialPlan.md @@ -55,11 +55,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsTenantNetworkRegion.md b/docs/docs/resources/teams/TeamsTenantNetworkRegion.md index 929506256f..a3f7317a76 100644 --- a/docs/docs/resources/teams/TeamsTenantNetworkRegion.md +++ b/docs/docs/resources/teams/TeamsTenantNetworkRegion.md @@ -38,11 +38,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsTenantNetworkSite.md b/docs/docs/resources/teams/TeamsTenantNetworkSite.md index 2852dfeb55..276cebed6b 100644 --- a/docs/docs/resources/teams/TeamsTenantNetworkSite.md +++ b/docs/docs/resources/teams/TeamsTenantNetworkSite.md @@ -44,11 +44,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsTenantNetworkSubnet.md b/docs/docs/resources/teams/TeamsTenantNetworkSubnet.md index 4630fbd007..06c5ecf19a 100644 --- a/docs/docs/resources/teams/TeamsTenantNetworkSubnet.md +++ b/docs/docs/resources/teams/TeamsTenantNetworkSubnet.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsTranslationRule.md b/docs/docs/resources/teams/TeamsTranslationRule.md index 7d34348f8c..5bf465ca20 100644 --- a/docs/docs/resources/teams/TeamsTranslationRule.md +++ b/docs/docs/resources/teams/TeamsTranslationRule.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsUnassignedNumberTreatment.md b/docs/docs/resources/teams/TeamsUnassignedNumberTreatment.md index 51c6cc3a01..bc15a85cfe 100644 --- a/docs/docs/resources/teams/TeamsUnassignedNumberTreatment.md +++ b/docs/docs/resources/teams/TeamsUnassignedNumberTreatment.md @@ -41,11 +41,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsUpdateManagementPolicy.md b/docs/docs/resources/teams/TeamsUpdateManagementPolicy.md index 7517cd1663..131482c542 100644 --- a/docs/docs/resources/teams/TeamsUpdateManagementPolicy.md +++ b/docs/docs/resources/teams/TeamsUpdateManagementPolicy.md @@ -44,11 +44,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsUpgradeConfiguration.md b/docs/docs/resources/teams/TeamsUpgradeConfiguration.md index 16adff3898..6759f8c0a3 100644 --- a/docs/docs/resources/teams/TeamsUpgradeConfiguration.md +++ b/docs/docs/resources/teams/TeamsUpgradeConfiguration.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsUpgradePolicy.md b/docs/docs/resources/teams/TeamsUpgradePolicy.md index 888b4d3966..73285a763f 100644 --- a/docs/docs/resources/teams/TeamsUpgradePolicy.md +++ b/docs/docs/resources/teams/TeamsUpgradePolicy.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsUser.md b/docs/docs/resources/teams/TeamsUser.md index 46984be0a5..c9aadd4463 100644 --- a/docs/docs/resources/teams/TeamsUser.md +++ b/docs/docs/resources/teams/TeamsUser.md @@ -37,11 +37,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsVdiPolicy.md b/docs/docs/resources/teams/TeamsVdiPolicy.md index c8b2a03117..5bf7a9b8d3 100644 --- a/docs/docs/resources/teams/TeamsVdiPolicy.md +++ b/docs/docs/resources/teams/TeamsVdiPolicy.md @@ -39,11 +39,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsVoiceRoute.md b/docs/docs/resources/teams/TeamsVoiceRoute.md index b8573fe9ca..211a930790 100644 --- a/docs/docs/resources/teams/TeamsVoiceRoute.md +++ b/docs/docs/resources/teams/TeamsVoiceRoute.md @@ -43,11 +43,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsVoiceRoutingPolicy.md b/docs/docs/resources/teams/TeamsVoiceRoutingPolicy.md index cba13863d8..02add150e5 100644 --- a/docs/docs/resources/teams/TeamsVoiceRoutingPolicy.md +++ b/docs/docs/resources/teams/TeamsVoiceRoutingPolicy.md @@ -40,11 +40,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples diff --git a/docs/docs/resources/teams/TeamsWorkloadPolicy.md b/docs/docs/resources/teams/TeamsWorkloadPolicy.md index 126c4c0988..4b7588a542 100644 --- a/docs/docs/resources/teams/TeamsWorkloadPolicy.md +++ b/docs/docs/resources/teams/TeamsWorkloadPolicy.md @@ -44,11 +44,11 @@ To authenticate with the Microsoft Graph API, this resource required the followi - **Read** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All - **Update** - - None + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All ## Examples From e28b8a204ab49543a5d30f6cb167df1425369775 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Tue, 27 Jun 2023 06:34:23 -0400 Subject: [PATCH 25/40] Updates --- CHANGELOG.md | 12 ++++++------ .../MSFT_AADApplication/MSFT_AADApplication.psm1 | 1 - .../MSFT_AADServicePrincipal.psm1 | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0073abe378..0e56c958d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,11 +3,14 @@ # UNRELEASED * AADApplication - * Updated the Test function to ignore the AppId parameter. + * Updated the Set and Test function to ignore the AppId parameter. FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) * AADAuthenticationMethodPolicyAuthenticator * Deprecated the NumberMatchingRequiredState Feature Setting. FIXES [#3406](https://github.com/microsoft/Microsoft365DSC/issues/3406) +* AADServicePrincipal + * Updated the Set and Test function to ignore the AppId parameter. + FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) * EXOAvailabilityConfig * Fixes an error where an error was thrown when the OrgWideAccount wasn't set. FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) @@ -18,13 +21,10 @@ * Added required application permissions to support [Application Based Authentication](https://learn.microsoft.com/en-us/microsoftteams/teams-powershell-application-authentication) * MISC * Added API to the Organization.Read.All permission in the Get-M365DSCCompiledPermisisonList cmdlet - * Fixed Update-M365DSCAzureAdApplication where an error was thrown when multiple permissions were specified - for the same API. -* DEPENDENCIES - * Updated ReverseDSC to version 2.0.0.16. -* MISC * Fixes an issue with Update-M365DSCAzureAdApplication where it was throwing an error complaining about duplicate keys. FIXES #3417 +* DEPENDENCIES + * Updated ReverseDSC to version 2.0.0.16. # 1.23.621.1 diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 index 0a8840e906..26f91298fa 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 @@ -323,7 +323,6 @@ function Set-TargetResource $currentParameters.Remove('Ensure') | Out-Null $currentParameters.Remove('Credential') | Out-Null $currentParameters.Remove('ManagedIdentity') | Out-Null - $currentParameters.Remove('AppId') | Out-Null $backCurrentOwners = $currentAADApp.Owners $currentParameters.Remove('Owners') | Out-Null diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 index 7efd9fbeba..ac547aad31 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 @@ -301,6 +301,7 @@ function Set-TargetResource $currentParameters.Remove('Ensure') | Out-Null $currentParameters.Remove('ObjectID') | Out-Null $currentParameters.Remove('ApplicationSecret') | Out-Null + $currentParameters.Remove('AppId') | Out-Null # ServicePrincipal should exist but it doesn't if ($Ensure -eq 'Present' -and $currentAADServicePrincipal.Ensure -eq 'Absent') @@ -444,6 +445,7 @@ function Test-TargetResource $ValuesToCheck.Remove('CertificateThumbprint') | Out-Null $ValuesToCheck.Remove('ManagedIdentity') | Out-Null $ValuesToCheck.Remove('TenantId') | Out-Null + $ValuesToCheck.Remove('AppId') | Out-Null $TestResult = Test-M365DSCParameterState -CurrentValues $CurrentValues ` -Source $($MyInvocation.MyCommand.Source) ` From abe82e0f7a2ab917913643c003d56fabef0a8872 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Tue, 27 Jun 2023 07:56:10 -0400 Subject: [PATCH 26/40] Update M365DSCUtil.psm1 --- .../Microsoft365DSC/Modules/M365DSCUtil.psm1 | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 index 7cd06643a0..3742abf573 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 @@ -4076,7 +4076,34 @@ function Update-M365DSCModule { [CmdletBinding()] param() - Update-Module -Name 'Microsoft365DSC' + try + { + Update-Module -Name 'Microsoft365DSC' -ErrorAction Stop + } + catch + { + if ($_.Exception.Message -like "*Module 'Microsoft365DSC' was not installed by using Install-Module") + { + Write-Verbose -Message "The Microsoft365DSC module was not installed from the PowerShell Gallery and therefore cannot be updated." + } + } + try + { + Write-Verbose -Message "Unloading all instances of the Microsoft365DSC module from the current PowerShell session." + Remove-Module Microsoft365DSC -Force + + Write-Verbose -Message "Retrieving all versions of the Microsoft365DSC installed on the machine." + [Array]$instances = Get-Module Microsoft365DSC -ListAvailable | Sort-Object -Property Version -Descending + if ($instances.Length -gt 0) + { + Write-Verbose -Message "Loading version {$($instances[0].Version.ToString())} of the Microsoft365DSC module from {$($instances[0].ModuleBase)}" + Import-Module Microsoft365DSC -RequiredVersion $instances[0].Version.ToString() -Force + } + } + catch + { + throw $_ + } Update-M365DSCDependencies Uninstall-M365DSCOutdatedDependencies } From cc9341fd16ba5175af03110e3f22414f8117c798 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Tue, 27 Jun 2023 07:57:35 -0400 Subject: [PATCH 27/40] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e56c958d2..50514ecf7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,8 @@ * Added API to the Organization.Read.All permission in the Get-M365DSCCompiledPermisisonList cmdlet * Fixes an issue with Update-M365DSCAzureAdApplication where it was throwing an error complaining about duplicate keys. FIXES #3417 + * Update-M365DSCModule now forces a reload of the latest version of the Microsoft365DSC module. + FIXES [#3326](https://github.com/microsoft/Microsoft365DSC/issues/3326) * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. From 8fcb205e2a0f88cb3e6edd8c5821ab0287e959ca Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Tue, 27 Jun 2023 12:47:13 -0400 Subject: [PATCH 28/40] Various Performance Improvements --- CHANGELOG.md | 8 ++ .../MSFT_AADAdministrativeUnit.psm1 | 28 +++-- .../MSFT_AADApplication.psm1 | 28 ++++- .../MSFT_AADRoleDefinition.psm1 | 27 +++- .../MSFT_AADRoleSetting.psm1 | 32 +++-- .../MSFT_AADServicePrincipal.psm1 | 27 +++- .../Modules/M365DSCReverse.psm1 | 5 +- .../Microsoft365DSC/Modules/M365DSCUtil.psm1 | 119 +++++++++--------- 8 files changed, 179 insertions(+), 95 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50514ecf7a..a2b2bdb061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,15 +2,23 @@ # UNRELEASED +* AADAdministrativeUnit + * Improved export performance. * AADApplication * Updated the Set and Test function to ignore the AppId parameter. FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) + * Improved export performance. * AADAuthenticationMethodPolicyAuthenticator * Deprecated the NumberMatchingRequiredState Feature Setting. FIXES [#3406](https://github.com/microsoft/Microsoft365DSC/issues/3406) +* AADRoleDefinition + * Improved export performance. +* AADRoleSetting + * Improved export performance. * AADServicePrincipal * Updated the Set and Test function to ignore the AppId parameter. FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) + * Improved export performance. * EXOAvailabilityConfig * Fixes an error where an error was thrown when the OrgWideAccount wasn't set. FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADAdministrativeUnit/MSFT_AADAdministrativeUnit.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADAdministrativeUnit/MSFT_AADAdministrativeUnit.psm1 index ba710634fe..fa8c4d6aad 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADAdministrativeUnit/MSFT_AADAdministrativeUnit.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADAdministrativeUnit/MSFT_AADAdministrativeUnit.psm1 @@ -100,16 +100,29 @@ function Get-TargetResource #region resource generator code if (-not [string]::IsNullOrEmpty($Id)) { - $getValue = Get-MgDirectoryAdministrativeUnit -AdministrativeUnitId $Id -ErrorAction SilentlyContinue + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $getValue = $Script:exportedInstances | Where-Object -FilterScript {$_.Id -eq $Id} + } + else + { + $getValue = Get-MgDirectoryAdministrativeUnit -AdministrativeUnitId $Id -ErrorAction SilentlyContinue + } } if ($null -eq $getValue -and -not [string]::IsNullOrEmpty($DisplayName)) { Write-Verbose -Message "Could not find an Azure AD Administrative Unit with Id {$Id}" - if (-Not [string]::IsNullOrEmpty($DisplayName)) { - $getValue = Get-MgDirectoryAdministrativeUnit -Filter "DisplayName eq '$DisplayName'" -ErrorAction Stop + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $getValue = $Script:exportedInstances | Where-Object -FilterScript {$_.DisplayName -eq $DisplayName} + } + else + { + $getValue = Get-MgDirectoryAdministrativeUnit -Filter "DisplayName eq '$DisplayName'" -ErrorAction Stop + } } } #endregion @@ -946,14 +959,15 @@ function Export-TargetResource try { + $Script:ExportMode = $true #region resource generator code - [array]$getValue = Get-MgDirectoryAdministrativeUnit -All ` + [array] $Script:exportedInstances = Get-MgDirectoryAdministrativeUnit -All ` -ErrorAction Stop #endregion $i = 1 $dscContent = '' - if ($getValue.Length -eq 0) + if ($Script:exportedInstances.Length -eq 0) { Write-Host $Global:M365DSCEmojiGreenCheckMark } @@ -961,14 +975,14 @@ function Export-TargetResource { Write-Host "`r`n" -NoNewline } - foreach ($config in $getValue) + foreach ($config in $Script:exportedInstances) { $displayedKey = $config.Id if (-not [String]::IsNullOrEmpty($config.displayName)) { $displayedKey = $config.displayName } - Write-Host " |---[$i/$($getValue.Count)] $displayedKey" -NoNewline + Write-Host " |---[$i/$($Script:exportedInstances.Count)] $displayedKey" -NoNewline $params = @{ DisplayName = $config.DisplayName Id = $config.Id diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 index 26f91298fa..c223e5ed4e 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADApplication/MSFT_AADApplication.psm1 @@ -110,7 +110,14 @@ function Get-TargetResource { if (-not [System.String]::IsNullOrEmpty($AppId)) { - $AADApp = Get-MgApplication -Filter "AppId eq '$AppId'" + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $AADApp = $Script:exportedInstances | Where-Object -FilterScript {$_.Id -eq $AppId} + } + else + { + $AADApp = Get-MgApplication -Filter "AppId eq '$AppId'" + } } } catch @@ -121,11 +128,19 @@ function Get-TargetResource if ($null -eq $AADApp) { Write-Verbose -Message "Attempting to retrieve Azure AD Application by DisplayName {$DisplayName}" - $AADApp = Get-MgApplication -Filter "DisplayName eq '$($DisplayName)'" + + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $AADApp = $Script:exportedInstances | Where-Object -FilterScript {$_.DisplayName -eq $DisplayName} + } + else + { + $AADApp = Get-MgApplication -Filter "DisplayName eq '$($DisplayName)'" + } } if ($null -ne $AADApp -and $AADApp.Count -gt 1) { - Throw "Multiple AAD Apps with the Displayname $($DisplayName) exist in the tenant. Aborting." + Throw "Multiple AAD Apps with the Displayname $($DisplayName) exist in the tenant. These apps will not be exported." } elseif ($null -eq $AADApp) { @@ -799,10 +814,11 @@ function Export-TargetResource Write-Host "`r`n" -NoNewline try { - $AADApplications = Get-MgApplication -Filter $Filter -All -ErrorAction Stop - foreach ($AADApp in $AADApplications) + $Script:ExportMode = $true + [array] $Script:exportedInstances = Get-MgApplication -Filter $Filter -All -ErrorAction Stop + foreach ($AADApp in $Script:exportedInstances) { - Write-Host " |---[$i/$($AADApplications.Count)] $($AADApp.DisplayName)" -NoNewline + Write-Host " |---[$i/$($Script:exportedInstances.Count)] $($AADApp.DisplayName)" -NoNewline $Params = @{ ApplicationId = $ApplicationId AppId = $AADApp.AppId diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleDefinition/MSFT_AADRoleDefinition.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleDefinition/MSFT_AADRoleDefinition.psm1 index 0585d49adb..612e831d9d 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleDefinition/MSFT_AADRoleDefinition.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleDefinition/MSFT_AADRoleDefinition.psm1 @@ -91,7 +91,14 @@ function Get-TargetResource { if (($null -ne $Id) -and ($Id -ne '')) { - $AADRoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "Id eq '$($Id)'" + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $AADRoleDefinition = $Script:exportedInstances | Where-Object -FilterScript {$_.Id -eq $Id} + } + else + { + $AADRoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "Id eq '$($Id)'" + } } } catch @@ -100,7 +107,14 @@ function Get-TargetResource } if ($null -eq $AADRoleDefinition) { - $AADRoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq '$($DisplayName)'" + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $AADRoleDefinition = $Script:exportedInstances | Where-Object -FilterScript {$_.DisplayName -eq $DisplayName} + } + else + { + $AADRoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq '$($DisplayName)'" + } } if ($null -eq $AADRoleDefinition) { @@ -423,14 +437,15 @@ function Export-TargetResource $i = 1 try { - [array]$AADRoleDefinitions = Get-MgRoleManagementDirectoryRoleDefinition -Filter $Filter -All:$true -ErrorAction Stop - if ($AADRoleDefinitions.Length -gt 0) + $Script:ExportMode = $true + [array] $Script:exportedInstances = Get-MgRoleManagementDirectoryRoleDefinition -Filter $Filter -All:$true -ErrorAction Stop + if ($Script:exportedInstances.Length -gt 0) { Write-Host "`r`n" -NoNewline } - foreach ($AADRoleDefinition in $AADRoleDefinitions) + foreach ($AADRoleDefinition in $Script:exportedInstances) { - Write-Host " |---[$i/$($AADRoleDefinitions.Count)] $($AADRoleDefinition.DisplayName)" -NoNewline + Write-Host " |---[$i/$($Script:exportedInstances.Count)] $($AADRoleDefinition.DisplayName)" -NoNewline $Params = @{ Credential = $Credential ApplicationId = $ApplicationId diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 index 8b9278350c..d4d87853aa 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 @@ -216,14 +216,14 @@ function Get-TargetResource $nullReturn = $PSBoundParameters $nullReturn.Ensure = 'Absent' - #get role - [string]$Filter = $null - $Filter = "scopeId eq '/' and scopeType eq 'DirectoryRole' and RoleDefinitionId eq '" + $Id + "'" - #$Policy = Get-MgPolicyRoleManagementPolicyAssignment -Filter $Filter - try { - $Policy = Get-MgPolicyRoleManagementPolicyAssignment -Filter $Filter -ErrorAction Stop + if ($null -eq $Script:PolicyAssignments) + { + $allFilter = "scopeId eq '/' and scopeType eq 'DirectoryRole'" + $Script:PolicyAssignments = Get-MgPolicyRoleManagementPolicyAssignment -Filter $allFilter -All + } + $Policy = $Script:PolicyAssignments | Where-Object -FilterScript {$_.RoleDefinitionId -eq $Id} } catch { @@ -238,12 +238,19 @@ function Get-TargetResource { return $nullReturn } - $RoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId $Id + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $RoleDefinition = $Script:exportedInstances | Where-Object -FilterScript {$_.Id -eq $Id} + } + else + { + $RoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId $Id + } #get Policyrule $role = Get-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $Policy.Policyid - $Displayname = $RoleDefinition.DisplayName + $DisplayName = $RoleDefinition.DisplayName $ActivationMaxDuration = ($role | Where-Object { $_.Id -eq 'Expiration_EndUser_Assignment' }).AdditionalProperties.maximumDuration $ActivationReqJustification = (($role | Where-Object { $_.Id -eq 'Enablement_EndUser_Assignment' }).AdditionalProperties.enabledRules) -contains 'Justification' $ActivationReqTicket = (($role | Where-Object { $_.Id -eq 'Enablement_EndUser_Assignment' }).AdditionalProperties.enabledRules) -contains 'Ticketing' @@ -309,7 +316,7 @@ function Get-TargetResource Write-Verbose -Message "Found configuration of Rule $($Displayname)" $result = @{ Id = $Id - Displayname = $Displayname + DisplayName = $DisplayName ActivationMaxDuration = $ActivationMaxDuration ActivationReqJustification = $ActivationReqJustification ActivationReqTicket = $ActivationReqTicket @@ -1365,13 +1372,14 @@ function Export-TargetResource } try { - [array]$roles = Get-MgRoleManagementDirectoryRoleDefinition -Filter $Filter -ErrorAction Stop + $Script:ExportMode = $true + [array] $Script:exportedInstances = Get-MgRoleManagementDirectoryRoleDefinition -ErrorAction Stop $i = 1 $dscContent = '' Write-Host "`r`n" -NoNewline - foreach ($role in $roles) + foreach ($role in $Script:exportedInstances) { - Write-Host " |---[$i/$($roles.Count)] $($role.DisplayName)" -NoNewline + Write-Host " |---[$i/$($Script:exportedInstances.Count)] $($role.DisplayName)" -NoNewline $Params = @{ Id = $role.Id DisplayName = $role.DisplayName diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 index ac547aad31..87f6ac59dc 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADServicePrincipal/MSFT_AADServicePrincipal.psm1 @@ -119,8 +119,15 @@ function Get-TargetResource { if (-not [System.String]::IsNullOrEmpty($ObjectID)) { - $AADServicePrincipal = Get-MgServicePrincipal -ServicePrincipalId $ObjectId ` - -ErrorAction Stop + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $AADServicePrincipal = $Script:exportedInstances | Where-Object -FilterScript {$_.Id -eq $Id} + } + else + { + $AADServicePrincipal = Get-MgServicePrincipal -ServicePrincipalId $ObjectId ` + -ErrorAction Stop + } } } catch @@ -130,7 +137,14 @@ function Get-TargetResource if ($null -eq $AADServicePrincipal) { - $AADServicePrincipal = Get-MgServicePrincipal -Filter "AppID eq '$($AppId)'" + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $AADServicePrincipal = $Script:exportedInstances | Where-Object -FilterScript {$_.AppId -eq $AppId} + } + else + { + $AADServicePrincipal = Get-MgServicePrincipal -Filter "AppID eq '$($AppId)'" + } } if ($null -eq $AADServicePrincipal) { @@ -512,10 +526,11 @@ function Export-TargetResource { $i = 1 Write-Host "`r`n" -NoNewline - $AADServicePrincipals = Get-MgServicePrincipal -All:$true -Filter $Filter -ErrorAction Stop - foreach ($AADServicePrincipal in $AADServicePrincipals) + $Script:ExportMode = $true + [array] $Script:exportedInstances = Get-MgServicePrincipal -All:$true -Filter $Filter -ErrorAction Stop + foreach ($AADServicePrincipal in $Script:exportedInstances) { - Write-Host " |---[$i/$($AADServicePrincipals.Count)] $($AADServicePrincipal.DisplayName)" -NoNewline + Write-Host " |---[$i/$($Script:exportedInstances.Count)] $($AADServicePrincipal.DisplayName)" -NoNewline $Params = @{ Credential = $Credential ApplicationId = $ApplicationId diff --git a/Modules/Microsoft365DSC/Modules/M365DSCReverse.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCReverse.psm1 index 8fb4a49f5c..cc92ae20be 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCReverse.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCReverse.psm1 @@ -178,8 +178,6 @@ function Start-M365DSCConfigurationExtract Write-Host -Object ' ' - $allSupportedResourcesWithMostSecureAuthMethod = Get-M365DSCComponentsWithMostSecureAuthenticationType -AuthenticationMethod $AuthMethods - # If some resources are not supported based on the Authentication parameters # received, write a warning. if ($Components.Length -eq 0) @@ -198,6 +196,9 @@ function Start-M365DSCConfigurationExtract $selectedResources = $Components } + $allSupportedResourcesWithMostSecureAuthMethod = Get-M365DSCComponentsWithMostSecureAuthenticationType -AuthenticationMethod $AuthMethods ` + -Resources $selectedResources + try { if ($allSupportedResources.Length -eq 0) diff --git a/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 index 3742abf573..4025f0b787 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCUtil.psm1 @@ -3464,75 +3464,82 @@ function Get-M365DSCComponentsWithMostSecureAuthenticationType [Parameter()] [System.String[]] [ValidateSet('ApplicationWithSecret', 'CertificateThumbprint', 'CertificatePath', 'Credentials', 'CredentialsWithApplicationId', 'ManagedIdentity')] - $AuthenticationMethod + $AuthenticationMethod, + + [Parameter()] + [System.String[]] + $Resources ) $modules = Get-ChildItem -Path ($PSScriptRoot + '\..\DSCResources\') -Recurse -Filter '*.psm1' $Components = @() foreach ($resource in $modules) { - Import-Module $resource.FullName -Force - $parameters = (Get-Command 'Set-TargetResource').Parameters.Keys - - #Case - Resource supports CertificateThumbprint - if ($AuthenticationMethod.Contains('CertificateThumbprint') -and ` - $parameters.Contains('ApplicationId') -and ` - $parameters.Contains('CertificateThumbprint') -and ` - $parameters.Contains('TenantId')) + if ($Resources.Contains($resource.Name.Replace('.psm1', '').Replace('MSFT_', ''))) { - $Components += @{ - Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' - AuthMethod = 'CertificateThumbprint' + Import-Module $resource.FullName -Force + $parameters = (Get-Command 'Set-TargetResource').Parameters.Keys + + #Case - Resource supports CertificateThumbprint + if ($AuthenticationMethod.Contains('CertificateThumbprint') -and ` + $parameters.Contains('ApplicationId') -and ` + $parameters.Contains('CertificateThumbprint') -and ` + $parameters.Contains('TenantId')) + { + $Components += @{ + Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' + AuthMethod = 'CertificateThumbprint' + } } - } - # Case - Resource supports CertificatePath - elseif ($AuthenticationMethod.Contains('CertificatePath') -and ` - $parameters.Contains('ApplicationId') -and ` - $parameters.Contains('CertificatePath') -and ` - $parameters.Contains('TenantId')) - { - $Components += @{ - Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' - AuthMethod = 'CertificatePath' + # Case - Resource supports CertificatePath + elseif ($AuthenticationMethod.Contains('CertificatePath') -and ` + $parameters.Contains('ApplicationId') -and ` + $parameters.Contains('CertificatePath') -and ` + $parameters.Contains('TenantId')) + { + $Components += @{ + Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' + AuthMethod = 'CertificatePath' + } } - } - # Case - Resource supports ApplicationSecret - elseif ($AuthenticationMethod.Contains('ApplicationWithSecret') -and ` - $parameters.Contains('ApplicationId') -and ` - $parameters.Contains('ApplicationSecret') -and ` - $parameters.Contains('TenantId')) - { - $Components += @{ - Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' - AuthMethod = 'ApplicationSecret' + # Case - Resource supports ApplicationSecret + elseif ($AuthenticationMethod.Contains('ApplicationWithSecret') -and ` + $parameters.Contains('ApplicationId') -and ` + $parameters.Contains('ApplicationSecret') -and ` + $parameters.Contains('TenantId')) + { + $Components += @{ + Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' + AuthMethod = 'ApplicationSecret' + } } - } - # Case - Resource supports Credential using CredentialsWithApplicationId - elseif ($AuthenticationMethod.Contains('CredentialsWithApplicationId') -and ` - $parameters.Contains('Credential')) - { - $Components += @{ - Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' - AuthMethod = 'CredentialsWithApplicationId' + # Case - Resource supports Credential using CredentialsWithApplicationId + elseif ($AuthenticationMethod.Contains('CredentialsWithApplicationId') -and ` + $parameters.Contains('Credential')) + { + $Components += @{ + Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' + AuthMethod = 'CredentialsWithApplicationId' + } } - } - # Case - Resource supports Credential - elseif ($AuthenticationMethod.Contains('Credentials') -and ` - $parameters.Contains('Credential')) - { - $Components += @{ - Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' - AuthMethod = 'Credentials' + # Case - Resource supports Credential + elseif ($AuthenticationMethod.Contains('Credentials') -and ` + $parameters.Contains('Credential')) + { + $Components += @{ + Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' + AuthMethod = 'Credentials' + } } - } - elseif ($AuthenticationMethod.Contains('ManagedIdentity') -and ` - $parameters.Contains('ManagedIdentity')) - { - $Components += @{ - Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' - AuthMethod = 'ManagedIdentity' + elseif ($AuthenticationMethod.Contains('ManagedIdentity') -and ` + $parameters.Contains('ManagedIdentity')) + { + $Components += @{ + Resource = $resource.Name -replace 'MSFT_', '' -replace '.psm1', '' + AuthMethod = 'ManagedIdentity' + } } } } @@ -4050,7 +4057,7 @@ function Test-M365DSCModuleValidity $InformationPreference = 'Continue' # validate only one installation of the module is present (and it's the latest version available from the psgallery) - $latestVersion = (Find-Module -Name 'Microsoft365DSC').Version + $latestVersion = (Find-Module -Name 'Microsoft365DSC' -Repository 'PSGallery' -Includes 'DSCResource').Version $localVersion = (Get-Module -Name 'Microsoft365DSC').Version if ($latestVersion -gt $localVersion) From 981ace2876ac8026adb29184e2d6c34a29ed4278 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Tue, 27 Jun 2023 15:45:29 -0400 Subject: [PATCH 29/40] Fixes --- .../MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 | 12 ++++++++++++ .../Microsoft365DSC.AADRoleSetting.Tests.ps1 | 13 ++++--------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 index d4d87853aa..0cbd9f1712 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_AADRoleSetting/MSFT_AADRoleSetting.psm1 @@ -247,6 +247,18 @@ function Get-TargetResource $RoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId $Id } + if ($null -eq $RoleDefinition -and -not [System.String]::IsNullOrEmpty($Displayname)) + { + if ($null -ne $Script:exportedInstances -and $Script:ExportMode) + { + $RoleDefinition = $Script:exportedInstances | Where-Object -FilterScript {$_.DisplayName -eq $Displayname} + } + else + { + $RoleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "DisplayName eq '$DisplayName'" + } + } + #get Policyrule $role = Get-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $Policy.Policyid diff --git a/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADRoleSetting.Tests.ps1 b/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADRoleSetting.Tests.ps1 index cef640fa9e..dcee667ffd 100644 --- a/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADRoleSetting.Tests.ps1 +++ b/Tests/Unit/Microsoft365DSC/Microsoft365DSC.AADRoleSetting.Tests.ps1 @@ -37,6 +37,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { Mock -CommandName Get-MgPolicyRoleManagementPolicyAssignment -MockWith { return @{ PolicyId = 'DirectoryRole_1e1b61e9-1bad-4b5f-aca3-973feb8d36e0_2d3a49e9-4a0b-4456-b381-3311753988a8' + RoleDefinitionId = 'fe930be7-5e62-47db-91af-98c3a49a38b1' } } @@ -561,8 +562,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { } It 'Should return Values from the get method' { - Get-TargetResource @testParams - Should -Invoke -CommandName 'Get-MgPolicyRoleManagementPolicyRule' -Exactly 1 + (Get-TargetResource @testParams).Ensure | Should -Be "Present" } It 'Should return true from the test method' { @@ -626,12 +626,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { } It 'Should return values from the get method' { - Get-TargetResource @testParams - Should -Invoke -CommandName 'Get-MgRoleManagementDirectoryRoleDefinition' -Exactly 1 - } - - It 'Should return false from the test method' { - Test-TargetResource @testParams | Should -Be $false + (Get-TargetResource @testParams).Ensure | Should -Be "Present" } It 'Should call the set method' { @@ -652,7 +647,7 @@ Describe -Name $Global:DscHelper.DescribeHeader -Fixture { Mock -CommandName Get-MgRoleManagementDirectoryRoleDefinition -MockWith { $AADRoleDef = New-Object PSCustomObject - $AADRoleDef | Add-Member -MemberType NoteProperty -Name Id -Value '123-123-123-123' + $AADRoleDef | Add-Member -MemberType NoteProperty -Name Id -Value 'fe930be7-5e62-47db-91af-98c3a49a38b1' $AADRoleDef | Add-Member -MemberType NoteProperty -Name DisplayName -Value 'Role1' $AADRoleDef | Add-Member -MemberType NoteProperty -Name Description -Value 'This is a custom role' $AADRoleDef | Add-Member -MemberType NoteProperty -Name ResourceScopes -Value '/' From 1329aefe70fcc586ebd1ecae96d8c25dbeed8fde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andi=20Kr=C3=BCger?= <15608729+andikrueger@users.noreply.github.com> Date: Thu, 29 Jun 2023 15:37:44 +0200 Subject: [PATCH 30/40] fixes #3426 --- CHANGELOG.md | 3 + .../Modules/M365DSCPermissions.psm1 | 72 ++++++++++++++----- 2 files changed, 56 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2b2bdb061..ea6aa844ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,9 @@ FIXES #3417 * Update-M365DSCModule now forces a reload of the latest version of the Microsoft365DSC module. FIXES [#3326](https://github.com/microsoft/Microsoft365DSC/issues/3326) + * Update-M365DSCAyureADApplication + Added retry logic to catch the "Key credential end date is invalid" error when updating the application certificate. + FIXES [#3426](https://github.com/microsoft/Microsoft365DSC/issues/3426) * DEPENDENCIES * Updated ReverseDSC to version 2.0.0.16. diff --git a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 index e7cc4f2ef0..660191a418 100644 --- a/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 +++ b/Modules/Microsoft365DSC/Modules/M365DSCPermissions.psm1 @@ -67,8 +67,8 @@ function Get-M365DSCCompiledPermissionList @{ API = 'Graph' Permission = @{ - Name = "Organization.Read.All" - Type = "Application" + Name = 'Organization.Read.All' + Type = 'Application' } } ) @@ -76,8 +76,8 @@ function Get-M365DSCCompiledPermissionList @{ API = 'Graph' Permission = @{ - Name = "Organization.Read.All" - Type = "Application" + Name = 'Organization.Read.All' + Type = 'Application' } } ) @@ -1419,7 +1419,7 @@ function Update-M365DSCAzureAdApplication $allRequiredAccess = @{} foreach ($permission in $Permissions) { - if ($permission.Api -eq $null -or $permission.Api -notin @('Graph', 'SharePoint', 'Exchange')) + if ($null -eq $permission.Api -or $permission.Api -notin @('Graph', 'SharePoint', 'Exchange')) { Write-LogEntry "Specified permission is invalid $(Convert-M365DscHashtableToString -Hashtable $permission)" -Type Warning continue @@ -1456,7 +1456,7 @@ function Update-M365DSCAzureAdApplication if ($null -eq $role) { $ObjectGuid = [System.Guid]::empty - if ([System.Guid]::TryParse($permission.PermissionName ,[System.Management.Automation.PSReference]$ObjectGuid)) + if ([System.Guid]::TryParse($permission.PermissionName , [System.Management.Automation.PSReference]$ObjectGuid)) { $appPermission = @{ Id = $permission.PermissionName @@ -1509,7 +1509,7 @@ function Update-M365DSCAzureAdApplication if ($AdminConsent) { - if (-not $PSBoundParameters.ContainsKey("Credential")) + if (-not $PSBoundParameters.ContainsKey('Credential')) { Write-LogEntry '[ERROR] You need to provide admin credentials when specifying the AdminConsent parameter.' } @@ -1532,18 +1532,18 @@ function Update-M365DSCAzureAdApplication $password = $Credential.GetNetworkCredential().password $url = "https://main.iam.ad.ext.azure.com/api/Directories/$($tenant.tenantId)/Details" - $uri = "https://login.microsoftonline.com/{0}/oauth2/token" -f $tenantid - $body = "resource=74658136-14ec-4630-ad9b-26e160ff0fc6&client_id=1950a258-227b-4e31-a9cf-717495945fc2&grant_type=password&username={1}&password={0}" -f [System.Web.HttpUtility]::UrlEncode($password), $username + $uri = 'https://login.microsoftonline.com/{0}/oauth2/token' -f $tenantid + $body = 'resource=74658136-14ec-4630-ad9b-26e160ff0fc6&client_id=1950a258-227b-4e31-a9cf-717495945fc2&grant_type=password&username={1}&password={0}' -f [System.Web.HttpUtility]::UrlEncode($password), $username $token = Invoke-RestMethod $uri ` -Method POST ` -Body $body ` - -ContentType "application/x-www-form-urlencoded" ` + -ContentType 'application/x-www-form-urlencoded' ` -ErrorAction SilentlyContinue $headers = @{ - Authorization = "Bearer $($token.access_token)"; - "x-ms-client-request-id" = [guid]::NewGuid().ToString(); - "x-ms-client-session-id" = [guid]::NewGuid().ToString() + Authorization = "Bearer $($token.access_token)" + 'x-ms-client-request-id' = [guid]::NewGuid().ToString() + 'x-ms-client-session-id' = [guid]::NewGuid().ToString() } $applicationId = $azureADApp.AppId @@ -1596,8 +1596,8 @@ function Update-M365DSCAzureAdApplication $passwordCred = @{ displayName = 'Created by Microsoft365DSC' endDateTime = $endDate - } - $appCred = Add-MgApplicationPassword -ApplicationId $azureADApp.Id -PasswordCredential $passwordCred + } + $appCred = Add-MgApplicationPassword -ApplicationId $azureADApp.Id -PasswordCredential $passwordCred } } 'Certificate' @@ -1660,12 +1660,46 @@ function Update-M365DSCAzureAdApplication Write-LogEntry " Certificate details: $($cerCert.Subject) ($($cerCert.Thumbprint))" $params = @{ - Type = "AsymmetricX509Cert" - Usage = "Verify" - Key = $cerCert.GetRawCertData() + Type = 'AsymmetricX509Cert' + Usage = 'Verify' + Key = $cerCert.GetRawCertData() EndDateTime = $endDate } - $appCred = Update-MgApplication -ApplicationId $azureAdApp.Id -KeyCredentials $params + + $maxRetries = 3 + $retryCount = 0 + $retryDelay = 10 # seconds + + do + { + try + { + $appCred = Update-MgApplication -ApplicationId $azureAdApp.Id -KeyCredentials $params + break # exit the loop if the operation succeeds + } + catch + { + if ($_.Exception.Message -match 'Key credential end date is invalid') + { + Write-Host "Caught error: $($_.Exception.Message)" + if ($retryCount -lt $maxRetries) + { + $retryCount++ + Write-Host "Retrying in $retryDelay seconds..." + Start-Sleep -Seconds $retryDelay + } + else + { + Write-Host 'Maximum number of retries reached.' + throw # re-throw the exception if the maximum number of retries is reached + } + } + else + { + throw # re-throw the exception if it's not the expected error + } + } + } while ($true) } } } From 6d5f9f3fc779849d3157174baaeeac2382c911e0 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Thu, 29 Jun 2023 22:21:04 -0400 Subject: [PATCH 31/40] Update MSFT_O365OrgSettings.psm1 --- .../MSFT_O365OrgSettings.psm1 | 59 +++++++------------ 1 file changed, 20 insertions(+), 39 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 index 0be1c86b2d..560bf7a613 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_O365OrgSettings/MSFT_O365OrgSettings.psm1 @@ -611,6 +611,7 @@ function Set-TargetResource } if ($FormsParametersToUpdate.Keys.Count -gt 0) { + Write-Verbose -Message "Updating the Microsoft Forms settings with values:$(Convert-M365DscHashtableToString -Hashtable $FormsParametersToUpdate)" Update-M365DSCOrgSettingsForms -Options $FormsParametersToUpdate } @@ -618,18 +619,19 @@ function Set-TargetResource $DynamicsCustomerVoiceParametersToUpdate = @{} if ($DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled -ne $currentValues.DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled) { - $DynamicsCustomerVoiceParametersToUpdate.Add('isRestrictedSurveyAccessEnabled', $currentValues.DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled) + $DynamicsCustomerVoiceParametersToUpdate.Add('isRestrictedSurveyAccessEnabled', $DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled) } if ($DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled -ne $currentValues.DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled) { - $DynamicsCustomerVoiceParametersToUpdate.Add('isRecordIdentityByDefaultEnabled', $currentValues.DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled) + $DynamicsCustomerVoiceParametersToUpdate.Add('isRecordIdentityByDefaultEnabled', $DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled) } if ($DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled -ne $currentValues.DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled) { - $DynamicsCustomerVoiceParametersToUpdate.Add('isInOrgFormsPhishingScanEnabled', $currentValues.DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled) + $DynamicsCustomerVoiceParametersToUpdate.Add('isInOrgFormsPhishingScanEnabled', $DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled) } if ($DynamicsCustomerVoiceParametersToUpdate.Keys.Count -gt 0) { + Write-Verbose -Message "Updating the Dynamics 365 Customer Voice settings with values:$(Convert-M365DscHashtableToString -Hashtable $DynamicsCustomerVoiceParametersToUpdate)" Update-M365DSCOrgSettingsDynamicsCustomerVoice -Options $DynamicsCustomerVoiceParametersToUpdate } @@ -637,14 +639,15 @@ function Set-TargetResource $AppsAndServicesParametersToUpdate = @{} if ($AppsAndServicesIsOfficeStoreEnabled -ne $currentValues.AppsAndServicesIsOfficeStoreEnabled) { - $AppsAndServicesParametersToUpdate.Add('isOfficeStoreEnabled', $currentValues.AppsAndServicesIsOfficeStoreEnabled) + $AppsAndServicesParametersToUpdate.Add('isOfficeStoreEnabled', $AppsAndServicesIsOfficeStoreEnabled) } if ($AppsAndServicesIsAppAndServicesTrialEnabled -ne $currentValues.AppsAndServicesIsAppAndServicesTrialEnabled) { - $AppsAndServicesParametersToUpdate.Add('isAppAndServicesTrialEnabled', $currentValues.AppsAndServicesIsAppAndServicesTrialEnabled) + $AppsAndServicesParametersToUpdate.Add('isAppAndServicesTrialEnabled', $AppsAndServicesIsAppAndServicesTrialEnabled) } if ($AppsAndServicesParametersToUpdate.Keys.Count -gt 0) { + Write-Verbose -Message "Updating the Apps & Settings settings with values:$(Convert-M365DscHashtableToString -Hashtable $AppsAndServicesParametersToUpdate)" Update-M365DSCOrgSettingsAppsAndServices -Options $AppsAndServicesParametersToUpdate } @@ -652,18 +655,19 @@ function Set-TargetResource $ToDoParametersToUpdate = @{} if ($ToDoIsPushNotificationEnabled -ne $currentValues.ToDoIsPushNotificationEnabled) { - $ToDoParametersToUpdate.Add('isPushNotificationEnabled', $currentValues.ToDoIsPushNotificationEnabled) + $ToDoParametersToUpdate.Add('isPushNotificationEnabled', $ToDoIsPushNotificationEnabled) } if ($ToDoIsExternalJoinEnabled -ne $currentValues.ToDoIsExternalJoinEnabled) { - $ToDoParametersToUpdate.Add('isExternalJoinEnabled', $currentValues.ToDoIsExternalJoinEnabled) + $ToDoParametersToUpdate.Add('isExternalJoinEnabled', $ToDoIsExternalJoinEnabled) } if ($ToDoIsExternalShareEnabled -ne $currentValues.ToDoIsExternalShareEnabled) { - $ToDoParametersToUpdate.Add('isExternalShareEnabled', $currentValues.ToDoIsExternalShareEnabled) + $ToDoParametersToUpdate.Add('isExternalShareEnabled', $ToDoIsExternalShareEnabled) } if ($ToDoParametersToUpdate.Keys.Count -gt 0) { + Write-Verbose -Message "Updating the To Do settings with values:$(Convert-M365DscHashtableToString -Hashtable $ToDoParametersToUpdate)" Update-M365DSCOrgSettingsToDo -Options $ToDoParametersToUpdate } } @@ -1073,16 +1077,7 @@ function Get-M365DSCOrgSettingsForms param() $url = 'https://graph.microsoft.com/beta/admin/forms/settings' - #$results = Invoke-MgGraphRequest -Method GET -Uri $url - $results = @{ - isExternalSendFormEnabled = $true - isExternalShareCollaborationEnabled = $true - isExternalShareResultEnabled = $false - isExternalShareTemplateEnabled = $false - isRecordIdentityByDefaultEnabled = $false - isBingImageSearchEnabled = $false - isInOrgFormsPhishingScanEnabled = $false - } + $results = Invoke-MgGraphRequest -Method GET -Uri $url return $results } @@ -1100,7 +1095,7 @@ function Update-M365DSCOrgSettingsForms { Write-Verbose -Message "Updating Forms Settings" $url = 'https://graph.microsoft.com/beta/admin/forms/settings' - #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } catch { @@ -1119,12 +1114,7 @@ function Get-M365DSCOrgSettingsDynamicsCustomerVoice param() $url = 'https://graph.microsoft.com/beta/admin/dynamics/customerVoice' - #$results = Invoke-MgGraphRequest -Method GET -Uri $url - $results = @{ - isRestrictedSurveyAccessEnabled = $true - isRecordIdentityByDefaultEnabled = $false - isInOrgFormsPhishingScanEnabled = $false - } + $results = Invoke-MgGraphRequest -Method GET -Uri $url return $results } @@ -1142,7 +1132,7 @@ function Update-M365DSCOrgSettingsDynamicsCustomerVoice { Write-Verbose -Message "Updating Dynamics Customer Voice Settings" $url = 'https://graph.microsoft.com/beta/admin/dynamics/customerVoice' - #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } catch { @@ -1161,11 +1151,7 @@ function Get-M365DSCOrgSettingsAppsAndServices param() $url = 'https://graph.microsoft.com/beta/admin/appsAndServices/settings' - #$results = Invoke-MgGraphRequest -Method GET -Uri $url - $results = @{ - isOfficeStoreEnabled = $true - isAppAndServicesTrialEnabled = $false - } + $results = Invoke-MgGraphRequest -Method GET -Uri $url return $results } @@ -1183,7 +1169,7 @@ function Update-M365DSCOrgSettingsAppsAndServices { Write-Verbose -Message "Updating App & Services Settings" $url = 'https://graph.microsoft.com/beta/admin/appsAndServices/settings' - #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } catch { @@ -1201,12 +1187,7 @@ function Get-M365DSCOrgSettingsToDo param() $url = 'https://graph.microsoft.com/beta/admin/todo/settings' - #$results = Invoke-MgGraphRequest -Method GET -Uri $url - $results = @{ - isPushNotificationEnabled = $true - isExternalJoinEnabled = $true - isExternalShareEnabled = $false - } + $results = Invoke-MgGraphRequest -Method GET -Uri $url return $results } @@ -1224,7 +1205,7 @@ function Update-M365DSCOrgSettingsToDo { Write-Verbose -Message "Updating To Do Settings" $url = 'https://graph.microsoft.com/beta/admin/todo/settings' - #Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null + Invoke-MgGraphRequest -Method PATCH -Uri $url -Body $Options | Out-Null } catch { From f8e5ac5266c8ee00fe1acf59eaf0005d41e004fe Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 11:27:27 -0400 Subject: [PATCH 32/40] Initial Release --- CHANGELOG.md | 2 + .../MSFT_TeamsCallQueue.psm1 | 940 ++++++++++++++++++ .../MSFT_TeamsCallQueue.schema.mof | 58 ++ .../MSFT_TeamsCallQueue/readme.md | 7 + .../MSFT_TeamsCallQueue/settings.json | 66 ++ .../1-CreateTeamsCallQueue-Example.ps1 | 42 + .../Microsoft365DSC.TeamsCallQueue.Tests.ps1 | 343 +++++++ 7 files changed, 1458 insertions(+) create mode 100644 Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.psm1 create mode 100644 Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.schema.mof create mode 100644 Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md create mode 100644 Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json create mode 100644 Modules/Microsoft365DSC/Examples/Resources/TeamsCallQueue/1-CreateTeamsCallQueue-Example.ps1 create mode 100644 Tests/Unit/Microsoft365DSC/Microsoft365DSC.TeamsCallQueue.Tests.ps1 diff --git a/CHANGELOG.md b/CHANGELOG.md index ea6aa844ad..b036f93bf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ * IntuneDeviceEnrollmentPlatformRestriction * Fixes an error where the WindowsMobileRestriction property was still being assessed dispite it being deprecated. FIXES [#3407](https://github.com/microsoft/Microsoft365DSC/issues/3407) +* TeamsCallQueue + * Initial release. * Teams resources * Added required application permissions to support [Application Based Authentication](https://learn.microsoft.com/en-us/microsoftteams/teams-powershell-application-authentication) * MISC diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.psm1 b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.psm1 new file mode 100644 index 0000000000..6c3f10b87a --- /dev/null +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.psm1 @@ -0,0 +1,940 @@ +function Get-TargetResource +{ + [CmdletBinding()] + [OutputType([System.Collections.Hashtable])] + param + ( + [Parameter(Mandatory = $true)] + [System.String] + $Name, + + [Parameter()] + [ValidateRange(15,180)] + [System.UInt16] + $AgentAlertTime, + + [Parameter()] + [System.Boolean] + $AllowOptOut, + + [Parameter()] + [System.String[]] + $DistributionLists, + + [Parameter()] + [System.Boolean] + $UseDefaultMusicOnHold, + + [Parameter()] + [System.String] + $WelcomeMusicAudioFileId, + + [Parameter()] + [System.String] + $MusicOnHoldAudioFileId, + + [Parameter()] + [ValidateSet("DisconnectWithBusy","Forward","Voicemail","SharedVoicemail")] + [System.String] + $OverflowAction, + + [Parameter()] + [System.String] + $OverflowActionTarget, + + [Parameter()] + [ValidateRange(0,200)] + [System.UInt16] + $OverflowThreshold, + + [Parameter()] + [ValidateSet("Disconnect","Forward","Voicemail","SharedVoicemail")] + [System.String] + $TimeoutAction, + + [Parameter()] + [System.String] + $TimeoutActionTarget, + + [Parameter()] + [ValidateRange(0,2700)] + [System.UInt16] + $TimeoutThreshold, + + [Parameter()] + [ValidateSet("Attendant","Serial","RoundRobin","LongestIdle")] + [System.String] + $RoutingMethod, + + [Parameter()] + [System.Boolean] + $PresenceBasedRouting, + + [Parameter()] + [System.Boolean] + $ConferenceMode, + + [Parameter()] + [System.String[]] + $Users, + + [Parameter()] + [System.String] + $LanguageId, + + [Parameter()] + [System.String[]] + $OboResourceAccountIds, + + [Parameter()] + [System.String] + $OverflowDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowDisconnectAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Boolean] + $EnableOverflowSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $TimeoutDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutDisconnectAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Boolean] + $EnableTimeoutSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $ChannelId, + + [Parameter()] + [System.String] + $ChannelUserObjectId, + + [Parameter()] + [System.String[]] + $AuthorizedUsers, + + [Parameter()] + [ValidateSet('Present', 'Absent')] + [System.String] + $Ensure = 'Present', + + [Parameter()] + [System.Management.Automation.PSCredential] + $Credential, + + [Parameter()] + [System.String] + $ApplicationId, + + [Parameter()] + [System.String] + $TenantId, + + [Parameter()] + [System.String] + $CertificateThumbprint + ) + + Write-Verbose -Message "Getting configuration of Teams Call Queue {$Name}" + + $ConnectionMode = New-M365DSCConnection -Workload 'MicrosoftTeams' ` + -InboundParameters $PSBoundParameters + + #Ensure the proper dependencies are installed in the current environment. + Confirm-M365DSCDependencies + + #region Telemetry + $ResourceName = $MyInvocation.MyCommand.ModuleName -replace 'MSFT_', '' + $CommandName = $MyInvocation.MyCommand + $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName ` + -CommandName $CommandName ` + -Parameters $PSBoundParameters + Add-M365DSCTelemetryEvent -Data $data + #endregion + + $nullReturn = $PSBoundParameters + $nullReturn.Ensure = 'Absent' + try + { + $queue = Get-CsCallQueue -NameFilter $Name ` + -ErrorAction SilentlyContinue | Where-Object -FilterScript {$_.Name -eq $Name} + + if ($null -eq $queue) + { + return $nullReturn + } + else + { + return @{ + Name = $queue.Name + AgentAlertTime = $queue.AgentAlertTime + AllowOptOut = $queue.AllowOptOut + DistributionLists = [String[]]$queue.DistributionLists + UseDefaultMusicOnHold = $queue.UseDefaultMusicOnHold + WelcomeMusicAudioFileId = $queue.WelcomeMusicAudioFileId + MusicOnHoldAudioFileId = $queue.MusicOnHoldAudioFileId + OverflowAction = $queue.OverflowAction + OverflowActionTarget = $queue.OverflowActionTarget.Id + OverflowThreshold = $queue.OverflowThreshold + TimeoutAction = $queue.TimeoutAction + TimeoutActionTarget = $queue.TimeoutActionTarget.Id + TimeoutThreshold = $queue.TimeoutThreshold + RoutingMethod = $queue.RoutingMethod + PresenceBasedRouting = $queue.PresenceBasedRouting + ConferenceMode = $queue.ConferenceMode + Users = [String[]]$queue.Users + LanguageId = $queue.LanguageId + OboResourceAccountIds = [String[]]$queue.OboResourceAccountIds + OverflowDisconnectTextToSpeechPrompt = $queue.OverflowDisconnectTextToSpeechPrompt + OverflowDisconnectAudioFilePrompt = $queue.OverflowDisconnectAudioFilePrompt + OverflowRedirectPersonTextToSpeechPrompt = $queue.OverflowRedirectPersonTextToSpeechPrompt + OverflowRedirectPersonAudioFilePrompt = $queue.OverflowRedirectPersonAudioFilePrompt + OverflowRedirectVoiceAppTextToSpeechPrompt = $queue.OverflowRedirectVoiceAppTextToSpeechPrompt + OverflowRedirectVoiceAppAudioFilePrompt = $queue.OverflowRedirectVoiceAppAudioFilePrompt + OverflowRedirectPhoneNumberTextToSpeechPrompt = $queue.OverflowRedirectPhoneNumberTextToSpeechPrompt + OverflowRedirectPhoneNumberAudioFilePrompt = $queue.OverflowRedirectPhoneNumberAudioFilePrompt + OverflowRedirectVoicemailTextToSpeechPrompt = $queue.OverflowRedirectVoicemailTextToSpeechPrompt + OverflowRedirectVoicemailAudioFilePrompt = $queue.OverflowRedirectVoicemailAudioFilePrompt + OverflowSharedVoicemailTextToSpeechPrompt = $queue.OverflowSharedVoicemailTextToSpeechPrompt + OverflowSharedVoicemailAudioFilePrompt = $queue.OverflowSharedVoicemailAudioFilePrompt + EnableOverflowSharedVoicemailTranscription = $queue.EnableOverflowSharedVoicemailTranscription + TimeoutDisconnectTextToSpeechPrompt = $queue.TimeoutDisconnectTextToSpeechPrompt + TimeoutDisconnectAudioFilePrompt = $queue.TimeoutDisconnectAudioFilePrompt + TimeoutRedirectPersonTextToSpeechPrompt = $queue.TimeoutRedirectPersonTextToSpeechPrompt + TimeoutRedirectPersonAudioFilePrompt = $queue.TimeoutRedirectPersonAudioFilePrompt + TimeoutRedirectVoiceAppTextToSpeechPrompt = $queue.TimeoutRedirectVoiceAppTextToSpeechPrompt + TimeoutRedirectVoiceAppAudioFilePrompt = $queue.TimeoutRedirectVoiceAppAudioFilePrompt + TimeoutRedirectPhoneNumberTextToSpeechPrompt = $queue.TimeoutRedirectPhoneNumberTextToSpeechPrompt + TimeoutRedirectPhoneNumberAudioFilePrompt = $queue.TimeoutRedirectPhoneNumberAudioFilePrompt + TimeoutRedirectVoicemailTextToSpeechPrompt = $queue.TimeoutRedirectVoicemailTextToSpeechPrompt + TimeoutRedirectVoicemailAudioFilePrompt = $queue.TimeoutRedirectVoicemailAudioFilePrompt + TimeoutSharedVoicemailTextToSpeechPrompt = $queue.TimeoutSharedVoicemailTextToSpeechPrompt + TimeoutSharedVoicemailAudioFilePrompt = $queue.TimeoutSharedVoicemailAudioFilePrompt + EnableTimeoutSharedVoicemailTranscription = $queue.EnableTimeoutSharedVoicemailTranscription + ChannelId = $queue.ChannelId + ChannelUserObjectId = $queue.ChannelUserObjectId + AuthorizedUsers = [String[]]$queue.AuthorizedUsers + Ensure = 'Present' + Credential = $Credential + ApplicationId = $ApplicationId + TenantId = $TenantId + CertificateThumbprint = $CertificateThumbprint + } + } + } + catch + { + New-M365DSCLogEntry -Message 'Error retrieving data:' ` + -Exception $_ ` + -Source $($MyInvocation.MyCommand.Source) ` + -TenantId $TenantId ` + -Credential $Credential + + return $nullReturn + } +} + +function Set-TargetResource +{ + [CmdletBinding()] + param + ( + [Parameter(Mandatory = $true)] + [System.String] + $Name, + + [Parameter()] + [ValidateRange(15,180)] + [System.UInt16] + $AgentAlertTime, + + [Parameter()] + [System.Boolean] + $AllowOptOut, + + [Parameter()] + [System.String[]] + $DistributionLists, + + [Parameter()] + [System.Boolean] + $UseDefaultMusicOnHold, + + [Parameter()] + [System.String] + $WelcomeMusicAudioFileId, + + [Parameter()] + [System.String] + $MusicOnHoldAudioFileId, + + [Parameter()] + [ValidateSet("DisconnectWithBusy","Forward","Voicemail","SharedVoicemail")] + [System.String] + $OverflowAction, + + [Parameter()] + [System.String] + $OverflowActionTarget, + + [Parameter()] + [ValidateRange(0,200)] + [System.UInt16] + $OverflowThreshold, + + [Parameter()] + [ValidateSet("Disconnect","Forward","Voicemail","SharedVoicemail")] + [System.String] + $TimeoutAction, + + [Parameter()] + [System.String] + $TimeoutActionTarget, + + [Parameter()] + [ValidateRange(0,2700)] + [System.UInt16] + $TimeoutThreshold, + + [Parameter()] + [ValidateSet("Attendant","Serial","RoundRobin","LongestIdle")] + [System.String] + $RoutingMethod, + + [Parameter()] + [System.Boolean] + $PresenceBasedRouting, + + [Parameter()] + [System.Boolean] + $ConferenceMode, + + [Parameter()] + [System.String[]] + $Users, + + [Parameter()] + [System.String] + $LanguageId, + + [Parameter()] + [System.String[]] + $OboResourceAccountIds, + + [Parameter()] + [System.String] + $OverflowDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowDisconnectAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Boolean] + $EnableOverflowSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $TimeoutDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutDisconnectAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Boolean] + $EnableTimeoutSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $ChannelId, + + [Parameter()] + [System.String] + $ChannelUserObjectId, + + [Parameter()] + [System.String[]] + $AuthorizedUsers, + + [Parameter()] + [ValidateSet('Present', 'Absent')] + [System.String] + $Ensure = 'Present', + + [Parameter()] + [System.Management.Automation.PSCredential] + $Credential, + + [Parameter()] + [System.String] + $ApplicationId, + + [Parameter()] + [System.String] + $TenantId, + + [Parameter()] + [System.String] + $CertificateThumbprint + ) + + Write-Verbose -Message "Setting configuration of Teams Call Queue {$Name}" + + #Ensure the proper dependencies are installed in the current environment. + Confirm-M365DSCDependencies + + #region Telemetry + $ResourceName = $MyInvocation.MyCommand.ModuleName -replace 'MSFT_', '' + $CommandName = $MyInvocation.MyCommand + $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName ` + -CommandName $CommandName ` + -Parameters $PSBoundParameters + Add-M365DSCTelemetryEvent -Data $data + #endregion + + $ConnectionMode = New-M365DSCConnection -Workload 'MicrosoftTeams' ` + -InboundParameters $PSBoundParameters + + $currentValues = Get-TargetResource @PSBoundParameters + + $opsParameters = $PSBoundParameters + $opsParameters.Remove('Credential') | Out-Null + $opsParameters.Remove('ApplicationId') | Out-Null + $opsParameters.Remove('TenantId') | Out-Null + $opsParameters.Remove('CertificateThumbprint') | Out-Null + $opsParameters.Remove('Ensure') | Out-Null + + if ($currentValues.Ensure -eq 'Absent' -and 'Present' -eq $Ensure ) + { + Write-Verbose -Message "Creating a new Teams Call Queue {$Name}" + New-CsCallQueue @opsParameters + } + elseif (($currentValues.Ensure -eq 'Present' -and 'Present' -eq $Ensure)) + { + Write-Verbose -Message "Updating Teams Call Queue {$Name}" + $queue = Get-CsCallQueue -NameFilter $Name + $opsParameters.Add('Identity', $queue.Id) + Set-CsCallQueue @opsParameters + } + elseif (($Ensure -eq 'Absent' -and $currentValues.Ensure -eq 'Present')) + { + Write-Verbose -Message "Removing Teams Call Queue {$Name}" + $queue = Get-CsCallQueue -NameFilter $Name + Remove-CsCallQueue -Identity $queue.Id + } +} + +function Test-TargetResource +{ + [CmdletBinding()] + [OutputType([System.Boolean])] + param + ( + [Parameter(Mandatory = $true)] + [System.String] + $Name, + + [Parameter()] + [ValidateRange(15,180)] + [System.UInt16] + $AgentAlertTime, + + [Parameter()] + [System.Boolean] + $AllowOptOut, + + [Parameter()] + [System.String[]] + $DistributionLists, + + [Parameter()] + [System.Boolean] + $UseDefaultMusicOnHold, + + [Parameter()] + [System.String] + $WelcomeMusicAudioFileId, + + [Parameter()] + [System.String] + $MusicOnHoldAudioFileId, + + [Parameter()] + [ValidateSet("DisconnectWithBusy","Forward","Voicemail","SharedVoicemail")] + [System.String] + $OverflowAction, + + [Parameter()] + [System.String] + $OverflowActionTarget, + + [Parameter()] + [ValidateRange(0,200)] + [System.UInt16] + $OverflowThreshold, + + [Parameter()] + [ValidateSet("Disconnect","Forward","Voicemail","SharedVoicemail")] + [System.String] + $TimeoutAction, + + [Parameter()] + [System.String] + $TimeoutActionTarget, + + [Parameter()] + [ValidateRange(0,2700)] + [System.UInt16] + $TimeoutThreshold, + + [Parameter()] + [ValidateSet("Attendant","Serial","RoundRobin","LongestIdle")] + [System.String] + $RoutingMethod, + + [Parameter()] + [System.Boolean] + $PresenceBasedRouting, + + [Parameter()] + [System.Boolean] + $ConferenceMode, + + [Parameter()] + [System.String[]] + $Users, + + [Parameter()] + [System.String] + $LanguageId, + + [Parameter()] + [System.String[]] + $OboResourceAccountIds, + + [Parameter()] + [System.String] + $OverflowDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowDisconnectAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Boolean] + $EnableOverflowSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $TimeoutDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutDisconnectAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Boolean] + $EnableTimeoutSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $ChannelId, + + [Parameter()] + [System.String] + $ChannelUserObjectId, + + [Parameter()] + [System.String[]] + $AuthorizedUsers, + + [Parameter()] + [ValidateSet('Present', 'Absent')] + [System.String] + $Ensure = 'Present', + + [Parameter()] + [System.Management.Automation.PSCredential] + $Credential, + + [Parameter()] + [System.String] + $ApplicationId, + + [Parameter()] + [System.String] + $TenantId, + + [Parameter()] + [System.String] + $CertificateThumbprint + ) + #Ensure the proper dependencies are installed in the current environment. + Confirm-M365DSCDependencies + + #region Telemetry + $ResourceName = $MyInvocation.MyCommand.ModuleName -replace 'MSFT_', '' + $CommandName = $MyInvocation.MyCommand + $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName ` + -CommandName $CommandName ` + -Parameters $PSBoundParameters + Add-M365DSCTelemetryEvent -Data $data + #endregion + + Write-Verbose -Message "Testing configuration of Teams Call Queue {$Name}" + + $CurrentValues = Get-TargetResource @PSBoundParameters + + Write-Verbose -Message "Current Values: $(Convert-M365DscHashtableToString -Hashtable $CurrentValues)" + Write-Verbose -Message "Target Values: $(Convert-M365DscHashtableToString -Hashtable $PSBoundParameters)" + + $ValuesToCheck = $PSBoundParameters + + $TestResult = Test-M365DSCParameterState ` + -CurrentValues $CurrentValues ` + -Source $($MyInvocation.MyCommand.Source) ` + -DesiredValues $PSBoundParameters ` + -ValuesToCheck $ValuesToCheck.Keys + + Write-Verbose -Message "Test-TargetResource returned $TestResult" + + return $TestResult +} + +function Export-TargetResource +{ + [CmdletBinding()] + [OutputType([System.String])] + param + ( + [Parameter()] + [System.Management.Automation.PSCredential] + $Credential, + + [Parameter()] + [System.String] + $ApplicationId, + + [Parameter()] + [System.String] + $TenantId, + + [Parameter()] + [System.String] + $CertificateThumbprint + ) + $ConnectionMode = New-M365DSCConnection -Workload 'MicrosoftTeams' ` + -InboundParameters $PSBoundParameters + + #Ensure the proper dependencies are installed in the current environment. + Confirm-M365DSCDependencies + + #region Telemetry + $ResourceName = $MyInvocation.MyCommand.ModuleName -replace 'MSFT_', '' + $CommandName = $MyInvocation.MyCommand + $data = Format-M365DSCTelemetryParameters -ResourceName $ResourceName ` + -CommandName $CommandName ` + -Parameters $PSBoundParameters + Add-M365DSCTelemetryEvent -Data $data + #endregion + + try + { + $i = 1 + $Script:ExportMode = $true + [array] $Script:exportedInstances = Get-CsCallQueue -ErrorAction Stop + $dscContent = [System.Text.StringBuilder]::New() + Write-Host "`r`n" -NoNewline + foreach ($instance in $exportedInstances) + { + Write-Host " |---[$i/$($exportedInstances.Count)] $($instance.Name)" -NoNewline + + $params = @{ + Name = $instance.Name + Ensure = 'Present' + Credential = $Credential + ApplicationId = $ApplicationId + TenantId = $TenantId + CertificateThumbprint = $CertificateThumbprint + } + $Results = Get-TargetResource @Params + $Results = Update-M365DSCExportAuthenticationResults -ConnectionMode $ConnectionMode ` + -Results $Results + $currentDSCBlock = Get-M365DSCExportContentForResource -ResourceName $ResourceName ` + -ConnectionMode $ConnectionMode ` + -ModulePath $PSScriptRoot ` + -Results $Results ` + -Credential $Credential + $dscContent.Append($currentDSCBlock) | Out-Null + Save-M365DSCPartialExport -Content $currentDSCBlock ` + -FileName $Global:PartialExportFileName + $i++ + Write-Host $Global:M365DSCEmojiGreenCheckMark + } + return $dscContent.ToString() + } + catch + { + Write-Host $Global:M365DSCEmojiRedX + + New-M365DSCLogEntry -Message 'Error during Export:' ` + -Exception $_ ` + -Source $($MyInvocation.MyCommand.Source) ` + -TenantId $TenantId ` + -Credential $Credential + + return '' + } +} + +Export-ModuleMember -Function *-TargetResource diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.schema.mof b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.schema.mof new file mode 100644 index 0000000000..dc9d7419c7 --- /dev/null +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/MSFT_TeamsCallQueue.schema.mof @@ -0,0 +1,58 @@ +[ClassVersion("1.0.0.0"), FriendlyName("TeamsCallQueue")] +class MSFT_TeamsCallQueue : OMI_BaseResource +{ + [Key, Description("The Name parameter specifies a unique name for the Call Queue.")] String Name; + [Write, Description("The Name parameter specifies a unique name for the Call Queue.")] UInt16 AgentAlertTime; + [Write, Description("The AllowOptOut parameter indicates whether or not agents can opt in or opt out from taking calls from a Call Queue.")] Boolean AllowOptOut; + [Write, Description("The DistributionLists parameter lets you add all the members of the distribution lists to the Call Queue. This is a list of distribution list GUIDs. A service wide configurable maximum number of DLs per Call Queue are allowed. Only the first N (service wide configurable) agents from all distribution lists combined are considered for accepting the call. Nested DLs are supported. O365 Groups can also be used to add members to the Call Queue.")] String DistributionLists[]; + [Write, Description("The UseDefaultMusicOnHold parameter indicates that this Call Queue uses the default music on hold. This parameter cannot be specified together with MusicOnHoldAudioFileId.")] Boolean UseDefaultMusicOnHold; + [Write, Description("The WelcomeMusicAudioFileId parameter represents the audio file to play when callers are connected with the Call Queue. This is the unique identifier of the audio file.")] String WelcomeMusicAudioFileId; + [Write, Description("The MusicOnHoldFileContent parameter represents music to play when callers are placed on hold. This is the unique identifier of the audio file. This parameter is required if the UseDefaultMusicOnHold parameter is not specified.")] String MusicOnHoldAudioFileId; + [Write, Description("The OverflowAction parameter designates the action to take if the overflow threshold is reached. The OverflowAction property must be set to one of the following values: DisconnectWithBusy, Forward, Voicemail, and SharedVoicemail. The default value is DisconnectWithBusy."), ValueMap{"DisconnectWithBusy","Forward","Voicemail","SharedVoicemail"},Values{"DisconnectWithBusy","Forward","Voicemail","SharedVoicemail"}] String OverflowAction; + [Write, Description("The OverflowActionTarget parameter represents the target of the overflow action. If the OverFlowAction is set to Forward, this parameter must be set to a Guid or a telephone number with a mandatory 'tel:' prefix. If the OverflowAction is set to SharedVoicemail, this parameter must be set to a group ID (Microsoft 365, Distribution list, or Mail-enabled security). Otherwise, this parameter is optional.")] String OverflowActionTarget; + [Write, Description("The OverflowThreshold parameter defines the number of calls that can be in the queue at any one time before the overflow action is triggered. The OverflowThreshold can be any integer value between 0 and 200, inclusive. A value of 0 causes calls not to reach agents and the overflow action to be taken immediately.")] UInt16 OverflowThreshold; + [Write, Description("The TimeoutAction parameter defines the action to take if the timeout threshold is reached. The TimeoutAction property must be set to one of the following values: Disconnect, Forward, Voicemail, and SharedVoicemail. The default value is Disconnect."), ValueMap{"Disconnect","Forward","Voicemail","SharedVoicemail"}, Values{"Disconnect","Forward","Voicemail","SharedVoicemail"}] String TimeoutAction; + [Write, Description("The TimeoutActionTarget represents the target of the timeout action. If the TimeoutAction is set to Forward, this parameter must be set to a Guid or a telephone number with a mandatory 'tel:' prefix. If the TimeoutAction is set to SharedVoicemail, this parameter must be set to an Office 365 Group ID. Otherwise, this field is optional.")] String TimeoutActionTarget; + [Write, Description("The TimeoutThreshold parameter defines the time (in seconds) that a call can be in the queue before that call times out. At that point, the system will take the action specified by the TimeoutAction parameter. The TimeoutThreshold can be any integer value between 0 and 2700 seconds (inclusive), and is rounded to the nearest 15th interval. For example, if set to 47 seconds, then it is rounded down to 45. If set to 0, welcome music is played, and then the timeout action will be taken.")] UInt16 TimeoutThreshold; + [Write, Description("The RoutingMethod defines how agents will be called in a Call Queue. If the routing method is set to Serial, then agents will be called one at a time. If the routing method is set to Attendant, then agents will be called in parallel. If routing method is set to RoundRobin, the agents will be called using Round Robin strategy so that all agents share the call-load equally. If routing method is set to LongestIdle, the agents will be called based on their idle time, i.e., the agent that has been idle for the longest period will be called."), ValueMap{"Attendant","Serial","RoundRobin","LongestIdle"}, Values{"Attendant","Serial","RoundRobin","LongestIdle"}] String RoutingMethod; + [Write, Description("The PresenceBasedRouting parameter indicates whether or not presence based routing will be applied while call being routed to Call Queue agents. When set to False, calls will be routed to agents who have opted in to receive calls, regardless of their presence state. When set to True, opted-in agents will receive calls only when their presence state is Available.")] Boolean PresenceBasedRouting; + [Write, Description("The ConferenceMode parameter indicates whether or not Conference mode will be applied on calls for this Call queue. Conference mode significantly reduces the amount of time it takes for a caller to be connected to an agent, after the agent accepts the call.")] Boolean ConferenceMode; + [Write, Description("The Users parameter lets you add agents to the Call Queue. This parameter expects a list of user unique identifiers (GUID).")] String Users[]; + [Write, Description("The LanguageId parameter indicates the language that is used to play shared voicemail prompts. This parameter becomes a required parameter If either OverflowAction or TimeoutAction is set to SharedVoicemail. You can query the supported languages using the Get-CsAutoAttendantSupportedLanguage cmdlet.")] String LanguageId; + [Write, Description("The OboResourceAccountIds parameter lets you add resource account with phone number to the Call Queue. The agents in the Call Queue will be able to make outbound calls using the phone number on the resource accounts. This is a list of resource account GUIDs. Only Call Queue managed by a Teams Channel will be able to use this feature.")] String OboResourceAccountIds[]; + [Write, Description("The OverflowDisconnectTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being disconnected due to overflow.")] String OverflowDisconnectTextToSpeechPrompt; + [Write, Description("The OverflowDisconnectAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being disconnected due to overflow.")] String OverflowDisconnectAudioFilePrompt; + [Write, Description("The OverflowRedirectPersonTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person in the organization due to overflow.")] String OverflowRedirectPersonTextToSpeechPrompt; + [Write, Description("The OverflowRedirectPersonAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person in the organization due to overflow.")] String OverflowRedirectPersonAudioFilePrompt; + [Write, Description("The OverflowRedirectVoiceAppsTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a voice application due to overflow.")] String OverflowRedirectVoiceAppTextToSpeechPrompt; + [Write, Description("The OverflowRedirectVoiceAppAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a voice application due to overflow.")] String OverflowRedirectVoiceAppAudioFilePrompt; + [Write, Description("The OverflowRedirectPhoneNumberTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to an external PSTN phone number due to overflow.")] String OverflowRedirectPhoneNumberTextToSpeechPrompt; + [Write, Description("The OverflowRedirectPhoneNumberAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to an external PSTN phone number due to overflow.")] String OverflowRedirectPhoneNumberAudioFilePrompt; + [Write, Description("The OverflowRedirectVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person's voicemail due to overflow.")] String OverflowRedirectVoicemailTextToSpeechPrompt; + [Write, Description("The OverflowRedirectVoiceMailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person's voicemail due to overflow.")] String OverflowRedirectVoicemailAudioFilePrompt; + [Write, Description("The OverflowRedirectVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person's voicemail due to overflow.")] String OverflowSharedVoicemailTextToSpeechPrompt; + [Write, Description("The OverflowSharedVoicemailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is to be played as a greeting to the caller when transferred to shared voicemail on overflow. This parameter becomes a required parameter when OverflowAction is SharedVoicemail and OverflowSharedVoicemailTextToSpeechPrompt is null.")] String OverflowSharedVoicemailAudioFilePrompt; + [Write, Description("The EnableOverflowSharedVoicemailTranscription parameter is used to turn on transcription for voicemails left by a caller on overflow. This parameter is only applicable when OverflowAction is set to SharedVoicemail.")] Boolean EnableOverflowSharedVoicemailTranscription; + [Write, Description("The TimeoutDisconnectTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being disconnected due to timeout.")] String TimeoutDisconnectTextToSpeechPrompt; + [Write, Description("The TimeoutDisconnectAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being disconnected due to timeout.")] String TimeoutDisconnectAudioFilePrompt; + [Write, Description("The TimeoutRedirectPersonTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person in the organization due to timeout.")] String TimeoutRedirectPersonTextToSpeechPrompt; + [Write, Description("The TimeoutRedirectPersonAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person in the organization due to timeout.")] String TimeoutRedirectPersonAudioFilePrompt; + [Write, Description("The TimeoutRedirectVoiceAppsTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a voice application due to timeout.")] String TimeoutRedirectVoiceAppTextToSpeechPrompt; + [Write, Description("The TimeoutRedirectVoiceAppAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a voice application due to timeout.")] String TimeoutRedirectVoiceAppAudioFilePrompt; + [Write, Description("The TimeoutRedirectPhoneNumberTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to an external PSTN phone number due to timeout.")] String TimeoutRedirectPhoneNumberTextToSpeechPrompt; + [Write, Description("The TimeoutRedirectPhoneNumberAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to an external PSTN phone number due to timeout.")] String TimeoutRedirectPhoneNumberAudioFilePrompt; + [Write, Description("The TimeoutRedirectVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person's voicemail due to timeout.")] String TimeoutRedirectVoicemailTextToSpeechPrompt; + [Write, Description("The TimeoutRedirectVoiceMailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person's voicemail due to timeout.")] String TimeoutRedirectVoicemailAudioFilePrompt; + [Write, Description("The TimeoutSharedVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is to be played as a greeting to the caller when transferred to shared voicemail on timeout. This parameter becomes a required parameter when TimeoutAction is SharedVoicemail and TimeoutSharedVoicemailAudioFilePrompt is null.")] String TimeoutSharedVoicemailTextToSpeechPrompt; + [Write, Description("The TimeoutSharedVoicemailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is to be played as a greeting to the caller when transferred to shared voicemail on timeout. This parameter becomes a required parameter when TimeoutAction is SharedVoicemail and TimeoutSharedVoicemailTextToSpeechPrompt is null.")] String TimeoutSharedVoicemailAudioFilePrompt; + [Write, Description("The EnableTimeoutSharedVoicemailTranscription parameter is used to turn on transcription for voicemails left by a caller on timeout. This parameter is only applicable when TimeoutAction is set to SharedVoicemail.")] Boolean EnableTimeoutSharedVoicemailTranscription; + [Write, Description("Id of the channel to connect a call queue to.")] String ChannelId; + [Write, Description("Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). This is the GUID of one of the owners of the team the channels belongs to.")] String ChannelUserObjectId; + [Write, Description("This is a list of GUIDs for users who are authorized to make changes to this call queue. The users must also have a TeamsVoiceApplications policy assigned. The GUID should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).")] String AuthorizedUsers[]; + [Write, Description("Present ensures the Team Message Policy exists, absent ensures it is removed"), ValueMap{"Present","Absent"}, Values{"Present","Absent"}] String Ensure; + [Write, Description("Credentials of the Teams Service Admin"), EmbeddedInstance("MSFT_Credential")] string Credential; + [Write, Description("Id of the Azure Active Directory application to authenticate with.")] String ApplicationId; + [Write, Description("Name of the Azure Active Directory tenant used for authentication. Format contoso.onmicrosoft.com")] String TenantId; + [Write, Description("Thumbprint of the Azure Active Directory application's authentication certificate to use for authentication.")] String CertificateThumbprint; +}; + diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md new file mode 100644 index 0000000000..d5a4e10892 --- /dev/null +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md @@ -0,0 +1,7 @@ +# TeamsMessagingPolicy + +## Description + +This resource is used to configure the Teams messaging policy. + +More information: https://docs.microsoft.com/en-us/microsoftteams/messaging-policies-in-teams diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json new file mode 100644 index 0000000000..2d3321017c --- /dev/null +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json @@ -0,0 +1,66 @@ +{ + "resourceName": "TeamsMessagingPolicy", + "description": "", + "permissions": { + "graph": { + "delegated": { + "read": [], + "update": [] + }, + "application": { + "read": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ], + "update": [ + { + "name": "Organization.Read.All" + }, + { + "name": "User.Read.All" + }, + { + "name": "Group.ReadWrite.All" + }, + { + "name": "AppCatalog.ReadWrite.All" + }, + { + "name": "TeamSettings.ReadWrite.All" + }, + { + "name": "Channel.Delete.All" + }, + { + "name": "ChannelSettings.ReadWrite.All" + }, + { + "name": "ChannelMember.ReadWrite.All" + } + ] + } + } + } +} diff --git a/Modules/Microsoft365DSC/Examples/Resources/TeamsCallQueue/1-CreateTeamsCallQueue-Example.ps1 b/Modules/Microsoft365DSC/Examples/Resources/TeamsCallQueue/1-CreateTeamsCallQueue-Example.ps1 new file mode 100644 index 0000000000..75f79c5d72 --- /dev/null +++ b/Modules/Microsoft365DSC/Examples/Resources/TeamsCallQueue/1-CreateTeamsCallQueue-Example.ps1 @@ -0,0 +1,42 @@ +<# +This example is used to test new resources and showcase the usage of new resources being worked on. +It is not meant to use as a production baseline. +#> + +Configuration Example +{ + param( + [Parameter(Mandatory = $true)] + [PSCredential] + $Credscredential + ) + Import-DscResource -ModuleName Microsoft365DSC + + node localhost + { + TeamsCallQueue "TestQueue" + { + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + Credential = $Credscredential; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + Ensure = "Present"; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + } + } +} diff --git a/Tests/Unit/Microsoft365DSC/Microsoft365DSC.TeamsCallQueue.Tests.ps1 b/Tests/Unit/Microsoft365DSC/Microsoft365DSC.TeamsCallQueue.Tests.ps1 new file mode 100644 index 0000000000..c2b40151eb --- /dev/null +++ b/Tests/Unit/Microsoft365DSC/Microsoft365DSC.TeamsCallQueue.Tests.ps1 @@ -0,0 +1,343 @@ +[CmdletBinding()] +param( +) +$M365DSCTestFolder = Join-Path -Path $PSScriptRoot ` + -ChildPath '..\..\Unit' ` + -Resolve +$CmdletModule = (Join-Path -Path $M365DSCTestFolder ` + -ChildPath '\Stubs\Microsoft365.psm1' ` + -Resolve) +$GenericStubPath = (Join-Path -Path $M365DSCTestFolder ` + -ChildPath '\Stubs\Generic.psm1' ` + -Resolve) +Import-Module -Name (Join-Path -Path $M365DSCTestFolder ` + -ChildPath '\UnitTestHelper.psm1' ` + -Resolve) + +$Global:DscHelper = New-M365DscUnitTestHelper -StubModule $CmdletModule ` + -DscResource 'TeamsCallQueue' -GenericStubModule $GenericStubPath +Describe -Name $Global:DscHelper.DescribeHeader -Fixture { + InModuleScope -ModuleName $Global:DscHelper.ModuleName -ScriptBlock { + Invoke-Command -ScriptBlock $Global:DscHelper.InitializeScript -NoNewScope + BeforeAll { + + $secpasswd = ConvertTo-SecureString 'f@kepassword1' -AsPlainText -Force + $Credential = New-Object System.Management.Automation.PSCredential ('tenantadmin@mydomain.com', $secpasswd) + + Mock -CommandName Confirm-M365DSCDependencies -MockWith { + } + + Mock -CommandName Get-PSSession -MockWith { + } + + Mock -CommandName Remove-PSSession -MockWith { + } + + Mock -CommandName Set-CsCallQueue -MockWith { + } + + Mock -CommandName New-CsCallQueue -MockWith { + } + + Mock -CommandName Remove-CsCallQueue -MockWith { + } + + Mock -CommandName New-M365DSCConnection -MockWith { + return 'Credentials' + } + + # Mock Write-Host to hide output during the tests + Mock -CommandName Write-Host -MockWith { + } + } + + # Test contexts + Context -Name 'The TeamsCallQueue should exist but it DOES NOT' -Fixture { + BeforeAll { + $testParams = @{ + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + + Mock -CommandName Get-CsCallQueue -MockWith { + return $null + } + } + + It 'Should return Values from the Get method' { + (Get-TargetResource @testParams).Ensure | Should -Be 'Absent' + } + + It 'Should return false from the Test method' { + Test-TargetResource @testParams | Should -Be $false + } + + It 'Should Create the group from the Set method' { + Set-TargetResource @testParams + Should -Invoke -CommandName New-CsCallQueue -Exactly 1 + } + } + + Context -Name 'The TeamsCallQueue exists but it should not' -Fixture { + BeforeAll { + $testParams = @{ + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Absent' + Credential = $Credential + } + + Mock -CommandName Get-CsCallQueue -MockWith { + return @{ + Id = "12345-12345-12345-12345-12345" + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = @{Id="9abce74d-d108-475f-a2cb-bbb82f484982"} + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = @{Id = "9abce74d-d108-475f-a2cb-bbb82f484982"} + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + } + } + + It 'Should return Values from the Get method' { + (Get-TargetResource @testParams).Ensure | Should -Be 'Present' + } + + It 'Should return true from the Test method' { + Test-TargetResource @testParams | Should -Be $false + } + + It 'Should Remove the queue from the Set method' { + Set-TargetResource @testParams + Should -Invoke -CommandName Remove-CsCallQueue -Exactly 1 + } + } + + Context -Name 'The TeamsCallQueue is already in the Desired State' -Fixture { + BeforeAll { + $testParams = @{ + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + + Mock -CommandName Get-CsCallQueue -MockWith { + return @{ + Id = "12345-12345-12345-12345-12345" + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = @{Id="9abce74d-d108-475f-a2cb-bbb82f484982"} + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = @{Id = "9abce74d-d108-475f-a2cb-bbb82f484982"} + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + } + } + + It 'Should return Values from the Get method' { + (Get-TargetResource @testParams).Ensure | Should -Be 'Present' + } + + It 'Should return true from the Test method' { + Test-TargetResource @testParams | Should -Be $true + } + } + + Context -Name 'The TeamsCallQueue is NOT in the Desired State' -Fixture { + BeforeAll { + $testParams = @{ + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + + Mock -CommandName Get-CsCallQueue -MockWith { + return @{ + Id = "12345-12345-12345-12345-12345" + AgentAlertTime = 120; #Drift + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = @{Id="9abce74d-d108-475f-a2cb-bbb82f484982"} + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = @{Id = "9abce74d-d108-475f-a2cb-bbb82f484982"} + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + } + } + + It 'Should return Values from the Get method' { + (Get-TargetResource @testParams).Ensure | Should -Be 'Present' + } + + It 'Should return true from the Test method' { + Test-TargetResource @testParams | Should -Be $false + } + + It 'Should Update the queue from the Set method' { + Set-TargetResource @testParams + Should -Invoke -CommandName Set-CsCallQueue -Exactly 1 + } + } + + Context -Name 'ReverseDSC Tests' -Fixture { + BeforeAll { + $Global:CurrentModeIsExport = $true + $Global:PartialExportFileName = "$(New-Guid).partial.ps1" + $testParams = @{ + Credential = $Credential + } + + Mock -CommandName Get-CsCallQueue -MockWith { + return @{ + Id = "12345-12345-12345-12345-12345" + AgentAlertTime = 120; #Drift + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = @{Id="9abce74d-d108-475f-a2cb-bbb82f484982"} + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = @{Id = "9abce74d-d108-475f-a2cb-bbb82f484982"} + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + Ensure = 'Present' + Credential = $Credential + } + } + } + + It 'Should Reverse Engineer resource from the Export method' { + $result = Export-TargetResource @testParams + $result | Should -Not -BeNullOrEmpty + } + } + } +} + +Invoke-Command -ScriptBlock $Global:DscHelper.CleanupScript -NoNewScope From 39711e476ddc68a339975a85af9d14f29e17e574 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 11:29:57 -0400 Subject: [PATCH 33/40] Ready --- .../DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md | 4 ++-- .../MSFT_TeamsGroupPolicyAssignment/settings.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md index e928b85d50..fbad86016a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md @@ -1,5 +1,5 @@ -# TeamsGroupPolicyAssignment +# TeamsCallQueue ## Description -This resource is used to assign Teams policy to a specified group +This resource is used to manage Call Queue in your Skype for Business Online organization. diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json index 45b3ea5389..3b95742eae 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json @@ -1,6 +1,6 @@ { - "resourceName": "TeamsGroupPolicyAssignment", - "description": "", + "resourceName": "TeamsCallQueue", + "description": "This resource is used to manage Call Queue in your Skype for Business Online organization.", "permissions": { "graph": { "delegated": { From 5c33ea12e9bc4f2f2b89b09e4c17333f5fe9684a Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 11:39:06 -0400 Subject: [PATCH 34/40] Fixes --- .../DSCResources/MSFT_TeamsCallQueue/settings.json | 4 ++-- .../MSFT_TeamsGroupPolicyAssignment/settings.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json index 2d3321017c..3b95742eae 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/settings.json @@ -1,6 +1,6 @@ { - "resourceName": "TeamsMessagingPolicy", - "description": "", + "resourceName": "TeamsCallQueue", + "description": "This resource is used to manage Call Queue in your Skype for Business Online organization.", "permissions": { "graph": { "delegated": { diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json index 3b95742eae..45b3ea5389 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/settings.json @@ -1,6 +1,6 @@ { - "resourceName": "TeamsCallQueue", - "description": "This resource is used to manage Call Queue in your Skype for Business Online organization.", + "resourceName": "TeamsGroupPolicyAssignment", + "description": "", "permissions": { "graph": { "delegated": { From 3d31fd7cff99b0b170b2b930d361f5b875738634 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 11:39:56 -0400 Subject: [PATCH 35/40] Fixes --- .../DSCResources/MSFT_TeamsCallQueue/readme.md | 6 ++---- .../DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md index d5a4e10892..fbad86016a 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsCallQueue/readme.md @@ -1,7 +1,5 @@ -# TeamsMessagingPolicy +# TeamsCallQueue ## Description -This resource is used to configure the Teams messaging policy. - -More information: https://docs.microsoft.com/en-us/microsoftteams/messaging-policies-in-teams +This resource is used to manage Call Queue in your Skype for Business Online organization. diff --git a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md index fbad86016a..e928b85d50 100644 --- a/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md +++ b/Modules/Microsoft365DSC/DSCResources/MSFT_TeamsGroupPolicyAssignment/readme.md @@ -1,5 +1,5 @@ -# TeamsCallQueue +# TeamsGroupPolicyAssignment ## Description -This resource is used to manage Call Queue in your Skype for Business Online organization. +This resource is used to assign Teams policy to a specified group From fe0842eec9f6e7f7ffc751cc0b1f612238a2073c Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 12:22:09 -0400 Subject: [PATCH 36/40] Updates Stubs --- Tests/Unit/Stubs/Microsoft365.psm1 | 2208 +++++++++++++++++++--------- 1 file changed, 1483 insertions(+), 725 deletions(-) diff --git a/Tests/Unit/Stubs/Microsoft365.psm1 b/Tests/Unit/Stubs/Microsoft365.psm1 index 00432d11b0..05d7244c4d 100644 --- a/Tests/Unit/Stubs/Microsoft365.psm1 +++ b/Tests/Unit/Stubs/Microsoft365.psm1 @@ -47203,7 +47203,7 @@ function New-CsTeamsAppPermissionPolicy [Parameter()] [System.String] - $PrivateCatalogAppsType, + $Identity, [Parameter()] [System.String] @@ -47213,17 +47213,17 @@ function New-CsTeamsAppPermissionPolicy [PSObject] $PrivateCatalogApps, - [Parameter()] - [System.String] - $Identity, - [Parameter()] [PSObject] $GlobalCatalogApps, [Parameter()] [PSObject] - $DefaultCatalogApps + $DefaultCatalogApps, + + [Parameter()] + [System.String] + $PrivateCatalogAppsType ) } function New-CsTeamsAppSetupPolicy @@ -47238,6 +47238,10 @@ function New-CsTeamsAppSetupPolicy [PSObject] $AppPresetList, + [Parameter()] + [PSObject] + $PinnedAppBarApps, + [Parameter()] [System.Boolean] $AllowUserPinning, @@ -47264,11 +47268,7 @@ function New-CsTeamsAppSetupPolicy [Parameter()] [System.Management.Automation.SwitchParameter] - $Force, - - [Parameter()] - [PSObject] - $PinnedAppBarApps + $Force ) } function New-CsTeamsCallHoldPolicy @@ -47312,6 +47312,10 @@ function New-CsTeamsCallingPolicy [System.Boolean] $AllowWebPSTNCalling, + [Parameter()] + [System.String] + $AutoAnswerEnabledType, + [Parameter()] [System.String] $Description, @@ -47324,6 +47328,10 @@ function New-CsTeamsCallingPolicy [System.Boolean] $PreventTollBypass, + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + [Parameter()] [System.Management.Automation.SwitchParameter] $Force, @@ -47353,12 +47361,12 @@ function New-CsTeamsCallingPolicy $PopoutAppPathForIncomingPstnCalls, [Parameter()] - [System.String] - $BusyOnBusyEnabledType, + [System.Boolean] + $EnableWebPstnMediaBypass, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $BusyOnBusyEnabledType, [Parameter()] [System.String] @@ -47388,10 +47396,6 @@ function New-CsTeamsCallingPolicy [System.String] $LiveCaptionsEnabledTypeForCalling, - [Parameter()] - [System.Boolean] - $AllowDelegation, - [Parameter()] [System.Nullable`1[System.Int64]] $CallRecordingExpirationDays, @@ -47405,8 +47409,8 @@ function New-CsTeamsCallingPolicy $InboundFederatedCallRoutingTreatment, [Parameter()] - [System.String] - $AutoAnswerEnabledType, + [System.Boolean] + $AllowDelegation, [Parameter()] [System.Boolean] @@ -47511,13 +47515,9 @@ function New-CsTeamsEventsPolicy [System.String] $Description, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.String] - $AllowEmailEditing, + $AllowedQuestionTypesInRegistrationForm, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -47531,13 +47531,25 @@ function New-CsTeamsEventsPolicy [System.String] $EventAccessType, + [Parameter()] + [System.Boolean] + $AllowEventIntegrations, + + [Parameter()] + [System.String] + $AllowEmailEditing, + [Parameter()] [System.String] $AllowWebinars, [Parameter()] [System.String] - $AllowTownhalls + $AllowTownhalls, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function New-CsTeamsFeedbackPolicy @@ -47593,6 +47605,10 @@ function New-CsTeamsMeetingPolicy [System.Boolean] $AllowMeetingCoach, + [Parameter()] + [System.String] + $AttendeeIdentityMasking, + [Parameter()] [System.Boolean] $AllowAnnotations, @@ -47633,10 +47649,6 @@ function New-CsTeamsMeetingPolicy [System.Boolean] $AllowWatermarkCustomizationForCameraVideo, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.String] $WatermarkForScreenSharingPattern, @@ -47833,6 +47845,10 @@ function New-CsTeamsMeetingPolicy [System.Boolean] $AllowSharedNotes, + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force, + [Parameter()] [System.Boolean] $AllowParticipantGiveRequestControl, @@ -48238,204 +48254,204 @@ function Remove-CsOnlineVoicemailPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsAppPermissionPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsAppSetupPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsCallHoldPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsCallingPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsChannelsPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsEmergencyCallingPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsEventsPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsFeedbackPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsMeetingPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsMessagingPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-CsTeamsUpdateManagementPolicy { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Remove-Team @@ -48564,7 +48580,7 @@ function Set-CsTeamsAppPermissionPolicy [Parameter()] [System.String] - $PrivateCatalogAppsType, + $Identity, [Parameter()] [System.String] @@ -48574,17 +48590,17 @@ function Set-CsTeamsAppPermissionPolicy [PSObject] $PrivateCatalogApps, - [Parameter()] - [System.String] - $Identity, - [Parameter()] [PSObject] $GlobalCatalogApps, [Parameter()] [PSObject] - $DefaultCatalogApps + $DefaultCatalogApps, + + [Parameter()] + [System.String] + $PrivateCatalogAppsType ) } function Set-CsTeamsAppSetupPolicy @@ -48599,6 +48615,10 @@ function Set-CsTeamsAppSetupPolicy [PSObject] $AppPresetList, + [Parameter()] + [PSObject] + $PinnedAppBarApps, + [Parameter()] [System.Boolean] $AllowUserPinning, @@ -48625,11 +48645,7 @@ function Set-CsTeamsAppSetupPolicy [Parameter()] [System.Management.Automation.SwitchParameter] - $Force, - - [Parameter()] - [PSObject] - $PinnedAppBarApps + $Force ) } function Set-CsTeamsCallHoldPolicy @@ -48673,6 +48689,10 @@ function Set-CsTeamsCallingPolicy [System.Boolean] $AllowWebPSTNCalling, + [Parameter()] + [System.String] + $AutoAnswerEnabledType, + [Parameter()] [System.String] $Description, @@ -48685,6 +48705,10 @@ function Set-CsTeamsCallingPolicy [System.Boolean] $PreventTollBypass, + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + [Parameter()] [System.Management.Automation.SwitchParameter] $Force, @@ -48714,12 +48738,12 @@ function Set-CsTeamsCallingPolicy $PopoutAppPathForIncomingPstnCalls, [Parameter()] - [System.String] - $BusyOnBusyEnabledType, + [System.Boolean] + $EnableWebPstnMediaBypass, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $BusyOnBusyEnabledType, [Parameter()] [System.String] @@ -48749,10 +48773,6 @@ function Set-CsTeamsCallingPolicy [System.String] $LiveCaptionsEnabledTypeForCalling, - [Parameter()] - [System.Boolean] - $AllowDelegation, - [Parameter()] [System.Nullable`1[System.Int64]] $CallRecordingExpirationDays, @@ -48766,8 +48786,8 @@ function Set-CsTeamsCallingPolicy $InboundFederatedCallRoutingTreatment, [Parameter()] - [System.String] - $AutoAnswerEnabledType, + [System.Boolean] + $AllowDelegation, [Parameter()] [System.Boolean] @@ -48872,13 +48892,9 @@ function Set-CsTeamsEventsPolicy [System.String] $Description, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.String] - $AllowEmailEditing, + $AllowedQuestionTypesInRegistrationForm, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -48892,13 +48908,25 @@ function Set-CsTeamsEventsPolicy [System.String] $EventAccessType, + [Parameter()] + [System.Boolean] + $AllowEventIntegrations, + + [Parameter()] + [System.String] + $AllowEmailEditing, + [Parameter()] [System.String] $AllowWebinars, [Parameter()] [System.String] - $AllowTownhalls + $AllowTownhalls, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Set-CsTeamsFeedbackPolicy @@ -48954,6 +48982,10 @@ function Set-CsTeamsMeetingPolicy [System.Boolean] $AllowMeetingCoach, + [Parameter()] + [System.String] + $AttendeeIdentityMasking, + [Parameter()] [System.Boolean] $AllowAnnotations, @@ -48994,10 +49026,6 @@ function Set-CsTeamsMeetingPolicy [System.Boolean] $AllowWatermarkCustomizationForCameraVideo, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.String] $WatermarkForScreenSharingPattern, @@ -49194,6 +49222,10 @@ function Set-CsTeamsMeetingPolicy [System.Boolean] $AllowSharedNotes, + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force, + [Parameter()] [System.Boolean] $AllowParticipantGiveRequestControl, @@ -49608,7 +49640,110 @@ function Find-CsGroup $Force ) } -function Get-CsGroupPolicyAssignment +function Get-CsAutoAttendant +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $NameFilter, + + [Parameter()] + [PSObject] + $HttpPipelinePrepend, + + [Parameter()] + [System.Int32] + $First, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $ExcludeContent, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Descending, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $IncludeStatus, + + [Parameter()] + [System.Int32] + $Skip, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $SortBy, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force + ) +} +function Get-CsAutoAttendantSupportedLanguage +{ + [CmdletBinding()] + param( + [Parameter()] + [PSObject] + $HttpPipelinePrepend, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force + ) +} +function Get-CsCallQueue +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $NameFilter, + + [Parameter()] + [PSObject] + $HttpPipelinePrepend, + + [Parameter()] + [System.Int32] + $First, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $ExcludeContent, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Descending, + + [Parameter()] + [System.String] + $Sort, + + [Parameter()] + [System.Int32] + $Skip, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force + ) +} +function Get-CsGroupPolicyAssignment { [CmdletBinding()] param( @@ -49649,10 +49784,6 @@ function Get-CsOnlineApplicationInstance { [CmdletBinding()] param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Force, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, @@ -49675,7 +49806,11 @@ function Get-CsOnlineApplicationInstance [Parameter()] [System.String[]] - $Identities + $Identities, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force ) } function Get-CsOnlineDialInConferencingTenantSettings @@ -50646,241 +50781,538 @@ function Import-CsOnlineAudioFile $Force ) } -function New-CsEdgeAllowAllKnownDomains +function New-CsCallQueue { [CmdletBinding()] param( [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function New-CsGroupPolicyAssignment -{ - [CmdletBinding()] - param( + $OverflowRedirectVoicemailAudioFilePrompt, + [Parameter()] - [PSObject] - $HttpPipelinePrepend, + [System.Guid[]] + $Users, [Parameter()] - [System.Management.Automation.PSCredential] - $ProxyCredential, + [System.Int16] + $TimeoutThreshold, [Parameter()] - [System.Uri] - $Proxy, + [System.String] + $TimeoutRedirectPersonTextToSpeechPrompt, [Parameter()] - [System.Management.Automation.SwitchParameter] - $PassThru, + [System.Boolean] + $EnableOverflowSharedVoicemailTranscription, [Parameter()] [System.String] - $PolicyName, + $NoAgentRedirectVoicemailTextToSpeechPrompt, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $MusicOnHoldAudioFileId, [Parameter()] - [PSObject] - $HttpPipelineAppend, + [System.String] + $WelcomeMusicAudioFileId, [Parameter()] - [System.Management.Automation.SwitchParameter] - $ProxyUseDefaultCredentials, + [System.Boolean] + $ConferenceMode, [Parameter()] [System.String] - $GroupId, + $OverflowSharedVoicemailAudioFilePrompt, [Parameter()] - [System.Int32] - $Rank, + [System.Int16] + $AgentAlertTime, [Parameter()] [System.String] - $PolicyType, + $TimeoutRedirectPersonAudioFilePrompt, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Break - ) -} -function New-CsOnlineVoiceRoute -{ - [CmdletBinding()] - param( [Parameter()] [System.String] - $BridgeSourcePhoneNumber, + $TimeoutSharedVoicemailTextToSpeechPrompt, [Parameter()] - [System.String] - $Description, + [System.Boolean] + $EnableNoAgentSharedVoicemailSystemPromptSuppression, [Parameter()] - [System.Int32] - $Priority, + [System.String] + $OverflowRedirectVoicemailTextToSpeechPrompt, [Parameter()] [System.String] - $Name, + $TimeoutRedirectVoicemailTextToSpeechPrompt, [Parameter()] - [System.Object] - $OnlinePstnGatewayList, + [PSObject] + $TimeoutAction, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Guid[]] + $OboResourceAccountIds, [Parameter()] [System.String] - $Identity, + $NoAgentSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.Boolean] + $EnableOverflowSharedVoicemailSystemPromptSuppression, [Parameter()] [System.String] - $NumberPattern, + $LineUri, [Parameter()] - [System.Object] - $OnlinePstnUsages, + [System.Boolean] + $UseDefaultMusicOnHold, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function New-CsOnlineVoiceRoutingPolicy -{ - [CmdletBinding()] - param( + $OverflowActionTarget, + [Parameter()] [System.String] - $RouteType, + $ChannelId, [Parameter()] - [System.Object] - $OnlinePstnUsages, + [System.String] + $OverflowSharedVoicemailTextToSpeechPrompt, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Boolean] + $AllowOptOut, [Parameter()] [System.String] - $Identity, + $TimeoutRedirectPhoneNumberAudioFilePrompt, [Parameter()] [System.String] - $Description, + $OverflowRedirectPhoneNumberTextToSpeechPrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function New-CsTeamsAudioConferencingPolicy -{ - [CmdletBinding()] - param( + $OverflowRedirectVoiceAppTextToSpeechPrompt, + [Parameter()] - [System.Object] - $MeetingInvitePhoneNumbers, + [System.Boolean] + $PresenceBasedRouting, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Boolean] + $EnableNoAgentSharedVoicemailTranscription, [Parameter()] [System.String] - $Identity, + $TimeoutActionTarget, [Parameter()] [System.Boolean] - $AllowTollFreeDialin, + $ShouldOverwriteCallableChannelProperty, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function New-CsTeamsCallParkPolicy -{ - [CmdletBinding()] - param( + $NoAgentRedirectVoiceAppTextToSpeechPrompt, + [Parameter()] [System.String] - $Description, + $TimeoutSharedVoicemailAudioFilePrompt, [Parameter()] - [System.Int64] - $ParkTimeoutSeconds, + [System.String] + $NoAgentRedirectPersonTextToSpeechPrompt, [Parameter()] - [System.Boolean] - $AllowCallPark, + [System.String] + $TimeoutRedirectVoiceAppTextToSpeechPrompt, [Parameter()] - [System.Int64] - $PickupRangeEnd, + [System.String] + $OverflowRedirectPhoneNumberAudioFilePrompt, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $TimeoutDisconnectAudioFilePrompt, [Parameter()] [System.String] - $Identity, + $OverflowRedirectVoiceAppAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode, + $NoAgentRedirectVoicemailAudioFilePrompt, [Parameter()] - [System.Int64] - $PickupRangeStart - ) -} -function New-CsTeamsComplianceRecordingPolicy -{ - [CmdletBinding()] - param( + [System.String] + $OverflowDisconnectTextToSpeechPrompt, + [Parameter()] [System.String] - $Description, + $TimeoutRedirectPhoneNumberTextToSpeechPrompt, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Guid[]] + $HideAuthorizedUsers, [Parameter()] - [System.Boolean] - $DisableComplianceRecordingAudioNotificationForCalls, + [PSObject] + $HttpPipelinePrepend, [Parameter()] - [System.Boolean] - $Enabled, + [System.String] + $NoAgentRedirectPhoneNumberAudioFilePrompt, [Parameter()] - [System.Object] - $ComplianceRecordingApplications, + [System.String] + $OverflowDisconnectAudioFilePrompt, [Parameter()] - [System.Boolean] - $WarnUserOnRemoval, + [System.String] + $NoAgentActionTarget, + + [Parameter()] + [System.Guid[]] + $DistributionLists, [Parameter()] [System.String] - $Identity, + $TimeoutRedirectVoiceAppAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} + $LanguageId, + + [Parameter()] + [System.String] + $OverflowRedirectPersonAudioFilePrompt, + + [Parameter()] + [System.String] + $TimeoutDisconnectTextToSpeechPrompt, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Force, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $NoAgentRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $NoAgentDisconnectTextToSpeechPrompt, + + [Parameter()] + [PSObject] + $NoAgentAction, + + [Parameter()] + [System.String] + $NoAgentDisconnectAudioFilePrompt, + + [Parameter()] + [System.Guid[]] + $AuthorizedUsers, + + [Parameter()] + [PSObject] + $RoutingMethod, + + [Parameter()] + [System.Guid] + $ChannelUserObjectId, + + [Parameter()] + [System.Boolean] + $EnableTimeoutSharedVoicemailSystemPromptSuppression, + + [Parameter()] + [System.String] + $Name, + + [Parameter()] + [System.Boolean] + $EnableTimeoutSharedVoicemailTranscription, + + [Parameter()] + [System.Int16] + $OverflowThreshold, + + [Parameter()] + [PSObject] + $OverflowAction, + + [Parameter()] + [System.String] + $WelcomeTextToSpeechPrompt, + + [Parameter()] + [System.String] + $NoAgentSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.String] + $NoAgentRedirectPersonAudioFilePrompt, + + [Parameter()] + [PSObject] + $NoAgentApplyTo, + + [Parameter()] + [System.String] + $NoAgentRedirectVoiceAppAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPersonTextToSpeechPrompt + ) +} +function New-CsEdgeAllowAllKnownDomains +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsGroupPolicyAssignment +{ + [CmdletBinding()] + param( + [Parameter()] + [PSObject] + $HttpPipelinePrepend, + + [Parameter()] + [System.Management.Automation.PSCredential] + $ProxyCredential, + + [Parameter()] + [System.Uri] + $Proxy, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $PassThru, + + [Parameter()] + [System.String] + $PolicyName, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [PSObject] + $HttpPipelineAppend, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $ProxyUseDefaultCredentials, + + [Parameter()] + [System.String] + $GroupId, + + [Parameter()] + [System.Int32] + $Rank, + + [Parameter()] + [System.String] + $PolicyType, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Break + ) +} +function New-CsOnlineVoiceRoute +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $BridgeSourcePhoneNumber, + + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.Int32] + $Priority, + + [Parameter()] + [System.String] + $Name, + + [Parameter()] + [System.Object] + $OnlinePstnGatewayList, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $NumberPattern, + + [Parameter()] + [System.Object] + $OnlinePstnUsages, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsOnlineVoiceRoutingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $RouteType, + + [Parameter()] + [System.Object] + $OnlinePstnUsages, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsTeamsAudioConferencingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.Object] + $MeetingInvitePhoneNumbers, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.Boolean] + $AllowTollFreeDialin, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsTeamsCallParkPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.Int64] + $ParkTimeoutSeconds, + + [Parameter()] + [System.Boolean] + $AllowCallPark, + + [Parameter()] + [System.Int64] + $PickupRangeEnd, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.Int64] + $PickupRangeStart + ) +} +function New-CsTeamsComplianceRecordingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.Boolean] + $DisableComplianceRecordingAudioNotificationForCalls, + + [Parameter()] + [System.Object] + $ComplianceRecordingApplications, + + [Parameter()] + [System.Boolean] + $WarnUserOnRemoval, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.Boolean] + $Enabled + ) +} function New-CsTeamsCortanaPolicy { [CmdletBinding()] @@ -50891,19 +51323,238 @@ function New-CsTeamsCortanaPolicy [Parameter()] [System.Boolean] - $AllowCortanaInContextSuggestions, + $AllowCortanaInContextSuggestions, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $CortanaVoiceInvocationMode, + + [Parameter()] + [System.Boolean] + $AllowCortanaVoiceInvocation, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.Boolean] + $AllowCortanaAmbientListening + ) +} +function New-CsTeamsEmergencyCallRoutingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.Object] + $EmergencyNumbers, + + [Parameter()] + [System.Boolean] + $AllowEnhancedEmergencyServices, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsTeamsEmergencyNumber +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $EmergencyDialString, + + [Parameter()] + [System.String] + $OnlinePSTNUsage, + + [Parameter()] + [System.String] + $EmergencyDialMask, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsTeamsEnhancedEncryptionPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.String] + $CallingEndtoEndEncryptionEnabledType, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $MeetingEndToEndEncryption, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsTeamsFilesPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $SPChannelFilesTab, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $NativeFileEntryPoints, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function New-CsTeamsIPPhonePolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.Boolean] + $AllowHotDesking, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + + [Parameter()] + [System.String] + $SearchOnCommonAreaPhoneMode, + + [Parameter()] + [System.Int64] + $HotDeskingIdleTimeoutInMinutes, + + [Parameter()] + [System.String] + $SignInMode, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.String] + $AllowBetterTogether, + + [Parameter()] + [System.String] + $AllowHomeScreen, + + [Parameter()] + [System.String] + $Identity + ) +} +function New-CsTeamsMeetingBroadcastPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.String] + $BroadcastAttendeeVisibilityMode, + + [Parameter()] + [System.Boolean] + $AllowBroadcastTranscription, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $Identity, [Parameter()] [System.String] - $CortanaVoiceInvocationMode, + $BroadcastRecordingMode, [Parameter()] [System.Boolean] - $AllowCortanaVoiceInvocation, + $AllowBroadcastScheduling, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm + ) +} +function New-CsTeamsMobilityPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $IPVideoMobileMode, + + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.String] + $IPAudioMobileMode, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] @@ -50914,11 +51565,11 @@ function New-CsTeamsCortanaPolicy $MsftInternalProcessingMode, [Parameter()] - [System.Boolean] - $AllowCortanaAmbientListening + [System.String] + $MobileDialerPreference ) } -function New-CsTeamsEmergencyCallRoutingPolicy +function New-CsTeamsNetworkRoamingPolicy { [CmdletBinding()] param( @@ -50931,44 +51582,68 @@ function New-CsTeamsEmergencyCallRoutingPolicy $Confirm, [Parameter()] - [System.Object] - $EmergencyNumbers, + [System.String] + $Identity, [Parameter()] - [System.Boolean] - $AllowEnhancedEmergencyServices, + [System.Int64] + $MediaBitRateKb, [Parameter()] [System.String] - $Identity, + $MsftInternalProcessingMode, [Parameter()] - [System.String] - $MsftInternalProcessingMode + [System.Boolean] + $AllowIPVideo ) } -function New-CsTeamsEmergencyNumber +function New-CsTeamsShiftsPolicy { [CmdletBinding()] param( [Parameter()] [System.String] - $EmergencyDialString, + $ShiftNoticeMessageType, [Parameter()] [System.String] - $OnlinePSTNUsage, + $ShiftNoticeFrequency, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $EmergencyDialMask, + $Identity, [Parameter()] [System.String] - $MsftInternalProcessingMode + $ShiftNoticeMessageCustom, + + [Parameter()] + [System.Boolean] + $EnableScheduleOwnerPermissions, + + [Parameter()] + [System.String] + $AccessType, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.Boolean] + $EnableShiftPresence, + + [Parameter()] + [System.Int64] + $AccessGracePeriodMinutes ) } -function New-CsTeamsEnhancedEncryptionPolicy +function New-CsTeamsTranslationRule { [CmdletBinding()] param( @@ -50978,7 +51653,11 @@ function New-CsTeamsEnhancedEncryptionPolicy [Parameter()] [System.String] - $CallingEndtoEndEncryptionEnabledType, + $Name, + + [Parameter()] + [System.String] + $Pattern, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -50986,24 +51665,32 @@ function New-CsTeamsEnhancedEncryptionPolicy [Parameter()] [System.String] - $MeetingEndToEndEncryption, + $Identity, [Parameter()] [System.String] - $Identity, + $Translation, [Parameter()] [System.String] $MsftInternalProcessingMode ) } -function New-CsTeamsFilesPolicy +function New-CsTeamsUnassignedNumberTreatment { [CmdletBinding()] param( + [Parameter()] + [System.Int32] + $TreatmentPriority, + [Parameter()] [System.String] - $SPChannelFilesTab, + $Pattern, + + [Parameter()] + [System.String] + $Description, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -51011,24 +51698,40 @@ function New-CsTeamsFilesPolicy [Parameter()] [System.String] - $NativeFileEntryPoints, + $Identity, [Parameter()] [System.String] - $Identity, + $TargetType, [Parameter()] [System.String] - $MsftInternalProcessingMode + $Target, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + + [Parameter()] + [System.String] + $TreatmentId ) } -function New-CsTeamsIPPhonePolicy +function New-CsTeamsVdiPolicy { [CmdletBinding()] param( + [Parameter()] + [System.Boolean] + $DisableCallsAndMeetings, + [Parameter()] [System.String] - $Description, + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -51036,52 +51739,73 @@ function New-CsTeamsIPPhonePolicy [Parameter()] [System.Boolean] - $AllowHotDesking, - + $DisableAudioVideoInCallsAndMeetings + ) +} +function New-CsTeamsWorkLoadPolicy +{ + [CmdletBinding()] + param( [Parameter()] [System.String] - $SearchOnCommonAreaPhoneMode, + $Description, [Parameter()] - [System.Int64] - $HotDeskingIdleTimeoutInMinutes, + [System.Boolean] + $AllowMeetingPinned, + + [Parameter()] + [System.Boolean] + $AllowCalling, + + [Parameter()] + [System.Boolean] + $AllowCallingPinned, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $SignInMode, + $Identity, [Parameter()] [System.String] $MsftInternalProcessingMode, [Parameter()] - [System.String] - $AllowBetterTogether, + [System.Boolean] + $AllowMeeting, [Parameter()] - [System.String] - $AllowHomeScreen, + [System.Boolean] + $AllowMessagingPinned, [Parameter()] - [System.String] - $Identity + [System.Boolean] + $AllowMessaging ) } -function New-CsTeamsMeetingBroadcastPolicy +function New-CsTenantDialPlan { [CmdletBinding()] param( + [Parameter()] + [System.Boolean] + $OptimizeDeviceDialing, + [Parameter()] [System.String] $Description, [Parameter()] - [System.String] - $BroadcastAttendeeVisibilityMode, + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] - [System.Boolean] - $AllowBroadcastTranscription, + [System.Object] + $NormalizationRules, [Parameter()] [System.String] @@ -51089,36 +51813,69 @@ function New-CsTeamsMeetingBroadcastPolicy [Parameter()] [System.String] - $BroadcastRecordingMode, + $ExternalAccessPrefix, [Parameter()] - [System.Boolean] - $AllowBroadcastScheduling, + [System.String] + $SimpleName, [Parameter()] [System.String] - $MsftInternalProcessingMode, + $MsftInternalProcessingMode + ) +} +function New-CsTenantNetworkRegion +{ + [CmdletBinding()] + param( + [Parameter()] + [System.String] + $BypassID, + + [Parameter()] + [System.String] + $Description, + + [Parameter()] + [System.String] + $CentralSite, [Parameter()] [System.Management.Automation.SwitchParameter] - $Confirm + $Confirm, + + [Parameter()] + [System.String] + $NetworkRegionID, + + [Parameter()] + [System.String] + $Identity, + + [Parameter()] + [System.String] + $MsftInternalProcessingMode ) } -function New-CsTeamsMobilityPolicy +function New-CsTenantNetworkSite { [CmdletBinding()] param( [Parameter()] [System.String] - $IPVideoMobileMode, + $Description, + + [Parameter()] + [System.String] + $EmergencyCallRoutingPolicy, [Parameter()] [System.String] - $Description, + $LocationPolicy, [Parameter()] - [System.String] - $IPAudioMobileMode, + [System.Boolean] + $EnableLocationBasedRouting, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -51126,61 +51883,44 @@ function New-CsTeamsMobilityPolicy [Parameter()] [System.String] - $Identity, + $NetworkRegionID, [Parameter()] [System.String] - $MsftInternalProcessingMode, + $SiteAddress, [Parameter()] [System.String] - $MobileDialerPreference - ) -} -function New-CsTeamsNetworkRoamingPolicy -{ - [CmdletBinding()] - param( + $NetworkRoamingPolicy, + [Parameter()] [System.String] - $Description, + $EmergencyCallingPolicy, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $NetworkSiteID, [Parameter()] [System.String] $Identity, - [Parameter()] - [System.Int64] - $MediaBitRateKb, - [Parameter()] [System.String] - $MsftInternalProcessingMode, - - [Parameter()] - [System.Boolean] - $AllowIPVideo + $MsftInternalProcessingMode ) } -function New-CsTeamsShiftsPolicy +function New-CsTenantNetworkSubnet { [CmdletBinding()] param( [Parameter()] [System.String] - $ShiftNoticeMessageType, + $Description, [Parameter()] [System.String] - $ShiftNoticeFrequency, - - [Parameter()] - [System.Int64] - $AccessGracePeriodMinutes, + $SubnetID, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -51192,26 +51932,18 @@ function New-CsTeamsShiftsPolicy [Parameter()] [System.String] - $ShiftNoticeMessageCustom, - - [Parameter()] - [System.Boolean] - $EnableScheduleOwnerPermissions, + $NetworkSiteID, [Parameter()] - [System.String] - $AccessType, + [System.Int32] + $MaskBits, [Parameter()] [System.String] - $MsftInternalProcessingMode, - - [Parameter()] - [System.Boolean] - $EnableShiftPresence + $MsftInternalProcessingMode ) } -function New-CsTeamsTranslationRule +function New-CsTenantTrustedIPAddress { [CmdletBinding()] param( @@ -51221,11 +51953,7 @@ function New-CsTeamsTranslationRule [Parameter()] [System.String] - $Name, - - [Parameter()] - [System.String] - $Pattern, + $IPAddress, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -51236,33 +51964,33 @@ function New-CsTeamsTranslationRule $Identity, [Parameter()] - [System.String] - $Translation, + [System.Nullable`1[System.Int32]] + $MaskBits, [Parameter()] [System.String] $MsftInternalProcessingMode ) } -function New-CsTeamsUnassignedNumberTreatment +function New-CsVoiceNormalizationRule { [CmdletBinding()] param( [Parameter()] - [System.Int32] - $TreatmentPriority, + [System.String] + $Description, [Parameter()] - [System.String] - $TreatmentId, + [System.Int32] + $Priority, [Parameter()] [System.String] - $Pattern, + $Name, [Parameter()] [System.String] - $Description, + $Pattern, [Parameter()] [System.Management.Automation.SwitchParameter] @@ -51270,151 +51998,161 @@ function New-CsTeamsUnassignedNumberTreatment [Parameter()] [System.String] - $Identity, + $Parent, [Parameter()] [System.String] - $TargetType, + $Translation, [Parameter()] [System.String] - $Target, + $Identity, + + [Parameter()] + [System.Management.Automation.SwitchParameter] + $InMemory, [Parameter()] [System.String] - $MsftInternalProcessingMode + $MsftInternalProcessingMode, + + [Parameter()] + [System.Boolean] + $IsInternalExtension ) } -function New-CsTeamsVdiPolicy +function Remove-CsCallQueue { [CmdletBinding()] param( [Parameter()] - [System.Boolean] - $DisableCallsAndMeetings, + [PSObject] + $HttpPipelinePrepend, [Parameter()] - [System.String] - $Identity, + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $MsftInternalProcessingMode, + $Identity, [Parameter()] [System.Management.Automation.SwitchParameter] - $Confirm, - - [Parameter()] - [System.Boolean] - $DisableAudioVideoInCallsAndMeetings + $Force ) } -function New-CsTeamsWorkLoadPolicy +function Remove-CsGroupPolicyAssignment { [CmdletBinding()] param( [Parameter()] - [System.String] - $Description, + [PSObject] + $HttpPipelinePrepend, [Parameter()] - [System.Boolean] - $AllowMeetingPinned, + [System.Management.Automation.PSCredential] + $ProxyCredential, [Parameter()] - [System.Boolean] - $AllowCalling, + [System.Uri] + $Proxy, [Parameter()] - [System.Boolean] - $AllowCallingPinned, + [System.Management.Automation.SwitchParameter] + $PassThru, [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] - [System.String] - $Identity, + [PSObject] + $HttpPipelineAppend, [Parameter()] - [System.String] - $MsftInternalProcessingMode, + [System.Management.Automation.SwitchParameter] + $ProxyUseDefaultCredentials, [Parameter()] - [System.Boolean] - $AllowMeeting, + [System.String] + $GroupId, [Parameter()] - [System.Boolean] - $AllowMessagingPinned, + [System.String] + $PolicyType, [Parameter()] - [System.Boolean] - $AllowMessaging + [System.Management.Automation.SwitchParameter] + $Break ) } -function New-CsTenantDialPlan +function Remove-CsOnlineVoiceRoute { [CmdletBinding()] param( - [Parameter()] - [System.Boolean] - $OptimizeDeviceDialing, - - [Parameter()] - [System.String] - $Description, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, - [Parameter()] - [System.Object] - $NormalizationRules, - [Parameter()] [System.String] $Identity, [Parameter()] [System.String] - $ExternalAccessPrefix, + $MsftInternalProcessingMode + ) +} +function Remove-CsOnlineVoiceRoutingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $SimpleName, + $Identity, [Parameter()] [System.String] $MsftInternalProcessingMode ) } -function New-CsTenantNetworkRegion +function Remove-CsPhoneNumberAssignment { [CmdletBinding()] param( [Parameter()] - [System.String] - $BypassID, + [System.Management.Automation.SwitchParameter] + $RemoveAll, [Parameter()] - [System.String] - $Description, + [PSObject] + $HttpPipelinePrepend, [Parameter()] [System.String] - $CentralSite, + $PhoneNumberType, [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $Identity, [Parameter()] [System.String] - $NetworkRegionID, + $PhoneNumber + ) +} +function Remove-CsTeamsAudioConferencingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] @@ -51425,49 +52163,64 @@ function New-CsTenantNetworkRegion $MsftInternalProcessingMode ) } -function New-CsTenantNetworkSite +function Remove-CsTeamsCallParkPolicy { [CmdletBinding()] param( [Parameter()] - [System.String] - $Description, + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $EmergencyCallRoutingPolicy, + $Identity, [Parameter()] [System.String] - $LocationPolicy, - - [Parameter()] - [System.Boolean] - $EnableLocationBasedRouting, - + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsComplianceRecordingPolicy +{ + [CmdletBinding()] + param( [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $NetworkRegionID, + $Identity, [Parameter()] [System.String] - $SiteAddress, - + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsCortanaPolicy +{ + [CmdletBinding()] + param( [Parameter()] - [System.String] - $NetworkRoamingPolicy, + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $EmergencyCallingPolicy, + $Identity, [Parameter()] [System.String] - $NetworkSiteID, + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsEmergencyCallRoutingPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] @@ -51478,18 +52231,10 @@ function New-CsTenantNetworkSite $MsftInternalProcessingMode ) } -function New-CsTenantNetworkSubnet +function Remove-CsTeamsEnhancedEncryptionPolicy { [CmdletBinding()] param( - [Parameter()] - [System.String] - $Description, - - [Parameter()] - [System.String] - $SubnetID, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, @@ -51498,31 +52243,15 @@ function New-CsTenantNetworkSubnet [System.String] $Identity, - [Parameter()] - [System.String] - $NetworkSiteID, - - [Parameter()] - [System.Int32] - $MaskBits, - [Parameter()] [System.String] $MsftInternalProcessingMode ) } -function New-CsTenantTrustedIPAddress +function Remove-CsTeamsFilesPolicy { [CmdletBinding()] param( - [Parameter()] - [System.String] - $Description, - - [Parameter()] - [System.String] - $IPAddress, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, @@ -51531,110 +52260,97 @@ function New-CsTenantTrustedIPAddress [System.String] $Identity, - [Parameter()] - [System.Nullable`1[System.Int32]] - $MaskBits, - [Parameter()] [System.String] $MsftInternalProcessingMode ) } -function New-CsVoiceNormalizationRule +function Remove-CsTeamsIPPhonePolicy { [CmdletBinding()] param( [Parameter()] - [System.String] - $Description, - - [Parameter()] - [System.Int32] - $Priority, + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] - $Name, + $Identity, [Parameter()] [System.String] - $Pattern, - + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsMeetingBroadcastPolicy +{ + [CmdletBinding()] + param( [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Parent, - - [Parameter()] - [System.String] - $Translation, + $Identity, [Parameter()] [System.String] - $Identity, - + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsMobilityPolicy +{ + [CmdletBinding()] + param( [Parameter()] [System.Management.Automation.SwitchParameter] - $InMemory, + $Confirm, [Parameter()] [System.String] - $MsftInternalProcessingMode, + $Identity, [Parameter()] - [System.Boolean] - $IsInternalExtension + [System.String] + $MsftInternalProcessingMode ) } -function Remove-CsGroupPolicyAssignment +function Remove-CsTeamsNetworkRoamingPolicy { [CmdletBinding()] param( - [Parameter()] - [PSObject] - $HttpPipelinePrepend, - - [Parameter()] - [System.Management.Automation.PSCredential] - $ProxyCredential, - - [Parameter()] - [System.Uri] - $Proxy, - - [Parameter()] - [System.Management.Automation.SwitchParameter] - $PassThru, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] - [PSObject] - $HttpPipelineAppend, + [System.String] + $Identity, + [Parameter()] + [System.String] + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsShiftsPolicy +{ + [CmdletBinding()] + param( [Parameter()] [System.Management.Automation.SwitchParameter] - $ProxyUseDefaultCredentials, + $Confirm, [Parameter()] [System.String] - $GroupId, + $Identity, [Parameter()] [System.String] - $PolicyType, - - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Break + $MsftInternalProcessingMode ) } -function Remove-CsOnlineVoiceRoute +function Remove-CsTeamsTranslationRule { [CmdletBinding()] param( @@ -51651,7 +52367,7 @@ function Remove-CsOnlineVoiceRoute $MsftInternalProcessingMode ) } -function Remove-CsOnlineVoiceRoutingPolicy +function Remove-CsTeamsUnassignedNumberTreatment { [CmdletBinding()] param( @@ -51668,21 +52384,30 @@ function Remove-CsOnlineVoiceRoutingPolicy $MsftInternalProcessingMode ) } -function Remove-CsPhoneNumberAssignment +function Remove-CsTeamsVdiPolicy { [CmdletBinding()] param( [Parameter()] [System.Management.Automation.SwitchParameter] - $RemoveAll, + $Confirm, [Parameter()] - [PSObject] - $HttpPipelinePrepend, + [System.String] + $Identity, [Parameter()] [System.String] - $PhoneNumberType, + $MsftInternalProcessingMode + ) +} +function Remove-CsTeamsWorkLoadPolicy +{ + [CmdletBinding()] + param( + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.String] @@ -51690,10 +52415,10 @@ function Remove-CsPhoneNumberAssignment [Parameter()] [System.String] - $PhoneNumber + $MsftInternalProcessingMode ) } -function Remove-CsTeamsAudioConferencingPolicy +function Remove-CsTenantDialPlan { [CmdletBinding()] param( @@ -51710,7 +52435,7 @@ function Remove-CsTeamsAudioConferencingPolicy $MsftInternalProcessingMode ) } -function Remove-CsTeamsCallParkPolicy +function Remove-CsTenantNetworkRegion { [CmdletBinding()] param( @@ -51727,7 +52452,7 @@ function Remove-CsTeamsCallParkPolicy $MsftInternalProcessingMode ) } -function Remove-CsTeamsComplianceRecordingPolicy +function Remove-CsTenantNetworkSite { [CmdletBinding()] param( @@ -51744,7 +52469,7 @@ function Remove-CsTeamsComplianceRecordingPolicy $MsftInternalProcessingMode ) } -function Remove-CsTeamsCortanaPolicy +function Remove-CsTenantNetworkSubnet { [CmdletBinding()] param( @@ -51761,7 +52486,7 @@ function Remove-CsTeamsCortanaPolicy $MsftInternalProcessingMode ) } -function Remove-CsTeamsEmergencyCallRoutingPolicy +function Remove-CsTenantTrustedIPAddress { [CmdletBinding()] param( @@ -51778,276 +52503,309 @@ function Remove-CsTeamsEmergencyCallRoutingPolicy $MsftInternalProcessingMode ) } -function Remove-CsTeamsEnhancedEncryptionPolicy +function Set-CsCallQueue { [CmdletBinding()] param( [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $OverflowRedirectVoicemailAudioFilePrompt, + + [Parameter()] + [System.Guid[]] + $Users, + + [Parameter()] + [System.Int16] + $TimeoutThreshold, + + [Parameter()] + [System.String] + $TimeoutRedirectPersonTextToSpeechPrompt, + + [Parameter()] + [System.Boolean] + $EnableOverflowSharedVoicemailTranscription, + + [Parameter()] + [System.String] + $NoAgentRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $MusicOnHoldAudioFileId, + + [Parameter()] + [System.String] + $WelcomeMusicAudioFileId, + + [Parameter()] + [System.Boolean] + $ConferenceMode, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailAudioFilePrompt, + + [Parameter()] + [System.Int16] + $AgentAlertTime, + + [Parameter()] + [System.String] + $TimeoutSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.Boolean] + $EnableNoAgentSharedVoicemailSystemPromptSuppression, + + [Parameter()] + [System.String] + $OverflowRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.String] + $TimeoutRedirectVoicemailTextToSpeechPrompt, + + [Parameter()] + [PSObject] + $TimeoutAction, + + [Parameter()] + [System.Boolean] + $EnableNoAgentSharedVoicemailTranscription, + + [Parameter()] + [System.Guid[]] + $OboResourceAccountIds, + + [Parameter()] + [System.String] + $NoAgentSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.Boolean] + $EnableOverflowSharedVoicemailSystemPromptSuppression, + + [Parameter()] + [System.String] + $LineUri, + + [Parameter()] + [System.Boolean] + $UseDefaultMusicOnHold, + + [Parameter()] + [System.String] + $OverflowActionTarget, + + [Parameter()] + [System.String] + $ChannelId, + + [Parameter()] + [System.String] + $OverflowSharedVoicemailTextToSpeechPrompt, + + [Parameter()] + [System.Boolean] + $AllowOptOut, + + [Parameter()] + [System.String] + $TimeoutRedirectPhoneNumberAudioFilePrompt, + + [Parameter()] + [System.String] + $OverflowRedirectPhoneNumberTextToSpeechPrompt, + + [Parameter()] + [System.String] + $OverflowRedirectVoiceAppTextToSpeechPrompt, + + [Parameter()] + [System.Boolean] + $PresenceBasedRouting, + + [Parameter()] + [System.String] + $TimeoutActionTarget, + + [Parameter()] + [System.Boolean] + $ShouldOverwriteCallableChannelProperty, + + [Parameter()] + [System.String] + $NoAgentRedirectVoiceAppTextToSpeechPrompt, [Parameter()] [System.String] - $Identity, + $TimeoutSharedVoicemailAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsFilesPolicy -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $NoAgentRedirectPersonTextToSpeechPrompt, [Parameter()] [System.String] - $Identity, + $TimeoutRedirectVoiceAppTextToSpeechPrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsIPPhonePolicy -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $OverflowRedirectPhoneNumberAudioFilePrompt, [Parameter()] [System.String] - $Identity, + $TimeoutDisconnectAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsMeetingBroadcastPolicy -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $NoAgentRedirectPersonAudioFilePrompt, [Parameter()] [System.String] - $Identity, + $OverflowRedirectVoiceAppAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsMobilityPolicy -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $NoAgentRedirectVoicemailAudioFilePrompt, [Parameter()] [System.String] - $Identity, + $OverflowDisconnectTextToSpeechPrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsNetworkRoamingPolicy -{ - [CmdletBinding()] - param( + $TimeoutRedirectPhoneNumberTextToSpeechPrompt, + [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Guid[]] + $HideAuthorizedUsers, [Parameter()] - [System.String] - $Identity, + [PSObject] + $HttpPipelinePrepend, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsShiftsPolicy -{ - [CmdletBinding()] - param( + $NoAgentRedirectPhoneNumberAudioFilePrompt, + [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.String] + $OverflowDisconnectAudioFilePrompt, [Parameter()] [System.String] - $Identity, + $NoAgentActionTarget, + + [Parameter()] + [System.Guid[]] + $DistributionLists, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsTranslationRule -{ - [CmdletBinding()] - param( + $TimeoutRedirectVoiceAppAudioFilePrompt, + [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, [Parameter()] [System.String] - $Identity, + $LanguageId, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsUnassignedNumberTreatment -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $OverflowRedirectPersonAudioFilePrompt, [Parameter()] [System.String] - $Identity, + $OverflowRedirectPersonTextToSpeechPrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsVdiPolicy -{ - [CmdletBinding()] - param( + $TimeoutDisconnectTextToSpeechPrompt, + [Parameter()] [System.Management.Automation.SwitchParameter] - $Confirm, + $Force, [Parameter()] [System.String] - $Identity, + $TimeoutRedirectVoicemailAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTeamsWorkLoadPolicy -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $NoAgentRedirectPhoneNumberTextToSpeechPrompt, [Parameter()] [System.String] - $Identity, + $NoAgentDisconnectTextToSpeechPrompt, + + [Parameter()] + [PSObject] + $NoAgentAction, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTenantDialPlan -{ - [CmdletBinding()] - param( + $NoAgentDisconnectAudioFilePrompt, + [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Guid[]] + $AuthorizedUsers, [Parameter()] - [System.String] - $Identity, + [PSObject] + $RoutingMethod, [Parameter()] - [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTenantNetworkRegion -{ - [CmdletBinding()] - param( + [System.Guid] + $ChannelUserObjectId, + [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Boolean] + $EnableTimeoutSharedVoicemailSystemPromptSuppression, [Parameter()] [System.String] - $Identity, + $Name, [Parameter()] - [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTenantNetworkSite -{ - [CmdletBinding()] - param( + [System.Boolean] + $EnableTimeoutSharedVoicemailTranscription, + [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [System.Int16] + $OverflowThreshold, [Parameter()] - [System.String] - $Identity, + [PSObject] + $OverflowAction, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTenantNetworkSubnet -{ - [CmdletBinding()] - param( - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + $WelcomeTextToSpeechPrompt, [Parameter()] [System.String] - $Identity, + $NoAgentSharedVoicemailAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode - ) -} -function Remove-CsTenantTrustedIPAddress -{ - [CmdletBinding()] - param( + $Identity, + [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, + [PSObject] + $NoAgentApplyTo, [Parameter()] [System.String] - $Identity, + $NoAgentRedirectVoiceAppAudioFilePrompt, [Parameter()] [System.String] - $MsftInternalProcessingMode + $TimeoutRedirectPersonAudioFilePrompt ) } function Set-CsOnlineDialInConferencingTenantSettings @@ -52106,6 +52864,10 @@ function Set-CsOnlineDialInConferencingTenantSettings [System.UInt32] $PinLength, + [Parameter()] + [System.String] + $MsftInternalProcessingMode, + [Parameter()] [System.Boolean] $UseUniqueConferenceIds, @@ -52122,10 +52884,6 @@ function Set-CsOnlineDialInConferencingTenantSettings [System.Boolean] $EnableEntryExitNotifications, - [Parameter()] - [System.String] - $MsftInternalProcessingMode, - [Parameter()] [System.Boolean] $EnableDialOutJoinConfirmation, @@ -52479,10 +53237,6 @@ function Set-CsTeamsComplianceRecordingPolicy [System.Boolean] $DisableComplianceRecordingAudioNotificationForCalls, - [Parameter()] - [System.Boolean] - $Enabled, - [Parameter()] [System.Object] $ComplianceRecordingApplications, @@ -52497,7 +53251,11 @@ function Set-CsTeamsComplianceRecordingPolicy [Parameter()] [System.String] - $MsftInternalProcessingMode + $MsftInternalProcessingMode, + + [Parameter()] + [System.Boolean] + $Enabled ) } function Set-CsTeamsCortanaPolicy @@ -52694,10 +53452,6 @@ function Set-CsTeamsGuestMessagingConfiguration [System.Boolean] $AllowUserDeleteChat, - [Parameter()] - [System.Boolean] - $AllowUserDeleteMessage, - [Parameter()] [System.Boolean] $AllowGiphy, @@ -52710,6 +53464,10 @@ function Set-CsTeamsGuestMessagingConfiguration [System.Boolean] $AllowUserEditMessage, + [Parameter()] + [System.Boolean] + $AllowUserDeleteMessage, + [Parameter()] [System.String] $Identity, @@ -52739,14 +53497,14 @@ function Set-CsTeamsIPPhonePolicy [System.String] $Description, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, - [Parameter()] [System.Boolean] $AllowHotDesking, + [Parameter()] + [System.Management.Automation.SwitchParameter] + $Confirm, + [Parameter()] [System.String] $SearchOnCommonAreaPhoneMode, @@ -52800,10 +53558,6 @@ function Set-CsTeamsMeetingBroadcastConfiguration [System.String] $Identity, - [Parameter()] - [System.String] - $SdnLicenseId, - [Parameter()] [System.String] $SupportURL, @@ -52818,7 +53572,11 @@ function Set-CsTeamsMeetingBroadcastConfiguration [Parameter()] [System.String] - $SdnApiTemplateUrl + $SdnApiTemplateUrl, + + [Parameter()] + [System.String] + $SdnLicenseId ) } function Set-CsTeamsMeetingBroadcastPolicy @@ -53022,10 +53780,6 @@ function Set-CsTeamsShiftsPolicy [System.String] $ShiftNoticeFrequency, - [Parameter()] - [System.Int64] - $AccessGracePeriodMinutes, - [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, @@ -53052,7 +53806,11 @@ function Set-CsTeamsShiftsPolicy [Parameter()] [System.Boolean] - $EnableShiftPresence + $EnableShiftPresence, + + [Parameter()] + [System.Int64] + $AccessGracePeriodMinutes ) } function Set-CsTeamsTranslationRule @@ -53125,6 +53883,10 @@ function Set-CsTeamsUpgradeConfiguration { [CmdletBinding()] param( + [Parameter()] + [System.String] + $SfBMeetingJoinUx, + [Parameter()] [System.Management.Automation.SwitchParameter] $Confirm, @@ -53137,10 +53899,6 @@ function Set-CsTeamsUpgradeConfiguration [System.String] $Identity, - [Parameter()] - [System.String] - $SfBMeetingJoinUx, - [Parameter()] [System.String] $MsftInternalProcessingMode @@ -53258,13 +54016,17 @@ function Set-CsTenantFederationConfiguration [CmdletBinding()] param( [Parameter()] - [System.Boolean] - $AllowTeamsConsumerInbound, + [System.Management.Automation.SwitchParameter] + $Confirm, [Parameter()] [System.Boolean] $SharedSipAddressSpace, + [Parameter()] + [System.Boolean] + $AllowTeamsConsumerInbound, + [Parameter()] [System.Object] $BlockedDomains, @@ -53273,10 +54035,6 @@ function Set-CsTenantFederationConfiguration [System.Boolean] $TreatDiscoveredPartnersAsUnverified, - [Parameter()] - [System.Management.Automation.SwitchParameter] - $Confirm, - [Parameter()] [System.Boolean] $AllowTeamsConsumer, From 3bc7a2b6a285c1a87a044db217915009a45516c5 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 16:31:27 +0000 Subject: [PATCH 37/40] Updated Resources and Cmdlet documentation pages --- docs/docs/resources/teams/TeamsCallQueue.md | 137 ++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 docs/docs/resources/teams/TeamsCallQueue.md diff --git a/docs/docs/resources/teams/TeamsCallQueue.md b/docs/docs/resources/teams/TeamsCallQueue.md new file mode 100644 index 0000000000..485d73fe4b --- /dev/null +++ b/docs/docs/resources/teams/TeamsCallQueue.md @@ -0,0 +1,137 @@ +# TeamsCallQueue + +## Parameters + +| Parameter | Attribute | DataType | Description | Allowed Values | +| --- | --- | --- | --- | --- | +| **Name** | Key | String | The Name parameter specifies a unique name for the Call Queue. | | +| **AgentAlertTime** | Write | UInt16 | The Name parameter specifies a unique name for the Call Queue. | | +| **AllowOptOut** | Write | Boolean | The AllowOptOut parameter indicates whether or not agents can opt in or opt out from taking calls from a Call Queue. | | +| **DistributionLists** | Write | StringArray[] | The DistributionLists parameter lets you add all the members of the distribution lists to the Call Queue. This is a list of distribution list GUIDs. A service wide configurable maximum number of DLs per Call Queue are allowed. Only the first N (service wide configurable) agents from all distribution lists combined are considered for accepting the call. Nested DLs are supported. O365 Groups can also be used to add members to the Call Queue. | | +| **UseDefaultMusicOnHold** | Write | Boolean | The UseDefaultMusicOnHold parameter indicates that this Call Queue uses the default music on hold. This parameter cannot be specified together with MusicOnHoldAudioFileId. | | +| **WelcomeMusicAudioFileId** | Write | String | The WelcomeMusicAudioFileId parameter represents the audio file to play when callers are connected with the Call Queue. This is the unique identifier of the audio file. | | +| **MusicOnHoldAudioFileId** | Write | String | The MusicOnHoldFileContent parameter represents music to play when callers are placed on hold. This is the unique identifier of the audio file. This parameter is required if the UseDefaultMusicOnHold parameter is not specified. | | +| **OverflowAction** | Write | String | The OverflowAction parameter designates the action to take if the overflow threshold is reached. The OverflowAction property must be set to one of the following values: DisconnectWithBusy, Forward, Voicemail, and SharedVoicemail. The default value is DisconnectWithBusy. | `DisconnectWithBusy`, `Forward`, `Voicemail`, `SharedVoicemail` | +| **OverflowActionTarget** | Write | String | The OverflowActionTarget parameter represents the target of the overflow action. If the OverFlowAction is set to Forward, this parameter must be set to a Guid or a telephone number with a mandatory 'tel:' prefix. If the OverflowAction is set to SharedVoicemail, this parameter must be set to a group ID (Microsoft 365, Distribution list, or Mail-enabled security). Otherwise, this parameter is optional. | | +| **OverflowThreshold** | Write | UInt16 | The OverflowThreshold parameter defines the number of calls that can be in the queue at any one time before the overflow action is triggered. The OverflowThreshold can be any integer value between 0 and 200, inclusive. A value of 0 causes calls not to reach agents and the overflow action to be taken immediately. | | +| **TimeoutAction** | Write | String | The TimeoutAction parameter defines the action to take if the timeout threshold is reached. The TimeoutAction property must be set to one of the following values: Disconnect, Forward, Voicemail, and SharedVoicemail. The default value is Disconnect. | `Disconnect`, `Forward`, `Voicemail`, `SharedVoicemail` | +| **TimeoutActionTarget** | Write | String | The TimeoutActionTarget represents the target of the timeout action. If the TimeoutAction is set to Forward, this parameter must be set to a Guid or a telephone number with a mandatory 'tel:' prefix. If the TimeoutAction is set to SharedVoicemail, this parameter must be set to an Office 365 Group ID. Otherwise, this field is optional. | | +| **TimeoutThreshold** | Write | UInt16 | The TimeoutThreshold parameter defines the time (in seconds) that a call can be in the queue before that call times out. At that point, the system will take the action specified by the TimeoutAction parameter. The TimeoutThreshold can be any integer value between 0 and 2700 seconds (inclusive), and is rounded to the nearest 15th interval. For example, if set to 47 seconds, then it is rounded down to 45. If set to 0, welcome music is played, and then the timeout action will be taken. | | +| **RoutingMethod** | Write | String | The RoutingMethod defines how agents will be called in a Call Queue. If the routing method is set to Serial, then agents will be called one at a time. If the routing method is set to Attendant, then agents will be called in parallel. If routing method is set to RoundRobin, the agents will be called using Round Robin strategy so that all agents share the call-load equally. If routing method is set to LongestIdle, the agents will be called based on their idle time, i.e., the agent that has been idle for the longest period will be called. | `Attendant`, `Serial`, `RoundRobin`, `LongestIdle` | +| **PresenceBasedRouting** | Write | Boolean | The PresenceBasedRouting parameter indicates whether or not presence based routing will be applied while call being routed to Call Queue agents. When set to False, calls will be routed to agents who have opted in to receive calls, regardless of their presence state. When set to True, opted-in agents will receive calls only when their presence state is Available. | | +| **ConferenceMode** | Write | Boolean | The ConferenceMode parameter indicates whether or not Conference mode will be applied on calls for this Call queue. Conference mode significantly reduces the amount of time it takes for a caller to be connected to an agent, after the agent accepts the call. | | +| **Users** | Write | StringArray[] | The Users parameter lets you add agents to the Call Queue. This parameter expects a list of user unique identifiers (GUID). | | +| **LanguageId** | Write | String | The LanguageId parameter indicates the language that is used to play shared voicemail prompts. This parameter becomes a required parameter If either OverflowAction or TimeoutAction is set to SharedVoicemail. You can query the supported languages using the Get-CsAutoAttendantSupportedLanguage cmdlet. | | +| **OboResourceAccountIds** | Write | StringArray[] | The OboResourceAccountIds parameter lets you add resource account with phone number to the Call Queue. The agents in the Call Queue will be able to make outbound calls using the phone number on the resource accounts. This is a list of resource account GUIDs. Only Call Queue managed by a Teams Channel will be able to use this feature. | | +| **OverflowDisconnectTextToSpeechPrompt** | Write | String | The OverflowDisconnectTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being disconnected due to overflow. | | +| **OverflowDisconnectAudioFilePrompt** | Write | String | The OverflowDisconnectAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being disconnected due to overflow. | | +| **OverflowRedirectPersonTextToSpeechPrompt** | Write | String | The OverflowRedirectPersonTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person in the organization due to overflow. | | +| **OverflowRedirectPersonAudioFilePrompt** | Write | String | The OverflowRedirectPersonAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person in the organization due to overflow. | | +| **OverflowRedirectVoiceAppTextToSpeechPrompt** | Write | String | The OverflowRedirectVoiceAppsTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a voice application due to overflow. | | +| **OverflowRedirectVoiceAppAudioFilePrompt** | Write | String | The OverflowRedirectVoiceAppAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a voice application due to overflow. | | +| **OverflowRedirectPhoneNumberTextToSpeechPrompt** | Write | String | The OverflowRedirectPhoneNumberTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to an external PSTN phone number due to overflow. | | +| **OverflowRedirectPhoneNumberAudioFilePrompt** | Write | String | The OverflowRedirectPhoneNumberAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to an external PSTN phone number due to overflow. | | +| **OverflowRedirectVoicemailTextToSpeechPrompt** | Write | String | The OverflowRedirectVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person's voicemail due to overflow. | | +| **OverflowRedirectVoicemailAudioFilePrompt** | Write | String | The OverflowRedirectVoiceMailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person's voicemail due to overflow. | | +| **OverflowSharedVoicemailTextToSpeechPrompt** | Write | String | The OverflowRedirectVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person's voicemail due to overflow. | | +| **OverflowSharedVoicemailAudioFilePrompt** | Write | String | The OverflowSharedVoicemailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is to be played as a greeting to the caller when transferred to shared voicemail on overflow. This parameter becomes a required parameter when OverflowAction is SharedVoicemail and OverflowSharedVoicemailTextToSpeechPrompt is null. | | +| **EnableOverflowSharedVoicemailTranscription** | Write | Boolean | The EnableOverflowSharedVoicemailTranscription parameter is used to turn on transcription for voicemails left by a caller on overflow. This parameter is only applicable when OverflowAction is set to SharedVoicemail. | | +| **TimeoutDisconnectTextToSpeechPrompt** | Write | String | The TimeoutDisconnectTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being disconnected due to timeout. | | +| **TimeoutDisconnectAudioFilePrompt** | Write | String | The TimeoutDisconnectAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being disconnected due to timeout. | | +| **TimeoutRedirectPersonTextToSpeechPrompt** | Write | String | The TimeoutRedirectPersonTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person in the organization due to timeout. | | +| **TimeoutRedirectPersonAudioFilePrompt** | Write | String | The TimeoutRedirectPersonAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person in the organization due to timeout. | | +| **TimeoutRedirectVoiceAppTextToSpeechPrompt** | Write | String | The TimeoutRedirectVoiceAppsTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a voice application due to timeout. | | +| **TimeoutRedirectVoiceAppAudioFilePrompt** | Write | String | The TimeoutRedirectVoiceAppAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a voice application due to timeout. | | +| **TimeoutRedirectPhoneNumberTextToSpeechPrompt** | Write | String | The TimeoutRedirectPhoneNumberTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to an external PSTN phone number due to timeout. | | +| **TimeoutRedirectPhoneNumberAudioFilePrompt** | Write | String | The TimeoutRedirectPhoneNumberAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to an external PSTN phone number due to timeout. | | +| **TimeoutRedirectVoicemailTextToSpeechPrompt** | Write | String | The TimeoutRedirectVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is played to the caller when being redirected to a person's voicemail due to timeout. | | +| **TimeoutRedirectVoicemailAudioFilePrompt** | Write | String | The TimeoutRedirectVoiceMailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is played to the caller when being redirected to a person's voicemail due to timeout. | | +| **TimeoutSharedVoicemailTextToSpeechPrompt** | Write | String | The TimeoutSharedVoicemailTextToSpeechPrompt parameter indicates the Text-to-Speech (TTS) prompt which is to be played as a greeting to the caller when transferred to shared voicemail on timeout. This parameter becomes a required parameter when TimeoutAction is SharedVoicemail and TimeoutSharedVoicemailAudioFilePrompt is null. | | +| **TimeoutSharedVoicemailAudioFilePrompt** | Write | String | The TimeoutSharedVoicemailAudioFilePrompt parameter indicates the unique identifier for the Audio file prompt which is to be played as a greeting to the caller when transferred to shared voicemail on timeout. This parameter becomes a required parameter when TimeoutAction is SharedVoicemail and TimeoutSharedVoicemailTextToSpeechPrompt is null. | | +| **EnableTimeoutSharedVoicemailTranscription** | Write | Boolean | The EnableTimeoutSharedVoicemailTranscription parameter is used to turn on transcription for voicemails left by a caller on timeout. This parameter is only applicable when TimeoutAction is set to SharedVoicemail. | | +| **ChannelId** | Write | String | Id of the channel to connect a call queue to. | | +| **ChannelUserObjectId** | Write | String | Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). This is the GUID of one of the owners of the team the channels belongs to. | | +| **AuthorizedUsers** | Write | StringArray[] | This is a list of GUIDs for users who are authorized to make changes to this call queue. The users must also have a TeamsVoiceApplications policy assigned. The GUID should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). | | +| **Ensure** | Write | String | Present ensures the Team Message Policy exists, absent ensures it is removed | `Present`, `Absent` | +| **Credential** | Write | PSCredential | Credentials of the Teams Service Admin | | +| **ApplicationId** | Write | String | Id of the Azure Active Directory application to authenticate with. | | +| **TenantId** | Write | String | Name of the Azure Active Directory tenant used for authentication. Format contoso.onmicrosoft.com | | +| **CertificateThumbprint** | Write | String | Thumbprint of the Azure Active Directory application's authentication certificate to use for authentication. | | + +## Description + +This resource is used to manage Call Queue in your Skype for Business Online organization. + +## Permissions + +### Microsoft Graph + +To authenticate with the Microsoft Graph API, this resource required the following permissions: + +#### Delegated permissions + +- **Read** + + - None + +- **Update** + + - None + +#### Application permissions + +- **Read** + + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All + +- **Update** + + - Organization.Read.All, User.Read.All, Group.ReadWrite.All, AppCatalog.ReadWrite.All, TeamSettings.ReadWrite.All, Channel.Delete.All, ChannelSettings.ReadWrite.All, ChannelMember.ReadWrite.All + +## Examples + +### Example 1 + +This example is used to test new resources and showcase the usage of new resources being worked on. +It is not meant to use as a production baseline. + +```powershell +Configuration Example +{ + param( + [Parameter(Mandatory = $true)] + [PSCredential] + $Credscredential + ) + Import-DscResource -ModuleName Microsoft365DSC + + node localhost + { + TeamsCallQueue "TestQueue" + { + AgentAlertTime = 114; + AllowOptOut = $True; + AuthorizedUsers = @("9abce74d-d108-475f-a2cb-bbb82f484982"); + ChannelId = "19:Y6MG7XdME2Cf9IRmU8PUXNfA1OtqmjyBgCmCGBN2tzY1@thread.tacv2"; + ConferenceMode = $True; + Credential = $Credscredential; + DistributionLists = @("36c88f29-faba-4f4a-89a7-e5af29e7095e"); + EnableOverflowSharedVoicemailTranscription = $False; + EnableTimeoutSharedVoicemailTranscription = $False; + Ensure = "Present"; + LanguageId = "fr-CA"; + Name = "TestQueue"; + OverflowAction = "Forward"; + OverflowActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + OverflowThreshold = 50; + PresenceBasedRouting = $True; + RoutingMethod = "RoundRobin"; + TimeoutAction = "Forward"; + TimeoutActionTarget = "9abce74d-d108-475f-a2cb-bbb82f484982"; + TimeoutThreshold = 1200; + UseDefaultMusicOnHold = $False; + } + } +} +``` + From 4dd03d49099d1d83033dc8ef24f5a4b916120798 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 12:38:01 -0400 Subject: [PATCH 38/40] Update Microsoft365.psm1 --- Tests/Unit/Stubs/Microsoft365.psm1 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tests/Unit/Stubs/Microsoft365.psm1 b/Tests/Unit/Stubs/Microsoft365.psm1 index 05d7244c4d..3e9b1365b9 100644 --- a/Tests/Unit/Stubs/Microsoft365.psm1 +++ b/Tests/Unit/Stubs/Microsoft365.psm1 @@ -27,7 +27,11 @@ function Set-DefaultTenantBriefingConfig [Parameter()] [PSObject] - $ResultSize + $ResultSize, + + [Parameter()] + [System.String] + $IsEnabledByDefault ) } function Set-DefaultTenantMyAnalyticsFeatureConfig From 5b52cb89f64c11139d5bb95add7195bf1804cc16 Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 16:40:15 +0000 Subject: [PATCH 39/40] Updated Resources and Cmdlet documentation pages --- docs/docs/resources/office365/O365OrgSettings.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/docs/resources/office365/O365OrgSettings.md b/docs/docs/resources/office365/O365OrgSettings.md index cb559e570b..4954e234ab 100644 --- a/docs/docs/resources/office365/O365OrgSettings.md +++ b/docs/docs/resources/office365/O365OrgSettings.md @@ -5,7 +5,19 @@ | Parameter | Attribute | DataType | Description | Allowed Values | | --- | --- | --- | --- | --- | | **IsSingleInstance** | Key | String | Specifies the resource is a single instance, the value must be 'Yes' | `Yes` | +| **AppsAndServicesIsAppAndServicesTrialEnabled** | Write | Boolean | Allow people in your organization to start trial subscriptions for apps and services that support trials. Admins manage licenses for these trials in the same way as other licenses in your organization. Only admins can upgrade these trials to paid subscriptions, so they won’t affect your billing. | | +| **AppsAndServicesIsOfficeStoreEnabled** | Write | Boolean | Allow people in your organization to access the Office Store using their work account. The Office Store provides access to apps that aren't curated or managed by Microsoft. | | | **CortanaEnabled** | Write | Boolean | Allow Cortana in windows 10 (version 1909 and earlier), and the Cortana app on iOS and Android, to access Microsoft-hosted data on behalf of people in your organization. | | +| **DynamicsCustomerVoiceIsInOrgFormsPhishingScanEnabled** | Write | Boolean | Automatically block any internal surveys that request confidential information. Admins will be notified in the Message Center when a survey is blocked. | | +| **DynamicsCustomerVoiceIsRecordIdentityByDefaultEnabled** | Write | Boolean | Capture the first and last names of respondents in your organization that complete a survey. You can still change this for individual surveys. | | +| **DynamicsCustomerVoiceIsRestrictedSurveyAccessEnabled** | Write | Boolean | Capture the first and last names of respondents in your organization that complete a survey. You can still change this for individual surveys. | | +| **FormsIsBingImageSearchEnabled** | Write | Boolean | Allow YouTube and Bing. | | +| **FormsIsExternalSendFormEnabled** | Write | Boolean | External Sharing - Send a link to the form and collect responses. | | +| **FormsIsExternalShareCollaborationEnabled** | Write | Boolean | External Sharing - Share to collaborate on the form layout and structure. | | +| **FormsIsExternalShareResultEnabled** | Write | Boolean | External Sharing - Share form result summary. | | +| **FormsIsExternalShareTemplateEnabled** | Write | Boolean | External Sharing - Share the form as a template that can be duplicated. | | +| **FormsIsInOrgFormsPhishingScanEnabled** | Write | Boolean | Phishing protection. | | +| **FormsIsRecordIdentityByDefaultEnabled** | Write | Boolean | Record names of people in your org. | | | **M365WebEnableUsersToOpenFilesFrom3PStorage** | Write | Boolean | Let users open files stored in third-party storage services in Microsoft 365 on the Web. | | | **MicrosoftVivaBriefingEmail** | Write | Boolean | Specifies whether or not to let people in your organization receive Briefing email from Microsoft Viva. | | | **VivaInsightsWebExperience** | Write | Boolean | Specifies whether or not to allow users to have access to use the Viva Insights web experience. | | @@ -13,6 +25,9 @@ | **VivaInsightsOutlookAddInAndInlineSuggestions** | Write | Boolean | Specifies whether or not to allow users to have access to use the Viva Insights Outlook add-in and inline suggestions. | | | **VivaInsightsScheduleSendSuggestions** | Write | Boolean | Specifies whether or not to allow users to have access to use the Viva Insights schedule send suggestions feature. | | | **PlannerAllowCalendarSharing** | Write | Boolean | Allow Planner users to publish their plans and assigned tasks to Outlook or other calendars through iCalendar feeds. | | +| **ToDoIsExternalJoinEnabled** | Write | Boolean | To Do - Allow external users to join. | | +| **ToDoIsExternalShareEnabled** | Write | Boolean | To Do - Allow sharing with external users. | | +| **ToDoIsPushNotificationEnabled** | Write | Boolean | To Do - Allow your users to receive push notifications. | | | **AdminCenterReportDisplayConcealedNames** | Write | Boolean | Controls whether or not the Admin Center reports will conceale user, group and site names. | | | **InstallationOptionsUpdateChannel** | Write | String | Defines how often you want your users to get feature updates for Microsoft 365 apps installed on devices running Windows | `current`, `monthlyEnterprise`, `semiAnnual` | | **InstallationOptionsAppsForWindows** | Write | StringArray[] | Defines the apps users can install on Windows and mobile devices. | `isVisioEnabled`, `isSkypeForBusinessEnabled`, `isProjectEnabled`, `isMicrosoft365AppsEnabled` | From 6120bb70e904dbf122ae3075b7993697d5bbe2ff Mon Sep 17 00:00:00 2001 From: Nik Charlebois Date: Fri, 30 Jun 2023 12:41:09 -0400 Subject: [PATCH 40/40] Release 1.23.628.1 --- CHANGELOG.md | 2 +- Modules/Microsoft365DSC/Microsoft365DSC.psd1 | 60 +++++++++++++------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f035b32e1b..246fe21f24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change log for Microsoft365DSC -# UNRELEASED +# 1.23.628.1 * AADAdministrativeUnit * Improved export performance. diff --git a/Modules/Microsoft365DSC/Microsoft365DSC.psd1 b/Modules/Microsoft365DSC/Microsoft365DSC.psd1 index 5253f07eb5..e0c97d3b48 100644 --- a/Modules/Microsoft365DSC/Microsoft365DSC.psd1 +++ b/Modules/Microsoft365DSC/Microsoft365DSC.psd1 @@ -3,7 +3,7 @@ # # Generated by: Microsoft Corporation # -# Generated on: 2023-06-22 +# Generated on: 2023-06-30 @{ @@ -11,7 +11,7 @@ # RootModule = '' # Version number of this module. - ModuleVersion = '1.23.621.1' + ModuleVersion = '1.23.628.1' # Supported PSEditions # CompatiblePSEditions = @() @@ -140,29 +140,45 @@ # ReleaseNotes of this module ReleaseNotes = '* AADAdministrativeUnit - * Fixes an issue where the domain part of the user name was handled as a string when using credentials to authenticate. - * EXORoleGroup - * Fixes an issue where the role group wasnt getting created when members were null. - FIXES [#3217](https://github.com/microsoft/Microsoft365DSC/issues/3217) + * Improved export performance. + * AADApplication + * Updated the Set and Test function to ignore the AppId parameter. + FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) + * Improved export performance. + * AADAuthenticationMethodPolicyAuthenticator + * Deprecated the NumberMatchingRequiredState Feature Setting. + FIXES [#3406](https://github.com/microsoft/Microsoft365DSC/issues/3406) + * AADRoleDefinition + * Improved export performance. + * AADRoleSetting + * Improved export performance. + * AADServicePrincipal + * Updated the Set and Test function to ignore the AppId parameter. + FIXES [#3390](https://github.com/microsoft/Microsoft365DSC/issues/3390) + * Improved export performance. + * EXOAvailabilityConfig + * Fixes an error where an error was thrown when the OrgWideAccount was not set. + FIXES [#3402](https://github.com/microsoft/Microsoft365DSC/issues/3402) + * IntuneDeviceEnrollmentPlatformRestriction + * Fixes an error where the WindowsMobileRestriction property was still being assessed dispite it being deprecated. + FIXES [#3407](https://github.com/microsoft/Microsoft365DSC/issues/3407) * O365OrgSettings - * Added support for the PlannerAllowCalendarSharing property for Planner. - * Added support for the Microsoft 365 installation options. - * Added support for the Viva Insights and Briefing email settings. - * PPTenantIsolationSettings & PPTenantSettings - * Handles the case where required permissions are not provided when using SPN authentication. - FIXES [#3179](https://github.com/microsoft/Microsoft365DSC/issues/3179) - * SCProtectionAlert - * Prevents extracting system rules. - FIXES [#3224](https://github.com/microsoft/Microsoft365DSC/issues/3224) + * Added support for Forms, Dynamics Customer Voice, To Do and Apps & Services settings. + * TeamsCallQueue + * Initial release. + * Teams resources + * Added required application permissions to support [Application Based Authentication](https://learn.microsoft.com/en-us/microsoftteams/teams-powershell-application-authentication) * MISC - * Fixes the display of arrays as property values for Excel based reports from New-M365DSCReportFromConfiguration. - FIXES [#3173](https://github.com/microsoft/Microsoft365DSC/issues/3173) - * Added the Organization.Read.All permission by default in the Get-M365DSCCompiledPermisisonList cmdlet return values. - FIXES [#3292](https://github.com/microsoft/Microsoft365DSC/issues/3292) + * Added API to the Organization.Read.All permission in the Get-M365DSCCompiledPermisisonList cmdlet + * Fixes an issue with Update-M365DSCAzureAdApplication where it was throwing an error complaining about duplicate keys. + FIXES #3417 + * Update-M365DSCModule now forces a reload of the latest version of the Microsoft365DSC module. + FIXES [#3326](https://github.com/microsoft/Microsoft365DSC/issues/3326) + * Update-M365DSCAyureADApplication + Added retry logic to catch the "Key credential end date is invalid" error when updating the application certificate. + FIXES [#3426](https://github.com/microsoft/Microsoft365DSC/issues/3426) * DEPENDENCIES - * Updated ExchangeOnlineManagement to version 3.2.0. - * Updated MicrosoftTeams to version 5.3.0. - * Updated MSCloudLoginAssistant to version 1.0.114.' + * Updated ReverseDSC to version 2.0.0.16.' # Flag to indicate whether the module requires explicit user acceptance for install/update # RequireLicenseAcceptance = $false

    &m=|x%(5k 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 QTENw~di_e_EXOAddressList which roles by default are not granted to any of the default role groups. Make sure you grant these permissions correctly before using them. +## Security and Compliance Center Permissions + +If you want to leverage Service Principal Authentication (using an App Registration) for Security and Compliance Center, there are a few extra configuration steps that need to be followed to grant proper permission to your app. Failure to follow these steps will results in the the cmdlets returning empty results. + +