DscResources/Scripts/Scripts.schema.psm1

configuration Scripts {
    param (
        [Parameter(Mandatory)]
        [hashtable[]]$Items
    )
    
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xPSDesiredStateConfiguration

    foreach ($item in $Items)
    {
        # remove case sensivity from hashtable
        $item = @{} + $item

        if( $null -ne $item.Params )
        {
            $params = '$params = ''' + ($item.Params | ConvertTo-Json -Compress) + "' | ConvertFrom-JSON;`n"
        }

        if( [string]::IsNullOrWhiteSpace($item.GetScript) )
        {
            $item.GetScript = "@{ Result = 'N/A' }"
        }
        elseif( $null -ne $params )
        {
            $item.GetScript = $params + $item.GetScript
        }

        if( [string]::IsNullOrWhiteSpace($item.SetScript) )
        {
            $item.SetScript = "Write-Error 'SetScript is not implemented.'"
        }
        elseif( $null -ne $params )
        {
            $item.SetScript = $params + $item.SetScript
        }

        if( $null -ne $params )
        {
            $item.TestScript = $params + $item.TestScript
        }

        $executionName = "Script_$($item.Name)"

        [void]$item.Remove('Name')
        [void]$item.Remove('Params')
        
        (Get-DscSplattedResource -ResourceName xScript -ExecutionName $executionName -Properties $item -NoInvoke).Invoke($item)
    }
}