public/Register-AzureDSCNode.ps1
function Register-AzureDSCNode { [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)] [string]$ConfigurationMode = 'ApplyAndAutoCorrect', [Parameter(Mandatory=$false)] [bool]$RebootNodeIfNeeded = $false, [Parameter(Mandatory=$false)] [string]$DSCVersion = '2.26', [Parameter(Mandatory=$true)] [string]$SubscriptionName ) Process { # 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 } 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 } 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 { $RegisterNode = Register-AzureRmAutomationDscNode @RegistrationParams -Verbose } Catch { $error[0] break } return $RegisterNode } } |