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

    }

}