DSCResources/cTeamsClientConfiguration/cTeamsClientConfiguration.schema.psm1

configuration cTeamsClientConfiguration {
    param (
        [Parameter(Mandatory = $true)]
        [ValidateSet('Yes')]
        [string]
        $IsSingleInstance,

        [Parameter()]
        [bool]
        $AllowBox,

        [Parameter()]
        [bool]
        $AllowDropBox,

        [Parameter()]
        [bool]
        $AllowEmailIntoChannel,

        [Parameter()]
        [bool]
        $AllowGoogleDrive,

        [Parameter()]
        [bool]
        $AllowGuestUser,

        [Parameter()]
        [bool]
        $AllowOrganizationTab,

        [Parameter()]
        [bool]
        $AllowResourceAccountSendMessage,

        [Parameter()]
        [bool]
        $AllowRoleBasedChatPermissions,

        [Parameter()]
        [bool]
        $AllowScopedPeopleSearchandAccess,

        [Parameter()]
        [bool]
        $AllowShareFile,

        [Parameter()]
        [bool]
        $AllowSkypeBusinessInterop,

        [Parameter()]
        [bool]
        $AllowEgnyte,

        [Parameter()]
        [ValidateSet('NotRequired', 'RequiredOutsideScheduleMeeting', 'AlwaysRequired')]
        [string]
        $ContentPin,

        [Parameter()]
        [bool]
        $ExtendedWorkInfoInPeopleSearch,

        [Parameter()]
        [ValidateSet('NoAccess', 'PartialAccess', 'FullAccess')]
        [string]
        $ResourceAccountContentAccess,

        [Parameter()]
        [string[]]
        $RestrictedSenderList,

        [Parameter()]
        [ValidateSet('MicrosoftDefault', 'Disabled')]
        [string]
        $UseUnifiedDomain,

        [Parameter()]
        [PSCredential]
        $Credential,

        [Parameter()]
        [string]
        $ApplicationId,

        [Parameter()]
        [string]
        $TenantId,

        [Parameter()]
        [string]
        $CertificateThumbprint,

        [Parameter()]
        [PSCredential]
        $CertificatePassword,

        [Parameter()]
        [string]
        $CertificatePath,

        [Parameter()]
        [bool]
        $ManagedIdentity,

        [Parameter()]
        [string[]]
        $AccessTokens
)

<#
TeamsClientConfiguration [String] #ResourceName
{
    IsSingleInstance = [string]{ Yes }
    [AccessTokens = [string[]]]
    [AllowBox = [bool]]
    [AllowDropBox = [bool]]
    [AllowEgnyte = [bool]]
    [AllowEmailIntoChannel = [bool]]
    [AllowGoogleDrive = [bool]]
    [AllowGuestUser = [bool]]
    [AllowOrganizationTab = [bool]]
    [AllowResourceAccountSendMessage = [bool]]
    [AllowRoleBasedChatPermissions = [bool]]
    [AllowScopedPeopleSearchandAccess = [bool]]
    [AllowShareFile = [bool]]
    [AllowSkypeBusinessInterop = [bool]]
    [ApplicationId = [string]]
    [CertificatePassword = [PSCredential]]
    [CertificatePath = [string]]
    [CertificateThumbprint = [string]]
    [ContentPin = [string]{ AlwaysRequired | NotRequired | RequiredOutsideScheduleMeeting }]
    [Credential = [PSCredential]]
    [DependsOn = [string[]]]
    [ExtendedWorkInfoInPeopleSearch = [bool]]
    [ManagedIdentity = [bool]]
    [PsDscRunAsCredential = [PSCredential]]
    [ResourceAccountContentAccess = [string]{ FullAccess | NoAccess | PartialAccess }]
    [RestrictedSenderList = [string[]]]
    [TenantId = [string]]
    [UseUnifiedDomain = [string]{ Disabled | MicrosoftDefault }]
}
 
#>



    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName Microsoft365DSC

    $dscResourceName = 'TeamsClientConfiguration'

    $param = $PSBoundParameters
    $param.Remove("InstanceName")

    $dscParameterKeys = 'IsSingleInstance' -split ', '

    $keyValues = foreach ($key in $dscParameterKeys)
    {
        $param.$key
    }
    $executionName = $keyValues -join '_'
    $executionName = $executionName -replace "[\s()\\:*-+/{}```"']", '_'

    (Get-DscSplattedResource -ResourceName $dscResourceName -ExecutionName $executionName -Properties $param -NoInvoke).Invoke($param)

}