Blog

Programmgesteuertes Erstellen einer Visual Studio Virtual Machine auf Azure

Pascal Naber

Aktualisiert Oktober 22, 2025
4 Minuten

Es gibt mehrere Möglichkeiten, eine Entwicklungsumgebung mit Visual Studio auf Azure zu erstellen. Sie kann manuell im Azure-Portal oder programmatisch mit PowerShell erstellt werden.

Manuell im Azure-Portal

Sie können im Azure-Portal innerhalb weniger Minuten eine Entwicklungsumgebung erstellen. Wählen Sie im Azure-Portal das Image mit Visual Studio aus, das am besten zu Ihren Anforderungen passt. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version, die im Azure Portal ausgewählt werden kann, Visual Studio 2015 mit Update 2 und Azure SDK 2.9. Es ist einfach, ein Image im Portal auszuwählen. Schauen wir uns nun an, wie dies im Code geschehen kann.

Virtuelle Maschinen - Microsoft Azure

Programmatisch mit PowerShell

Wenn Sie eine virtuelle Maschine programmatisch erstellen möchten, ist PowerShell zusammen mit einer ARM-Vorlage Ihr Freund.

Diese ARM-Vorlage zum Beispiel hilft Ihnen bei der Erstellung eines Images mit Visual Studio. Die ARM-Vorlage enthält eine Liste von SKUs, aus der Sie wählen können, aber leider ist die Version Visual Studio 2015 mit Update 2 und Azure SDK 2.9. nicht in der Liste der SKUs enthalten. Woher sollen Sie wissen, welche SKU Sie als Parameter übergeben müssen? Der Name der SKU ist im Azure-Portal nicht sichtbar.

Dieser Artikel beschreibt die Schritte zum Abrufen einer SKU. Wenn Sie PowerShell verwenden, sind die im Artikel erwähnten Cmdlets Get-AzureVMImagePublisher, Get-AzureVMImageOffer und Get-AzureVMImageSku nicht verfügbar. Sie sollten die RM-Versionen der Cmdlets verwenden.

Um eine vollständige Liste aller Images zu erhalten, die Visual Studio anbietet, führen Sie die folgende Zeile aus:

Get-AzureRmVMImageSku -Standort Westeuropa -Herausgeber "MicrosoftVisualStudio" -Angebot "VisualStudio" | Skus auswählen

Das Ergebnis ist die folgende Liste der SKUs, die Visual Studio anbieten.

Skus
  ----
  2013-Community-Update-4-ws2012-az25-ntvs10
  2013-Community-Update-4-ws2012-az26
  2013-Community-Update-4-ws2012-az26-cor31
  2013-Premium-Update-4-win81
  2013-Premium-Update-4-win81n-az26
  2013-Premium-Update-4-ws2012-az26
  2013-Professional-Update-4-ws2012-az26
  2013-Ultimate-Update-4-win81
  2013-Ultimate-Update-4-win81n-az26
  2013-Ultimate-Update-4-ws2012-az26
  2015-Gemeinschaft-RC
  2015-Enterprise-RC
  2015-Enterprise-Win10Tools
  2015-Professional-RC
  CoreCLR
  VS-2013-Comm-VSU5-AzureSDK-2.8-Win8.1-N-x64
  VS-2013-Comm-VSU5-AzureSDK-2.8-WS2012R2
  VS-2013-Comm-VSU5-Cordova-CTP3.2-AzureSDK-2.8-WS2012R2
  VS-2013-Community-VSU5-AzureSDK-2.7-Win8.1-N-x64
  VS-2013-Community-VSU5-AzureSDK-2.7-WS2012R2
  VS-2013-Community-VSU5-Cordova-CTP3.2-AzureSDK-2.7-WS2012R2
  VS-2013-Prem-VSU5-AzureSDK-2.8-Win8.1-N-x64
  VS-2013-Prem-VSU5-AzureSDK-2.8-WS2012R2
  VS-2013-Premium-VSU5-AzureSDK-2.7-SQL-WS2012R2
  VS-2013-Premium-VSU5-AzureSDK-2.7-Win8.1-N-x64
  VS-2013-Premium-VSU5-AzureSDK-2.7-WS2012R2
  VS-2013-Ultimate-VSU5-AzureSDK-2.7-SQL-WS2012R2
  VS-2013-Ultimate-VSU5-AzureSDK-2.7-Win8.1-N-x64
  VS-2013-Ultimate-VSU5-AzureSDK-2.7-WS2012R2
  VS-2013-Ultimate-VSU5-AzureSDK-2.8-Win8.1-N-x64
  VS-2013-Ultimate-VSU5-AzureSDK-2.8-WS2012R2
  VS-2015-Com-VSU1-AzureSDK-2.8-WS2012R2
  VS-2015-Comm-AzureSDK-2.8-Cordova-Win8.1-N-x64
  VS-2015-Comm-AzureSDK-2.8-WS2012R2
  VS-2015-Comm-AzureSDK-2.8-WS2012R2.1
  VS-2015-Comm-AzureSDK-2.8-WS2012R2.2
  VS-2015-Comm-VSU1-AzureSDK-2.8-W10T-1511-N-x64
  VS-2015-Comm-VSU1-AzureSDK-2.8-W10T-N-x64
  VS-2015-Comm-VSU1-AzureSDK-2.8-WS2012R2
  VS-2015-Comm-VSU1-AzureSDK-2.8-WS2012R2.1
  VS-2015-Comm-VSU2-AzureSDK-29-W10T-N-x64
  VS-2015-Comm-VSU2-AzureSDK-29-WS2012R2
  VS-2015-Community-AzureSDK-2.7-Cordova-Win8.1-N-x64
  VS-2015-Community-AzureSDK-2.7-W10T-Win10-N
  VS-2015-Community-AzureSDK-2.7-WS2012R2
  VS-2015-Ent-AzureSDK-2.8-Cordova-Win8.1-N-x64
  VS-2015-Ent-AzureSDK-2.8-WS2012R2
  VS-2015-Ent-AzureSDK-2.8-WS2012R2.2
  VS-2015-Ent-VSU1-AzureSDK-2.8-W10T-1511-N-x64
  VS-2015-Ent-VSU1-AzureSDK-2.8-W10T-N-x64
  VS-2015-Ent-VSU1-AzureSDK-2.8-WS2012R2
  VS-2015-Ent-VSU1-AzureSDK-2.8-WS2012R2.1
  VS-2015-Ent-VSU1-AzureSDK-2.8-WS2012R2.2
  VS-2015-Ent-VSU2-AzureSDK-29-W10T-N-x64
  VS-2015-Ent-VSU2-AzureSDK-29-WS2012R2
  VS-2015-Enterprise-AzureSDK-2.7-Cordova-Win8.1-N-x64
  VS-2015-Enterprise-AzureSDK-2.7-W10T-Win10-N
  VS-2015-Enterprise-AzureSDK-2.7-WS2012R2
  VS-2015-Pro-AzureSDK-2.8-Cordova-Win8.1-N-x64
  VS-2015-Pro-VSU1-AzureSDK-2.8-W10T-1511-N-x64
  VS-2015-Pro-VSU1-AzureSDK-2.8-W10T-N-x64
  VS-2015-Pro-VSU1-AzureSDK-2.8-WS2012R2.2
  VS-2015-Professional-AzureSDK-2.7-Cordova-Win8.1-N-x64
  VS-2015-Professional-AzureSDK-2.7-W10T-Win10-N
  VS-Next-Preview-Ent-AzureSDK-2.9-W10-N
  VS-Next-Preview-Ent-AzureSDK-2.9-WS2012R2

 

In meinem Fall kann ich zwischen Visual Studio Enterprise oder Community und zwischen Windows 10 oder Windows 2012 R2 wählen. Ich habe die folgende SKU ausgewählt:

VS-2015-Ent-VSU2-AzureSDK-29-W10T-N-x64.

Wenn Sie diese SKU mit folgendem Skript an die oben erwähnte ARM-Vorlage übergeben:

# Anmeldung bei Azure
Login-AzureRmAccount
# Wählen Sie optional das richtige Abonnement
Select-AzureRmSubscription -SubscriptionId "<IhreSubscriptionId>"
# Parameter zum Erstellen eines Visual Studio Image
$ResourceGroupName = "meineResourceGruppe"
$Ort = "Westeuropa"
$VmName = "meinVmName"
$vmAdminBenutzername = "meinAdminBenutzer"
$vmAdminPasswort = "P@ssw0rd1"
$vmSize = "Standard_DS2"
$vmVisualStudioVersion = "VS-2015-Ent-VSU2-AzureSDK-29-W10T-N-x64"
$VmIPPublicDnsName = "meinPublicDnsName"
# Erstellen Sie die Ressourcengruppe.
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location -Verbose -Force -ErrorAction Stop
# Ausführen der ARM-Vorlage
New-AzureRmResourceGroupDeployment -Name ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm') `
  -ResourceGroupName $ResourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/visual-studio-dev-vm/azuredeploy.json `
  -TemplateParameterObject @{deployLocation=$Location;vmName=$vmName;vmAdminUserName=$vmAdminUserName;vmAdminPassword=$vmAdminPassword;vmSize=$vmSize;vmVisualStudioVersion=$vmVisualStudioVersion;vmIPPublicDnsName=$vmIPPublicDnsName} -Force -Verbose

Sie erhalten den folgenden Validierungsfehler:

New-AzureRmResourceGroupDeployment : InvalidTemplate: Validierung der Bereitstellungsvorlage fehlgeschlagen: 'Der angegebene Wert 'VS-2015-Ent-VSU2-AzureSDK-2 9-W10T-N-x64′ für den Vorlagenparameter 'vmVisualStudioVersion' in Zeile '60' und Spalte '31' ist nicht gültig. Der Parameterwert ist nicht Teil des f the allowed value(s): ‘VS-2015-Pro-VSU1-AzureSDK-2.8-W10T-1511-N-x64,VS-2015-Pro-AzureSDK-2.8-Cordova-Win8.1-N-x64,VS-2015-Ent-VSU1-AzureSD K-2.8-WS2012R2,VS-2015-Ent-VSU1-AzureSDK-2.8-W10T-1511-N-x64,VS-2015-Comm-VSU1-AzureSDK-2.8-WS2012R2,VS-2015-Comm-VSU1-AzureSDK-2.8-W10T-N-x6 4,VS-2015-Comm-AzureSDK-2.8-Cordova-Win8.1-N-x64,VS-2013-Ultimate-VSU5-AzureSDK-2.8-WS2012R2,VS-2013-Prem-VSU5-AzureSDK-2.8-WS2012R2,VS-2013- Comm-VSU5-Cordova-CTP3.2-AzureSDK-2.8-WS2012R2,VS-2013-Comm-VSU5-AzureSDK-2.8-WS2012R2′.’. In Zeile:16 Zeichen:1 + New-AzureRmResourceGroupDeployment -Name ((Get-Date).ToUniversalTime( ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [New-AzureRmResourceGroupDeployment], CloudException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupDeploymentCommand

 

Das liegt daran, dass in der ARM-Vorlage nur eine begrenzte Anzahl von SKUs verfügbar ist. Um dies zu umgehen, müssen Sie die ARM-Vorlage ändern. Laden Sie zunächst die ARM-Vorlage herunter und speichern Sie sie unter dem Namen AzureDeploy.json. Fügen Sie die fehlende SKU zur Liste der verfügbaren SKUs in der json-Datei hinzu (oder löschen Sie sie alle, damit sie nicht überprüft wird).

Ändern Sie das PowerShell-Skript, um die ARM-Vorlage lokal auszuführen:

# Anmeldung bei Azure
Login-AzureRmAccount
# Wählen Sie optional das richtige Abonnement
Select-AzureRmSubscription -SubscriptionId "<IhreSubscriptionId>"
# Parameter zum Erstellen eines Visual Studio Image
$ResourceGroupName = "meineResourceGruppe"
$Ort = "Westeuropa"
$VmName = "meinVmName"
$vmAdminBenutzername = "meinAdminBenutzer"
$vmAdminPasswort = "P@ssw0rd1"
$vmSize = "Standard_DS2"
$vmVisualStudioVersion = "VS-2015-Ent-VSU2-AzureSDK-29-W10T-N-x64"
$VmIPPublicDnsName = "meinPublicDnsName"
# Erstellen Sie die Ressourcengruppe.
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location -Verbose -Force -ErrorAction Stop
$TemplateFile = 'AzureDeploy.json'
$TemplateFile = [System.IO.Path]::Combine($PSScriptRoot, $TemplateFile)
# Ausführen der ARM-Vorlage
New-AzureRmResourceGroupDeployment -Name ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmm') `
-ResourceGroupName $ResourceGroupName `
-TemplateFile $TemplateFile `
-TemplateParameterObject @{deployLocation=$Location;vmName=$vmName;vmAdminUserName=$vmAdminUserName;vmAdminPassword=$vmAdminPassword;vmSize=$vmSize;vmVisualStudioVersion=$vmVisualStudioVersion;vmIPPublicDnsName=$vmIPPublicDnsName} -Force -Verbose

Wenn Sie dieses PowerShell Script mit der leicht geänderten ARM-Vorlage ausführen, wird das Image auf Azure erstellt.

Verfasst von

Pascal Naber

Contact

Let’s discuss how we can support your journey.