public/Register-AzureDSCNode.ps1
function Register-AzureDSCNode { <# .SYNOPSIS Register existing nodes to Azure DSC. .DESCRIPTION Register-AzureDSCNode cmdlet registers the Azure RM VM as DSC node in Azure automation account. Make sure that node configuration for the Azure RM VM you're trying to register, must be available in the resource group as automation account. .PARAMETER nodeName specify the VMname to register to AzureDSC. .PARAMETER NodeResourceGroupName Specify the resource group name of the VM .PARAMETER DSCResourceGroupName Specify the resource group name that contains the automation account associated with DSC. .PARAMETER AutomationAccount Specify the Automation account name .PARAMETER location Specify the Azure Region where the target VM is located. .PARAMETER NodeConfigurationName Specify the node configuration name, please use the format mentioned above with subscriptionshortname.VMname .PARAMETER subscriptionName Specify whether to wait for the output or .EXAMPLE Register-AzureDSCNode -NodeName <VMname> -NodeResourceGroupName <ResourcegroupName> -DSCResourceGroupName <ResrouceGroupName> -AutomationAccount <Automationaccountname> -location <Location> -NodeConfigurationName <subscriptionshortname.VMname> -SubscriptionName <sunscriptionname> -Verbose #> [CmdletBinding()] Param ( [Parameter(Mandatory=$true)] [string]$NodeName, [Parameter(Mandatory=$true)] [string]$NodeResourceGroupName, [Parameter(Mandatory=$true)] [string]$DSCResourceGroupName, [Parameter(Mandatory=$true)] [string]$AutomationAccount, [Parameter(Mandatory=$true)] [string]$location, [Parameter(Mandatory=$true)] [string]$NodeConfigurationName, [Parameter(Mandatory=$false)] [bool]$wait = $false, [Parameter(Mandatory=$false)] [string]$ConfigurationMode = 'ApplyAndAutoCorrect', [Parameter(Mandatory=$false)] [bool]$RebootNodeIfNeeded = $false, [Parameter(Mandatory=$false)] [string]$DSCVersion = '2.26' ) Process { Try { $AccountInfo = Get-AzureRmAutomationRegistrationInfo -ResourceGroupName $DSCResourceGroupName -AutomationAccountName $AutomationAccount -ErrorAction Stop -Verbose } Catch { $error[0] break } # extension static values $privateConfig = @" { "RegistrationUrl": "$AccountInfo.Endpoint", "RegistrationKey": "$AccountInfo.PrimaryKey" } "@ $publicConfig = '{ "Mode": "Register" }' $extName = "Microsoft.Powershell.DSC" $publisher = "Microsoft.Powershell" $extType = "DSC" # Set-AzureRMVMExtension cmdlet params $ExtensionParams = @{ ResourceGroupName = $NodeResourceGroupName; VMName = $NodeName; Location = $location; Name = $extName; Publisher = $publisher; ExtensionType = $extType; TypeHandlerVersion = $DSCVersion; SettingString = $publicConfig; ProtectedSettingString = $privateConfig; ErrorAction = 'Stop' } Try { $setExtension = Set-AzureRmVMExtension @ExtensionParams -Verbose Write-Output "Success" } Catch { $error[0] break } #Register-AzureRMAutomationDSCNode params $RegistrationParams = @{ AzureVMName = $NodeName; NodeConfigurationName = $NodeConfigurationName; ConfigurationMode = $ConfigurationMode; RebootNodeIfNeeded = $RebootNodeIfNeeded; AzureVMResourceGroup = $NodeResourceGroupName; AzureVMLocation = $location; ResourceGroupName = $DSCResourceGroupName; AutomationAccountName = $AutomationAccount; ErrorAction = 'Stop' } Try { If ($wait){ $RegisterNode = Register-AzureRmAutomationDscNode @RegistrationParams -Verbose } else { $job = Start-Job -Name ("DSC-Registration-" + $NodeName) -ScriptBlock {Register-AzureRmAutomationDscNode @RegistrationParams -Verbose} $jobinfo = New-Object -TypeName psobject -Property @{ "Job Name" = $job.Name "Job Id" = $job.Id "Job State"= $job.State } $RegisterNode = $jobinfo } } Catch { $error[0] break } return $RegisterNode } } |