public/Compile-AzureDSCConfig.ps1


function Compile-AzureDSCConfig {

<#
 
.SYNOPSIS
 
Compiles new Azure DSC Configs.
 
.DESCRIPTION
 
Compiles new Azure DSC Configs.
 
.PARAMETER ResourceGroupName
 
.PARAMETER AutomationAccountName
 
.PARAMETER ConfigName
 
.PARAMETER ConfigPath
 
.PARAMETER configFileName
 
.PARAMETER configDataFileName
 
.PARAMETER subscriptionName
 
.PARAMETER configParameters
 
.EXAMPLE
 
 
#>


    [cmdletbinding()]

    Param (
        [Parameter(Mandatory=$true)]
        [string]$ResourceGroupName,
        
        [Parameter(Mandatory=$true)]
        [string]$AutomationAccountName,

        [Parameter(Mandatory=$true)]
        [string]$ConfigName,

        [Parameter(Mandatory=$true)]
        [string]$ConfigPath,
        
        [Parameter(Mandatory=$true)]
        [string]$configfilename,

        [Parameter(Mandatory=$true)]
        [string]$configdatafilename,

        [Parameter(Mandatory=$false)]
        [System.Collections.Hashtable]$ConfigParameters


    )

        # check to see if local token exists (ran Login-AzureRMAccount)
        if (($null -eq (Get-AzureRmContext).Account)) {
            Write-Warning "Please run < Login-AzureRMAccount > first to create a session token...exiting."
            break
        } 

        
        # build configLiteralPath
        Try {
            $ConfigLiteralPath = Get-ChildItem $ConfigPath -Include $configfilename -Recurse -ErrorAction Stop -Verbose
            $ConfigLiteralPath = $ConfigLiteralPath.FullName
        }
        Catch {
            $error[0].Exception
            break
        }
        
        Try {
        
            $localconfig = Import-LocalizedData -BaseDirectory $ConfigPath -FileName $configdatafilename -ErrorAction Stop -Verbose
        }
        Catch {
            $error[0].Exception
            break
        }
    
        Try {
            Import-AzureRmAutomationDscConfiguration -SourcePath $ConfigLiteralPath -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName -Published -Force -ErrorAction Stop -Verbose
            }
        Catch {
                $error[0].Exception
                break
        }
    
        Try {
            if ($null -eq $ConfigParameters) {
                $compile = Start-AzureRmAutomationDscCompilationJob -ConfigurationName $ConfigName -ConfigurationData $localconfig -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName -Verbose -ErrorAction Stop
            }
            else {
                $compile = Start-AzureRmAutomationDscCompilationJob -ConfigurationName $ConfigName -ConfigurationData $localconfig -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName -Parameters $ConfigParameters -Verbose -ErrorAction Stop
            }
            
        }
        Catch {
            $error[0].Exception
            break
        }

        
        Do {
            
            Try {
                $localcompilejob = Get-AzureRmAutomationDscCompilationJob -ResourceGroupName $ResourceGroupName -AutomationAccountName $AutomationAccountName -Id $compile.Id -ErrorAction Stop -Verbose
                Write-Verbose "Compilation job for $($compile.ConfigurationName) not complete."
                Write-Verbose "Status is $($localcompilejob.Status)"
                Start-Sleep -Seconds 5 -Verbose
            }
        
            Catch {
                $error[0].excetion
                break    
            }
        }
        
        Until (($localcompilejob.Status -eq 'Completed') -or ($localcompilejob.Status -eq 'Suspended'))
        
        if (($localcompilejob.Status -ne 'Completed')) {
            Write-Warning 'Job terminated with errors!'
            return $localcompilejob.Exception
        }
        else {
            return $localcompilejob
        }
}