DSCResources/SqlConfigurations/SqlConfigurations.schema.psm1

configuration SqlConfigurations {
    param (
        [Parameter()]
        [string]
        $DefaultInstanceName = 'MSSQLSERVER',

        [Parameter(Mandatory = $true)]
        [hashtable[]]
        $Options
    )

    <#
    InstanceName = [string]
    OptionName = [string]
    OptionValue = [Int32]
    [DependsOn = [string[]]]
    [PsDscRunAsCredential = [PSCredential]]
    [RestartService = [bool]]
    [RestartTimeout = [UInt32]]
    [ServerName = [string]]
    #>


    Import-DscResource -ModuleName SqlServerDsc -Name SqlConfiguration

    foreach ($option in $Options)
    {
        # Remove Case Sensitivity of ordered Dictionary or Hashtables
        $option = @{} + $option

        if ([string]::IsNullOrWhiteSpace($option.InstanceName))
        {
            $option.InstanceName = $DefaultInstanceName
        }

        $executionName = "$($option.InstanceName)_$($option.OptionName -replace '[().:\s]', '_')"
        (Get-DscSplattedResource -ResourceName SqlConfiguration -ExecutionName $executionName -Properties $option -NoInvoke).Invoke($option)
    }
}