Scripts uitvoeren op Azure VM’s met aangepaste scriptextensie

Als uw team begint met het voorzien en configureren van meer Windows Azure virtuele machines (VM’s), zult u op een gegeven moment moe worden van het steeds opnieuw uitvinden van het wiel. U heeft automatisering nodig! In dit artikel neem ik u stap voor stap mee om te beginnen met het gebruik van Azure-aangepaste scripts om Azure-scripts op uw VM’s uit te voeren.

Als uw team zich in een Windows-omgeving bevindt, is een van de beste tools om serverconfiguratie te automatiseren PowerShell. Door de Azure PowerShell-module te gebruiken, kan uw organisatie de kracht van PowerShell benutten om niet alleen on-prem-taken te automatiseren, maar ook om opdrachten op Azure-VM’s uit te voeren in bulk in plaats van één voor één.

Een functie die Microsoft ons heeft gegeven, heet de Azure-aangepaste scriptextensie. De aangepaste scriptextensie is een Azure-virtuele machine-extensie die door de VM-agent wordt uitgevoerd om willekeurige PowerShell-code tegen uw VM’s uit te voeren met behulp van de Azure-API in plaats van in te loggen op de VM of PowerShell-remoting te gebruiken.

Op deze manier opdrachten uitvoeren biedt verschillende voordelen. Opdrachten uitvoeren met behulp van de Azure-aangepaste extensie in Windows:

  • biedt verhoogde beveiliging doordat u geen netwerkpoorten hoeft te openen voor PowerShell-remoting
  • maakt eenvoudige uitvoering van PowerShell-code bij het opstarten van VM’s mogelijk
  • transfereert automatisch resources van Azure-opslag naar uw VM als onderdeel van het provisioningproces
  • Een eenvoudige manier om PowerShell-scripts uit te voeren die zijn opgeslagen in verschillende Azure-opslagaccounts

Het inschakelen van een Azure-aangepaste scripts-uitbreiding voor Windows kan op verschillende manieren worden gedaan. In dit artikel zullen we ons richten op het inschakelen van de aangepaste scripts-uitbreiding via PowerShell, maar je kunt de uitbreiding ook inschakelen via een Azure Resource Manager (ARM)-sjabloon.

Als eenvoudig voorbeeld, laten we zeggen dat je PowerShell-remoting wilt inschakelen op een Azure-VM in je abonnement. Om dit te doen, moet je de volgende opdracht lokaal op elke VM uitvoeren:

Enable-PSRemoting -Force

Laten we een aangepaste scripts-uitbreiding bouwen om dit te doen.

Het uitvoeren van een script op een VM met Azure

Eerst maak je een PowerShell-script genaamd Enable-PSRemoting.ps1 op je lokale computer met de bovenstaande opdracht erin. Dit script moet worden uitgevoerd op een Azure-VM. Hiervoor zullen we een ander klein PowerShell-script bouwen genaamd New-CustomScriptExtension.ps1 om het geüpload te krijgen in Azure en een aangepaste scripts-uitbreiding gemaakt om het uit te voeren. Voordat we te ver gaan, heb je een paar items nodig:

  • De naam van de Azure-resourcegroep en de opslagaccountnaam waarin het script wordt opgeslagen
  • De naam van de Azure-opslagcontainer
  • De VM-naam
  • De naam van de Azure-resourcegroep waarin de VM zich bevindt

Dit script kan worden opgesplitst in twee secties; het kleine PowerShell-script uploaden naar Azure en de aangepaste scripts-uitbreiding maken. Alles wat overblijft, is nodig om deze twee processen aan elkaar te lijmen.

Een PowerShell-script uploaden naar Azure

Als eerste zullen we het script Enable-PSRemoting.ps1 uploaden naar de Azure-opslagaccount ($StorageAccountName) binnen de container ($ContainerName) in de resourcegroep ($ResourceGroupName).

Copying Enable-PSRemoting.ps1 to Azure
$saParams = @{ 'ResourceGroupName' = $ResourceGroupName 'Name' = $StorageAccountName } $storageContainer = Get-AzureRmStorageAccount @saParams |Get-AzureStorageContainer -Container $ContainerName $bcParams = @{ 'File' = 'C:\Enable-PSRemoting.ps1' 'BlobType' = 'Block' 'Blob' = ' Enable-PSRemoting.ps1' } $storageContainer | Set-AzureStorageBlobContent @bcParams

Het uitvoeren van de aangepaste scriptextensie

Wanneer je New-CustomScriptExtension.ps1 uitvoert, zal dit script het script Enable-PSRemoting.ps1 uploaden naar het opgegeven Azure-opslagaccount.

Nu het script is opgeslagen in Azure, kun je het uitvoeren via de aangepaste scriptextensie voor de VM:

  • Naam: $VMName
  • Resourcegroep: $rgName
  • Opslagaccount: $saName
  • Opslagcontainer: $scName

Open een teksteditor voor New-CustomScriptExtension.ps1 en plak het onderstaande voorbeeld erin. Wanneer je dit uitvoert, wordt de Azure-aangepaste scriptextensie voor Windows uitgevoerd, die het eerder geüploade PowerShell-script Enable-PSRemoting.ps1 zal uitvoeren.

New-CustomScriptExtension.ps1
# Haal de VM op die we moeten configureren $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # Haal de sleutel van het opslagaccount op $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## Schakel de aangepaste scriptextensie in en voer het script uit $scriptParams = @{ 'ResourceGroupName' = $rgName 'VMName' = $VMName 'Name' = 'Enable-PSRemoting.ps1' 'Location' = $vm.Location 'StorageAccountName' = $saName 'StorageAccountKey' = $key 'FileName' = 'Enable-PSRemoting.ps1' 'ContainerName' = $scName 'Run' = 'Enable-PSRemoting.ps1' } Set-AzureRmVMCustomScriptExtension @scriptParams

Samenvatting

Zodra dit script is voltooid, kunt u verifiëren dat Enable-PSRemoting.ps1 is uitgevoerd op de VM en dat PowerShell-remoting succesvol is ingeschakeld. U zou nu in staat moeten zijn om Invoke-Command te gebruiken tegen uw Azure VM.

Door gebruik te maken van de Azure-aangepaste scriptextensie in Windows, hebt u nu de mogelijkheid om op afstand allerlei soorten PowerShell-scripts uit te voeren op uw Azure VM’s.

Source:
https://adamtheautomator.com/azure-run-script-on-vm/