DscResources/JeaRoles/JeaRoles.schema.psm1
configuration JeaRoles { param ( [Parameter(Mandatory)] [hashtable[]]$Roles ) Import-Module JeaDsc Import-DscResource -ModuleName PSDesiredStateConfiguration Import-DscResource -ModuleName JeaDsc $pattern = '\\(?<Module>\w+)\\RoleCapabilities\\(?<RoleFile>\w+)\.psrc' foreach ($role in $Roles) { if (-not $role.ContainsKey('Ensure')) { $role.Ensure = 'Present' } if ($role.FunctionDefinitions) { $role.FunctionDefinitions = foreach ($functionDefinition in $role.FunctionDefinitions) { ConvertTo-Expression -Object @{ Name = $functionDefinition.Name ScriptBlock = if ($functionDefinition.ScriptBlock) { [scriptblock]::Create($functionDefinition.ScriptBlock) } elseif ($functionDefinition.FilePath) { [scriptblock]::Create((Get-Content -Path $functionDefinition.FilePath -Raw)) } } -Explore } } if ($role.VisibleCmdlets) { $role.VisibleCmdlets = foreach ($visibleCmdlet in $role.VisibleCmdlets) { if ($visibleCmdlet -is [hashtable] -or $visibleCmdlet -is [System.Collections.Specialized.OrderedDictionary]) { ConvertTo-Expression -Object @{ Name = $visibleCmdlet.Name Parameters = $visibleCmdlet.Parameters } -Explore } else { $visibleCmdlet } } } if ($role.ModulesToImport) { $role.ModulesToImport = foreach ($moduleToImport in $role.ModulesToImport) { if ($moduleToImport -is [hashtable] -or $moduleToImport -is [System.Collections.Specialized.OrderedDictionary]) { ConvertTo-Expression -Object @{ ModuleName = $moduleToImport.ModuleName ModuleVersion = $moduleToImport.ModuleVersion } -Explore } else { $moduleToImport } } } #TODO #AssembliesToLoad #EnvironmentVariables #VariableDefinitions #AliasDefinitions $role.Path -match $pattern | Out-Null $executionName = "JeaSessionConfiguration_$($Matches.Module)_$($Matches.RoleFile)" (Get-DscSplattedResource -ResourceName JeaRoleCapabilities -ExecutionName $executionName -Properties $role -NoInvoke).Invoke($role) } } |