myActiveDirectory.test.ps1

$ConfigurationData = @{
    AllNodes = @(@{ NodeName = 'localhost'; PSDscAllowDomainUser = $true; PsDscAllowPlainTextPassword = $true; })
    
    ADSites = @(
    @{
        Name = 'A01'; Description = 'Site A01'; Location = 'Lille'; Protected = $false; Subnets = @(
        @{ Name = '10.10.10.0/24'; Description = 'Room 01'; Location = 'Building East'; Protected = $false; },
        @{ Name = '10.10.11.0/24'; Description = 'Room 02'; Location = 'Building East'; Protected = $false; },
        @{ Name = '10.10.12.0/24'; Description = 'Room 03'; Location = 'Building North'; Protected = $false; }
        )
    },
    @{
        Name = 'A02'; Description = 'Site A02'; Location = 'Brussels'; Protected = $false; Subnets = @(
        @{ Name = '10.10.13.0/24'; Description = 'Room 04'; Location = 'Building South'; Protected = $false; },
        @{ Name = '10.10.14.0/24'; Description = 'Room 05'; Location = 'Building West'; Protected = $false; }
        )
    },
    @{
        Name = 'A03'; Description = 'Site A03'; Location = 'London'; Protected = $false; Subnets = @(
        @{ Name = '10.10.15.0/24'; Description = 'Room 06'; Location = 'Building West'; Protected = $false; }
        )
    }
    ) #$ADSites
} #$ConfigurationData


Configuration myActiveDirectory01
{
    param
    (
        [Parameter(Mandatory)]
        [PSCredential]$DomainAdminCreds
    )
    Import-DscResource -ModuleName myActiveDirectory
    
    $ADSites = $ConfigurationData.ADSites
    
    node localhost
    {
        foreach ($ADSite in $ADSites)
        {
            Write-Verbose "Site: $($ADSite.Name) $($ADSite.Description) $($ADSite.Location) $($ADSite.Protected)"
            myAdSite "AdSite-$($ADSite.Name)"
            {
                Name = $ADSite.Name
                Location = $ADSite.Location
                Description = $ADSite.Description
                Protected = $ADSite.Protected
                DomainAdminCreds = $DomainAdminCreds
            }
            
            foreach ($Subnet in $ADSite.Subnets)
            {
                Write-Verbose " Subnet: $($Subnet.Name) $($Subnet.Description) $($Subnet.Location) $($Subnet.Protected)"
                myAdSubnet "AdSubnet-$($Subnet.Name)"
                {
                    Name = $Subnet.Name
                    Site = $ADSite.Name
                    Location = $Subnet.Location
                    Description = $Subnet.Description
                    Protected = $Subnet.Protected
                    DomainAdminCreds = $DomainAdminCreds
                }
            } #foreach ($Subnet in $ADSite.Subnets)
        } #foreach ($ADSite in $ADSites)
    } #node localhost
} #Configuration Test01

if ($DomainAdminCreds -eq $null) { $DomainAdminCreds = Get-Credential -UserName 'DSCDOMAIN\administrator' -Message 'Domain Admin Credentials' }

myActiveDirectory01 -ConfigurationData $ConfigurationData -Verbose -OutputPath 'C:\DSC\myActiveDirectory01' -DomainAdminCreds $DomainAdminCreds
Start-DscConfiguration -Wait -Force -Verbose -Path 'C:\DSC\myActiveDirectory01'