Vertalingen: "English" |

Scripts uitvoeren op meerdere Azure VMs

Delen op:

Moet je snel een script uitvoeren op meerdere Azure VMs? Deze handleiding laat zien hoe je dit kunt doen met behulp van Azure RunCommand.

Voorvereisten

Voordat je begint, zorg ervoor dat je beschikt over:

  • PowerShell Az-modules geïnstalleerd
  • Actieve Azure-authenticatie
  • De juiste machtigingen om de doel-VMs te benaderen en aan te passen

Praktijkvoorbeeld: Lokale Windows-accounts Aanmaken

In deze handleiding behandelen we een praktisch voorbeeld van het aanmaken van lokale Windows-accounts op meerdere Azure VMs. We verdelen de implementatie in twee hoofdcomponenten:

1. Script voor het Aanmaken van Lokale Accounts

Dit script wordt rechtstreeks op elke doel-VM uitgevoerd om het lokale gebruikersaccount aan te maken:

 1$Password = ConvertTo-SecureString "<jouw wachtwoord hier of beter nog, gebruik een invoerparameter>" -AsPlainText -Force
 2$UserParams = @{
 3    Name = "<jouw gebruikersnaam hier>"
 4    Password = $Password
 5    FullName = "<Volledige naam>"
 6    Description = "Lokaal gebruikersaccount aangemaakt via PowerShell"
 7    PasswordNeverExpires = $true
 8    UserMayNotChangePassword = $false
 9}
10
11try {
12    New-LocalUser @UserParams
13    Write-Host "Gebruikersaccount 'inspark' succesvol aangemaakt!"
14    Add-LocalGroupMember -Group "Administrators" -Member "inspark"
15    Write-Host "Gebruiker 'inspark' toegevoegd aan Administrators groep"
16} catch {
17    Write-Error "Aanmaken gebruikersaccount mislukt: $_" 
18}
19
20Get-LocalUser -Name $UserParams.Name | Select-Object Name, Enabled, PasswordExpires, LastLogon

2. Script voor VM-uitvoering

Dit script zorgt voor de uitvoering van ons account-aanmaakscript op meerdere VMs:

 1# Filter VMs op basis van tags
 2$vms = Get-AzVM | Where-Object { 
 3    $_.Tags -and 
 4    $_.Tags["Tag key"] -eq "Tag value" 
 5}
 6
 7# Voer script uit op elke VM
 8foreach($vm in $vms) {
 9    Write-Host "Lokale beheerder aanmaken op VM: $($vm.name)"
10    try {
11        Set-AzVMRunCommand `
12         -ResourceGroupName $vm.resourceGroupName `
13        -VMName $vm.name `
14        -Location $vm.location `
15        -RunCommandName "RunCommandName" `
16        SourceScript $script
17    }
18    catch {
19        Write-Error "Uitvoeren script op VM $($vm.name) mislukt: $_"
20    }
21    
22    # Controleer uitvoeringsstatus
23    Try {
24        $result = Get-AzVMRunCommand `
25        -ResourceGroupName $vm.resourceGroupName `
26        -VMName $vm.name `
27        -RunCommandName "RunCommandName" `
28        -Expand InstanceView
29    }
30    catch {
31        Write-Error "Ophalen script uitvoeringsstatus op VM $($vm.name) mislukt: $_"
32    }
33    Write-Host "Script uitvoeringsstatus op VM $($vm.name)"
34    $result.InstanceView
35}

Complete Implementatie

Hier is het complete script dat beide componenten combineert:

 1# Definieer het script dat op VMs wordt uitgevoerd met here-string
 2$script = @'
 3$Password = ConvertTo-SecureString "<jouw wachtwoord hier of beter nog, gebruik een invoerparameter>" -AsPlainText -Force
 4$UserParams = @{
 5    Name = "<jouw gebruikersnaam hier>"
 6    Password = $Password
 7    FullName = "<Volledige naam>"
 8    Description = "Lokaal gebruikersaccount aangemaakt via PowerShell"
 9    PasswordNeverExpires = $true
10    UserMayNotChangePassword = $false
11}
12
13try {
14    New-LocalUser @UserParams
15    Write-Host "Gebruikersaccount 'inspark' succesvol aangemaakt!"
16    Add-LocalGroupMember -Group "Administrators" -Member "inspark"
17    Write-Host "Gebruiker 'inspark' toegevoegd aan Administrators groep"
18} catch {
19    Write-Error "Aanmaken gebruikersaccount mislukt: $_" 
20}
21
22Get-LocalUser -Name $UserParams.Name | Select-Object Name, Enabled, PasswordExpires, LastLogon
23'@
24
25# Laad en filter VMs
26$vms = Get-AzVM | Where-Object { 
27    $_.Tags -and 
28    $_.Tags["Tag key"] -eq "Tag value" 
29}
30
31# Uitvoeren op elke VM
32foreach($vm in $vms) {
33    Write-Host "Lokale beheerder aanmaken op VM: $($vm.name)"
34    try {
35        Set-AzVMRunCommand `
36         -ResourceGroupName $vm.resourceGroupName `
37        -VMName $vm.name `
38        -Location $vm.location `
39        -RunCommandName "RunCommandName" `
40        SourceScript $script
41    }
42    catch {
43        Write-Error "Uitvoeren script op VM $($vm.name) mislukt: $_"
44    }
45    Try {
46        $result = Get-AzVMRunCommand `
47        -ResourceGroupName $vm.resourceGroupName `
48        -VMName $vm.name `
49        -RunCommandName "RunCommandName" `
50        -Expand InstanceView
51    }
52    catch {
53        Write-Error "Ophalen script uitvoeringsstatus op VM $($vm.name) mislukt: $_"
54    }
55    Write-Host "Script uitvoeringsstatus op VM $($vm.name)"
56    $result.InstanceView
57}

Belangrijke Functies

  1. Tag-gebaseerd Filteren: Specifieke VMs targeten met Azure-tags
  2. Statusverificatie: Ingebouwde verificatie van scriptuitvoeringsstatus
  3. Veilige Accountcreatie: Correct beveiligde lokale accountcreatie met juiste groepslidmaatschap

Beveiligingsoverwegingen

  • Gebruik altijd veilige wachtwoordbeheerpraktijken
  • Overweeg Azure Key Vault password manager voor opslag van inloggegevens
  • Implementeer correcte toegangscontroles voor het automatiseringsaccount
  • Voer regelmatig audits en reviews uit van lokale beheerdersaccounts

Reacties

comments powered by Disqus (not working in Firefox)