Wie ich bereits in meinem letzten Blogbeitrag erzählt habe, wurde ich gebeten, ein interaktives PowerShell-Skript für die Erstellung von virtuellen Maschinen in Azure zu erstellen. In diesem Blogbeitrag möchte ich Ihnen zeigen, wie ich einen Bericht (oder ein Array) in PowerShell erstellt habe, der:
- dem Benutzer die zu erstellenden Objekte anzeigt
- der PowerShell ermöglicht, die Daten dieses Arrays abzurufen, um virtuelle Maschinen zu erstellen. Dadurch wird sichergestellt, dass Sie eine konsistente Ansicht dessen haben, was PowerShell für Sie erstellen wird. Sehen Sie es als eine Bestellübersicht, bevor Sie etwas online kaufen.
Angenommen, ich habe alle virtuellen Maschinen, die ich erstellen möchte, in $VMs. Das kann ein Import einer CSV sein, oder vielleicht habe ich den Benutzer mit „Read-Host“ oder Out-GridView nach Details gefragt. Wenn Sie eine CSV importieren, wird der Inhalt bereits in einem Array organisiert. Aber mit diesem Code können Sie ganz einfach weitere Inhalte hinzufügen und sowohl Daten aus einer CSV als auch aus dem Skript kombinieren. Zum Beispiel ein randomisiertes Passwort oder die erste verfügbare IP-Adresse in einem Subnetz in Azure. Mein Ziel ist es, eine schöne Übersicht über alle benötigten virtuellen Maschinen in $Report zu haben, die ich später verwenden kann, um diese VMs zu erstellen. Mit dem folgenden Code erstellen Sie ein PSObject für jede VM in der Variablen $VMs. Nachdem das PSObject erstellt wurde, wird es an die Variable $Report angehängt. Mit „$Report = @()“ bitten Sie PowerShell, ein leeres Array zu erstellen. Betrachten Sie es als eine leere Tabelle, die Sie später verwenden können, um ihr Inhalte hinzuzufügen. Nachdem das Deployment erfolgreich oder fehlgeschlagen ist, können Sie den Status in $VM.DeploymentStatus.
# Set report variable$Report = @()Foreach ($VM in $VMs) { $PSObject = New-Object PSObject -Property @{ DeploymentName = $VM.resourceGroupName + "-" + (Get-Date -Format "yyyyMMdd-hh-mm-ss") VMName = $VM.vmName Location = $VM.resourceGroupLocation ResourceGroupName = $VM.resourceGroupName AdminPassword = $VM.adminPassword VMSize = $VM.vmSize VirtualNetwork = $VM.virtualNetwork VirtualNetworkRG = $VM.virtualNetwork.ResourceGroupName SubnetName = $VM.subnetName IPAddress = $VM.ipAddress OperatingSystem = $VM.operatingSystem DeploymentStatus = $Null } $Report += $PSObject}# Show the report$Report# Or show it in Table Format# $Report | Format-Table
Das obige Beispiel ist für mich der mit Abstand einfachste Weg, ein schönes Array zu erstellen. Danke fürs Lesen. Ich hoffe, Sie finden es auch nützlich.