DscResources/WindowsEventForwarding/WindowsEventForwarding.schema.psm1

configuration WindowsEventForwarding
{
    Param (
        [Parameter(Mandatory)]
        [ValidateSet( 'Collector', 'Source')]
        [String]$NodeType,

        [Parameter()]
        [String]$CollectorName,

        [Parameter()]
        [Hashtable[]]$Subscriptions
    )
    
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xWindowsEventForwarding
   
    if( $NodeType -eq 'Collector' )
    {
        if( $null -eq $Subscriptions -or $Subscriptions.Count -lt 1 )
        {
            throw 'ERROR: A Collector node requires at least one subscription definition.'
        }

        xWEFCollector wefCollector
        {
            Ensure = "Present"
            Name   = "WindowsEventCollector"
        }

        foreach ($subscription in $Subscriptions)
        {   
            $subscription.DependsOn = '[xWEFCollector]wefCollector'

            $executionName = "wefsub_$($subscription.SubscriptionID -replace '[().:\s]', '')"
            (Get-DscSplattedResource -ResourceName xWEFSubscription  -ExecutionName $executionName -Properties $subscription -NoInvoke).Invoke($subscription)
        }
    }
    elseif( $NodeType -eq 'Source' )
    {
        if( $null -ne $Subscriptions -and $Subscriptions.Count -gt 0 )
        {
            throw 'ERROR: Subscription definitions are not supported on source nodes.'
        }

        if( [string]::IsNullOrWhiteSpace($CollectorName) )
        {
            throw 'ERROR: A CollectorName is required on source nodes.'
        }

        Group addCollectorToLocalEventLogReadersGroup
        {
            GroupName        = 'Event Log Readers'
            Ensure           = 'Present'
            MembersToInclude = "$CollectorName"
        }
    }
}