Private/Start-CustomVMUpdate.ps1

# Will be called in VM
function Global:Start-CustomVMUpdate {
    [CmdletBinding()]
    <#
    .SYNOPSIS
        ...
    .DESCRIPTION
        ...
    #>

    param(
        [Parameter(Mandatory = $true, Position = 1)]
        [string]
        $ObjectName,
        [Parameter(Mandatory = $false, Position = 2)]
        [switch]
        $IsScaleSet,
        [Parameter(Mandatory = $true, Position = 3)]
        [string]
        $ResourceGroupName,
        [Parameter(Mandatory = $true, Position = 4)]
        [string]
        $StorageAccountName
    )
    process {
        Write-Host "Starting auto update..."

        # Uses managed identity to connect to Azure Account
        Connect-FromMachineToAzAccount
        
        Write-Host "Loading pending commands..."
        $storageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName
        $storageAccountContext = $storageAccount.Context
        # TODO: Switch from hardcoded-value to new entry in "Properties.ps1"
        $storageAccountTable = Get-AzStorageTable -Name 'Setup' -Context $storageAccountContext.Context
        $cloudTable = $storageAccountTable.CloudTable        
        $rows = Get-AzTableRow -Table $cloudTable | Where-Object { ($_.ExecutedBy -notlike "*$env:computername*") -and (($_.ObjectName -eq 'NULL') -or ($_.ObjectName -eq $ObjectName)) }
        foreach ($row in $rows) {
            Write-Host "Handling Command: $($row.Command)"
            switch ($row.Command) {
                'JoinDomain' {
                    Write-Host "Loading credentials..."
                    # Load Admin Credentials from KeyVault
                    $adminUserName = (Get-AzKeyVaultSecret -VaultName "SetupValues" -Name 'DomainAdminUsername').SecretValueText
                    $adminUserPass = (Get-AzKeyVaultSecret -VaultName "SetupValues" -Name 'DomainAdminPassword').SecretValueText
                    $domainName = (Get-AzKeyVaultSecret -VaultName "SetupValues" -Name 'DomainName').SecretValueText                    
                    $domainAdminCredentials = New-Object System.Management.Automation.PSCredential ($adminUserName, (ConvertTo-SecureString -String $adminUserPass -AsPlainText -Force))
                    if ($row.RestartNecessary -eq $true) {
                        # Update Command Table, because machine will be restartet in a moment
                        Set-StorageCommandExecuted -CommandRow $row -ExecutedByName $env:computername
                    }
                    Add-Computer -DomainName $domainName -Credential $domainAdminCredentials -Restart -Force | Out-Null
                }
                default {
                    Write-Host "Not implemented yet."
                }                
            }
            if ($row.RestartNecessary -eq $true) {
                break       
            }
        }
    }
}