public/Compile-AzureDSCConfig.ps1
function Compile-AzureDSCConfig { [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=$true)] [string]$subscriptionname, [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 } # Get subscription name Try { Select-AzureRmSubscription -SubscriptionName $subscriptionName -ErrorAction Stop -Verbose | Out-Null } Catch { $error[0].Exception 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 } } |