DscResources/SecurityPolicies/SecurityPolicies.schema.psm1

# see https://github.com/dsccommunity/SecurityPolicyDsc
configuration SecurityPolicies
{
    param
    (
        [Parameter()]
        [Hashtable[]]
        $AccountPolicies,

        [Parameter()]
        [Hashtable[]]
        $SecurityOptions,

        [Parameter()]
        [Hashtable[]]
        $UserRightsAssignments,

        [Parameter()]
        [String]
        $SecurityTemplatePath
    )

    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName SecurityPolicyDsc

    if( $null -ne $AccountPolicies )
    {
        foreach( $policy in $AccountPolicies )
        {
            $executionName = "secPolAcc_" + ($policy.Name -replace '\(|\)|\.|:| ', '')
            (Get-DscSplattedResource -ResourceName AccountPolicy -ExecutionName $executionName -Properties $policy -NoInvoke).Invoke( $policy )
        }
    }
    
    if( $null -ne $SecurityOptions )
    {
        foreach( $option in $SecurityOptions )
        {
            $executionName = "secPolOpt_" + ($option.Name -replace '\(|\)|\.|:| ', '')
            (Get-DscSplattedResource -ResourceName SecurityOption -ExecutionName $executionName -Properties $option -NoInvoke).Invoke( $option )
        }
    }

    if( $null -ne $UserRightsAssignments )
    {
        foreach( $assign in $UserRightsAssignments )
        {
            if( -not $assign.ContainsKey( 'Ensure' ) )
            {
                $assign.Ensure = 'Present'
            }

            if ($null -eq $assign.Identity)
            {
                throw "UserRightsAssignment: Attribute 'Identity' of policy '$($assign.Policy)' is missing and must have a value (specify an empty value with '')."
            }

            $executionName = "secPolUsr_" + ($assign.Policy -replace '\(|\)|\.|:| ', '')
            (Get-DscSplattedResource -ResourceName UserRightsAssignment -ExecutionName $executionName -Properties $assign -NoInvoke).Invoke( $assign )
        }
    }

    if( -not [String]::IsNullOrWhiteSpace($SecurityTemplatePath) )
    {
        $securityTemplate = @{
            Path             = $SecurityTemplatePath
            IsSingleInstance = 'Yes'
        }
        (Get-DscSplattedResource -ResourceName SecurityTemplate -ExecutionName "secTemplate" -Properties $securityTemplate -NoInvoke).Invoke( $securityTemplate )
    }
}