DscResources/Defender/Defender.schema.psm1

# (2026-04-25 02:44:13) Generated using Microsoft365DSC v1.26.422.1
Configuration 'Defender'
{
    param
    (
        [Parameter(Mandatory = $true)]
        [System.String]
        $ApplicationId,

        [Parameter(Mandatory = $true)]
        [System.String]
        $TenantId,

        [Parameter(Mandatory = $true)]
        [System.String]
        $CertificateThumbprint
    )

    Import-DscResource -ModuleName Microsoft365DSC

    foreach ($DeviceAuthenticatedScanDefinition in $ConfigurationData.NonNodeData.Defender.DeviceAuthenticatedScanDefinition)
    {
        $resourceTitle = 'DefenderDeviceAuthenticatedScanDefinition-{0}' -f $DeviceAuthenticatedScanDefinition.Name
        $resourceTitle = $resourceTitle -replace "[^a-zA-Z0-9_\-\.\\\[\]]","_" -replace "__","_" -replace "__","_"

        $parameters = $DeviceAuthenticatedScanDefinition
        $parameters.ApplicationId = $ApplicationId
        $parameters.TenantId = $TenantId
        $parameters.CertificateThumbprint = $CertificateThumbprint

        if ($parameters.ContainsKey('UniqueId'))
        {
            $parameters.Remove('UniqueId')
        }

        if ($parameters.ContainsKey('ScannerAgent'))
        {
            $parameters.ScannerAgent = $parameters.ScannerAgent | ForEach-Object {
                if ($_.ContainsKey('UniqueId'))
                {
                    $_.Remove('UniqueId')
                }

                if ($_.Count -gt 0)
                {
                    (Get-DscSplattedResource -ResourceName 'MSFT_DefenderDeviceAuthenticatedScanDefinitionScanAgent' -Properties $_ -NoInvoke).Invoke($_)
                }
            }

            if ($parameters.ScannerAgent.Count -eq 0)
            {
                $parameters.Remove('ScannerAgent')
            }
        }

        if ($parameters.ContainsKey('ScanAuthenticationParams'))
        {
            $parameters.ScanAuthenticationParams = $parameters.ScanAuthenticationParams | ForEach-Object {
                if ($_.ContainsKey('UniqueId'))
                {
                    $_.Remove('UniqueId')
                }

                if ($_.Count -gt 0)
                {
                    (Get-DscSplattedResource -ResourceName 'MSFT_DefenderDeviceAuthenticatedScanDefinitionAuthenticationParams' -Properties $_ -NoInvoke).Invoke($_)
                }
            }

            if ($parameters.ScanAuthenticationParams.Count -eq 0)
            {
                $parameters.Remove('ScanAuthenticationParams')
            }
        }

        (Get-DscSplattedResource -ResourceName 'DefenderDeviceAuthenticatedScanDefinition' -ExecutionName $resourceTitle -Properties $parameters -NoInvoke).Invoke($parameters)
    }

    foreach ($RoleDefinition in $ConfigurationData.NonNodeData.Defender.RoleDefinition)
    {
        $resourceTitle = 'DefenderRoleDefinition-{0}' -f $RoleDefinition.DisplayName
        $resourceTitle = $resourceTitle -replace "[^a-zA-Z0-9_\-\.\\\[\]]","_" -replace "__","_" -replace "__","_"

        $parameters = $RoleDefinition
        $parameters.ApplicationId = $ApplicationId
        $parameters.TenantId = $TenantId
        $parameters.CertificateThumbprint = $CertificateThumbprint

        if ($parameters.ContainsKey('UniqueId'))
        {
            $parameters.Remove('UniqueId')
        }

        if ($parameters.ContainsKey('RolePermissions'))
        {
            $parameters.RolePermissions = $parameters.RolePermissions | ForEach-Object {
                if ($_.ContainsKey('UniqueId'))
                {
                    $_.Remove('UniqueId')
                }

                if ($_.Count -gt 0)
                {
                    (Get-DscSplattedResource -ResourceName 'MSFT_DefenderRoleDefinitionRolePermissions' -Properties $_ -NoInvoke).Invoke($_)
                }
            }

            if ($parameters.RolePermissions.Count -eq 0)
            {
                $parameters.Remove('RolePermissions')
            }
        }

        (Get-DscSplattedResource -ResourceName 'DefenderRoleDefinition' -ExecutionName $resourceTitle -Properties $parameters -NoInvoke).Invoke($parameters)
    }

    foreach ($SubscriptionPlan in $ConfigurationData.NonNodeData.Defender.SubscriptionPlan)
    {
        $resourceTitle = 'DefenderSubscriptionPlan-{0}-{1}' -f $SubscriptionPlan.SubscriptionName,$SubscriptionPlan.PlanName
        $resourceTitle = $resourceTitle -replace "[^a-zA-Z0-9_\-\.\\\[\]]","_" -replace "__","_" -replace "__","_"

        $parameters = $SubscriptionPlan
        $parameters.ApplicationId = $ApplicationId
        $parameters.TenantId = $TenantId
        $parameters.CertificateThumbprint = $CertificateThumbprint

        if ($parameters.ContainsKey('UniqueId'))
        {
            $parameters.Remove('UniqueId')
        }

        (Get-DscSplattedResource -ResourceName 'DefenderSubscriptionPlan' -ExecutionName $resourceTitle -Properties $parameters -NoInvoke).Invoke($parameters)
    }
}