Ausführen von Skripten auf Azure-VMs mit benutzerdefinierter Skripterweiterung

Wenn Ihr Team damit beginnt, mehr Windows Azure Virtual Machines (VMs) bereitzustellen und zu konfigurieren, werden Sie irgendwann genug davon haben, das Rad immer wieder neu zu erfinden. Sie benötigen Automatisierung! In diesem Artikel begleite ich Sie Schritt für Schritt dabei, wie Sie mit Azure benutzerdefinierten Skripterweiterungen beginnen, um Azure dazu zu verwenden, Skripte auf Ihren VMs auszuführen.

Wenn Ihr Team in einer Windows-Umgebung arbeitet, ist eines der besten Tools zur Automatisierung der Serverkonfiguration PowerShell. Durch Verwendung des Azure PowerShell-Moduls kann Ihre Organisation die Leistungsfähigkeit von PowerShell nutzen, um nicht nur lokale Aufgaben zu automatisieren, sondern auch Befehle auf Azure VMs in Stapelverarbeitung anstatt einzeln auszuführen.

Microsoft hat uns eine Funktion namens Azure benutzerdefinierte Skripterweiterung zur Verfügung gestellt. Die benutzerdefinierte Skripterweiterung ist eine Azure-Virtual-Machine-Erweiterung, die vom VM-Agenten ausgeführt wird, um beliebigen PowerShell-Code gegen Ihre VMs mithilfe der Azure-API anstelle der direkten Konsoleneingabe in die VM oder Verwendung von PowerShell-Remoting auszuführen.

Das Ausführen von Befehlen auf diese Weise bietet mehrere Vorteile. Das Ausführen von Befehlen mit der Azure benutzerdefinierten Erweiterung in Windows:

  • bietet erhöhte Sicherheit, da keine Netzwerkports für PowerShell-Remoting geöffnet werden müssen
  • ermöglicht einfache Ausführung von PowerShell-Code beim Starten der VM
  • überträgt automatisch Ressourcen von Azure Storage auf Ihre VM als Teil des Bereitstellungsprozesses.
  • Eine einfache Möglichkeit, PowerShell-Skripts aus verschiedenen Azure-Speicherkonten auszuführen

Die Aktivierung einer benutzerdefinierten Skripterweiterung für Windows Azure kann auf verschiedene Arten erfolgen. In diesem Artikel konzentrieren wir uns darauf, die benutzerdefinierte Skripterweiterung über PowerShell zu aktivieren, aber Sie können die Erweiterung auch über eine Azure Resource Manager (ARM)-Vorlage aktivieren.

Als einfaches Beispiel nehmen wir an, dass Sie sicherstellen möchten, dass die PowerShell-Remotefreigabe auf einer Azure-VM in Ihrem Abonnement aktiviert ist. Dazu müssen Sie den folgenden Befehl lokal auf jeder VM ausführen:

Enable-PSRemoting -Force

Erstellen wir eine benutzerdefinierte Skripterweiterung, um dies zu tun.

Verwenden von Azure zum Ausführen eines Skripts auf einer VM

Erstellen Sie zunächst ein PowerShell-Skript namens Enable-PSRemoting.ps1 auf Ihrem lokalen Computer mit dem oben angegebenen Befehl. Dieses Skript muss auf einer Azure-VM ausgeführt werden. Dazu erstellen wir ein weiteres kleines PowerShell-Skript namens New-CustomScriptExtension.ps1, um es in Azure hochzuladen und eine benutzerdefinierte Skripterweiterung zu erstellen, die es ausführt. Bevor wir zu weit gehen, benötigen Sie ein paar Dinge:

  • Der Name der Azure-Ressourcengruppe und des Speicherkontos, in dem das Skript gespeichert wird
  • Der Name des Azure-Speichercontainers
  • Der Name der VM
  • Der Name der Azure-Ressourcengruppe, in der sich die VM befindet

Dieses Skript kann in zwei Abschnitte unterteilt werden: das Hochladen des kleinen PowerShell-Skripts in Azure und das Erstellen der benutzerdefinierten Skripterweiterung. Alles andere dient dazu, diese beiden Prozesse miteinander zu verbinden.

Hochladen eines PowerShell-Skripts in Azure

Zunächst laden wir das Skript Enable-PSRemoting.ps1 in das Azure-Speicherkonto ($StorageAccountName) in dem Container ($ContainerName) in der Ressourcengruppe ($ResourceGroupName) hoch.

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

Ausführen der benutzerdefinierten Skripterweiterung

Wenn Sie New-CustomScriptExtension.ps1 ausführen, wird dieses Skript das Skript Enable-PSRemoting.ps1 in das angegebene Azure-Speicherkonto hochladen.

Jetzt, da das Skript in Azure gespeichert ist, können Sie es über die benutzerdefinierte Skripterweiterung für die VM ausführen:

  • Name: $VMName
  • Ressourcengruppe: $rgName
  • Speicherkonto: $saName
  • Speichercontainer: $scName

Öffnen Sie einen Texteditor für New-CustomScriptExtension.ps1 und fügen Sie das folgende Beispiel ein. Wenn Sie dies ausführen, wird die Azure benutzerdefinierte Skripterweiterung für Windows ausgeführt, die das zuvor hochgeladene PowerShell-Skript Enable-PSRemoting.ps1 ausführt.

New-CustomScriptExtension.ps1
# Holen Sie sich die VM, die wir konfigurieren müssen $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # Holen Sie sich den Speicherkonto-Schlüssel $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## Aktivieren Sie die benutzerdefinierte Skripterweiterung und führen Sie das Skript aus $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

Zusammenfassung

Sobald dieses Skript abgeschlossen ist, können Sie überprüfen, ob Enable-PSRemoting.ps1 auf der VM ausgeführt wurde und PowerShell-Remoting erfolgreich aktiviert wurde. Sie sollten jetzt Invoke-Command gegen Ihre Azure-VM verwenden können.

Durch die Nutzung der Azure-Benutzerdefinierte Skripterweiterung in Windows haben Sie nun die Möglichkeit, beliebige PowerShell-Skripte remote auf Ihren Azure-VMs auszuführen.

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