Private/Module/Set-ModuleParameters.ps1


Function Set-ModuleParameters {
<#
.Description
Set-ModuleParamters is used by SRDSC to store the global configuration that's used within the module.
When the module is loaded the first time, it's statically loaded and the paramters needed for the configuration
is exported to C:\ProgramData\. Each subsequent time following that, the module loads the configuration
from the C:\ProgramData programatically.

.PARAMETER DatumModulePath

Datum Module File Path

.PARAMETER ScriptRunnerModulePath

SRDSC Module Path

.PARAMETER ScriptRunnerServerPath

Script Runner Server Script Repository Path

.PARAMETER PullServerRegistrationKey

Pull Server Registration Key

.PARAMETER DSCPullServer

Pull Server Name

.PARAMETER DSCPullServerHTTP

Pull Server URL

.PARAMETER ScriptRunnerURL

Script Runner URL Endpoint

.EXAMPLE

$CliXML = Import-Clixml $ConfigurationPath

$params = @{
    DatumModulePath = $CliXML.DatumModulePath
    ScriptRunnerModulePath = $CliXML.ScriptRunnerModulePath
    ScriptRunnerServerPath = $CliXML.ScriptRunnerServerPath
    PullServerRegistrationKey = $CliXML.PullServerRegistrationKey
    DSCPullServer = $CliXML.DSCPullServer
    DSCPullServerHTTP = $CliXML.DSCPullServerHTTP
    ScriptRunnerURL = $CliXML.ScriptRunnerURL
    CertificateThumbprint = $CliXML.CertificateThumbprint
}

# Load the Global Settings
Set-ModuleParameters @params

.SYNOPSIS
Set's Global Configuration paramters used by the SRDSC Module.
#>
    
    [CmdletBinding()]
    param (
        [Parameter(Mandatory)]
        [String]
        $DatumModulePath,
        [Parameter(Mandatory)]
        [String]        
        $ScriptRunnerModulePath,
        [Parameter(Mandatory)]
        [String]        
        $ScriptRunnerServerPath,
        [Parameter(Mandatory)]
        [String]        
        $PullServerRegistrationKey,
        [Parameter(Mandatory)]
        [String]        
        $DSCPullServer,
        [Parameter(Mandatory)]
        [String]        
        $DSCPullServerHTTP,
        [Parameter(Mandatory)]
        [String]
        $ScriptRunnerURL,
        [Parameter(Mandatory)]
        [String]
        $CertificateThumbprint        
    )

    $Global:SRDSC = [PSCustomObject]@{

        ScriptRunner = [PSCustomObject]@{
            ScriptRunnerURL = $ScriptRunnerURL
            ScriptRunnerDSCRepository = '{0}\ScriptMgr\DSC' -f $ScriptRunnerServerPath
            NodeTemplateFile = '{0}\Template\NodeTemplateConfiguration.yml' -f $ScriptRunnerModulePath                           
            NodeRegistrationFile = '{0}\Configuration\NodeRegistration.clixml' -f $ScriptRunnerModulePath
            ScriptTemplates = [PSCustomObject]@{
                NewVMTemplate = '{0}\Template\New-VirutalMachine.template.ps1' -f $ScriptRunnerModulePath
            }
        }
    
        DSCPullServer = [PSCustomObject]@{
            DSCPullServerName = $DSCPullServer
            # Use a UNC path since the pull server could be on a remote host
            DSCPullServerMOFPath = 'C$\Program Files\WindowsPowerShell\DscService\Configuration\'
            DSCPullServerResourceModules = 'C$\Program Files\WindowsPowerShell\DscService\Modules\'
            DSCPullServerWebAddress = '{0}://{1}:8080' -f $DSCPullServerHTTP, $DSCPullServer
            PullServerRegistrationKey = $PullServerRegistrationKey
            CertificateThumbprint = $CertificateThumbprint
        }

        DatumModule = [PSCustomObject]@{
            
            DatumModulePath = $DatumModulePath
            DatumTemplates = '{0}\SRDSCTemplates' -f $DatumModulePath
            NodeTemplateFile = '{0}\SRDSCTemplates\NodeTemplateConfiguration.yml' -f $DatumModulePath
            NodeRegistrationFile = '{0}\NodeRegistration.clixml' -f $DatumModulePath
            ConfigurationPath = '{0}\' -f $DatumModulePath
            RenamedMOFOutput = '{0}\output\RenamedMOF' -f $DatumModulePath
            SourcePath = '{0}\source\' -f $DatumModulePath
            ConfigurationFile = '{0}\source\Datum.yml' -f $DatumModulePath
            CompiledMOFOutput = '{0}\output\MOF' -f $DatumModulePath
            CompileCompressedModulesOutput = '{0}\output\CompressedModules' -f $DatumModulePath
            BuildPath = '{0}\build.ps1' -f $DatumModulePath
            YAMLSortOrder = @(
                'NodeName'
                'Environment'
                'Role'
                'Description'
                'Location'
                'Baseline'
                'ComputerSettings'
                'NetworkIpConfiguration'
                'PSDscAllowPlainTextPassword'
                'PSDscAllowDomainUser'
                'LcmConfig'
                'DscTagging'
            )
        }
    
    }

}