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 $storageAccountTable = Get-AzStorageTable -Name $storageAccountSetupTableName -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,$adminUserPass) 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 } } } } } |