Wie kann ich mit C# eine Azure-VM mit spezifischen Umgebungsvariablen erstellen? Das Betriebssystem der VM sollte Windows 11 sein.
Um mit C# und Windows 11 eine Azure-VM mit spezifischen Umgebungsvariablen zu erstellen, müssen Sie folgende Schritte befolgen:

1. Installieren Sie die Azure Management Libraries für .NET, indem Sie den folgenden Befehl in der Package Manager Console ausführen:
``` 
Install-Package Microsoft.Azure.Management.Fluent
``` 
2. Richten Sie die Authentifizierung ein, indem Sie eine Azure Active Directory (AD)-App erstellen und ihr die erforderlichen Berechtigungen zuweisen. Sie können dies über das Azure-Portal oder mit der Azure CLI tun. Notieren Sie sich die Mandanten-ID, die Client-ID und das Client-Geheimnis nach dem Einrichten der App.

3. Erstellen Sie eine C#-Konsolenanwendung in Visual Studio und fügen Sie die folgenden Namespaces hinzu:
``` 
using Microsoft.Azure.Management.Compute.Fluent;
using Microsoft.Azure.Management.Compute.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent;
using Microsoft.Azure.Management.ResourceManager.Fluent.Authentication;
using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
using System;
``` 
4. Fügen Sie den folgenden Code hinzu, um eine Windows 11-VM mit den spezifischen Umgebungsvariablen zu erstellen:
``` 
public static async Task Main(string[] args)
{
    // Füllen Sie Ihre Azure AD-App-Anmeldeinformationen aus
    var clientId = "DEINE_CLIENT_ID";
    var clientSecret = "DEIN_CLIENT_SECRET";
    var tenantId = "DEINE_TENANT_ID";
    var subscriptionId = "DEINE_SUBSCRIPTION_ID";

    // Authentifizieren Sie sich bei Azure
    var credentials = new AzureCredentials(new ServicePrincipalLoginInformation
    {
        ClientId = clientId,
        ClientSecret = clientSecret
    }, tenantId, AzureEnvironment.AzureGlobalCloud);

    // Initialisieren Sie den Azure Management-Client
    var azure = Azure.Authenticate(credentials).WithSubscription(subscriptionId);

    // Konfigurieren Sie die VM
    var groupName = "deineResourceGroup";
    var vmName = "deinVmName";
    var location = Region.USWest;

    // Erstellen oder aktualisieren Sie die Ressourcengruppe
    var resourceGroup = await azure.ResourceGroups.Define(groupName)
        .WithRegion(location)
        .CreateAsync();

    // Definieren Sie die VM
    var vm = await azure.VirtualMachines.Define(vmName)
        .WithRegion(location)
        .WithExistingResourceGroup(resourceGroup)
        .WithNewPrimaryNetwork("10.0.0.0/28")
        .WithPrimaryPrivateIPAddressDynamic()
        .WithNewPrimaryPublicIPAddress("deinePublicIP")
        .WithPopularWindowsImage(KnownWindowsVirtualMachineImage.Windows11Pro)
        .WithAdminUsername("deinAdminBenutzername")
        .WithAdminPassword("deinAdminPasswort")
        .WithSize(VirtualMachineSizeTypes.StandardD2sV3)
        .DefineNewExtension("CustomScriptExtension")
            .WithPublisher("Microsoft.Compute")
            .WithType("CustomScriptExtension")
            .WithVersion("1.10")
            .WithMinorVersionAutoUpgrade()
            .WithPublicSetting("fileUris", new List<string> { "https://deineScriptUrl/set-environment-variables.ps1" })
            .WithPublicSetting("commandToExecute", "powershell -ExecutionPolicy Unrestricted -File set-environment-variables.ps1")
            .Attach()
        .CreateAsync();

    Console.WriteLine("VM erstellt!");
}
``` 
5. Ersetzen Sie Platzhalter durch Ihre tatsächlichen Azure-Anmeldeinformationen und andere Details. Sie müssen auch https://deineScriptUrl/set-environment-variables.ps1 durch die tatsächliche URL Ihres PowerShell-Skripts ersetzen, das die Umgebungsvariablen festlegt.

6. Erstellen Sie ein PowerShell-Skript mit dem Namen set-environment-variables.ps1 und laden Sie es an einen öffentlich zugänglichen Speicherort hoch. Das Skript sollte Ihre gewünschten Umgebungsvariablen wie folgt setzen:
```
[System.Environment]::SetEnvironmentVariable("VAR_NAME1", "VAR_VALUE1", [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable("VAR_NAME2", "VAR_VALUE2", [System.EnvironmentVariableTarget]::Machine)
# Fügen Sie bei Bedarf weitere Umgebungsvariablen hinzu

# Starten Sie die VM neu, um die Umgebungsvariablen anzuwenden
Restart-Computer -Force
```
Ersetzen Sie VAR_NAME1, VAR_VALUE1, VAR_NAME2 und VAR_VALUE2 durch die gewünschten Namen und Werte Ihrer Umgebungsvariablen. Fügen Sie weitere Zeilen hinzu, um zusätzliche Umgebungsvariablen festzulegen.

Dieses Skript setzt die Umgebungsvariablen auf Maschinenebene, was bedeutet, dass sie für alle Benutzer verfügbar sein werden. Wenn Sie sie für einen bestimmten Benutzer festlegen möchten, ersetzen Sie [System.EnvironmentVariableTarget]::Machine durch [System.EnvironmentVariableTarget]::User.

Nach Abschluss dieser Schritte erstellt Ihre C#-Konsolenanwendung eine Azure-VM mit den angegebenen Umgebungsvariablen. Die VM wird Windows 11 als Betriebssystem haben. Beachten Sie, dass Sie den KnownWindowsVirtualMachineImage-Enumeration im Code aktualisieren müssen, wenn das Windows 11-Image noch nicht verfügbar ist. Verwenden Sie in diesem Fall ein Windows Server-Image und führen Sie ein manuelles Upgrade auf Windows 11 durch.