Som jeg fortalte dig i mit tidligere blogindlæg, blev jeg bedt om at lave et interaktivt PowerShell-script til at oprette virtuelle maskiner i Azure. I dette blogindlæg vil jeg vise dig, hvordan jeg har oprettet en rapport (eller array) i PowerShell, der:
- Visualiserer de objekter, der skal oprettes, for brugeren
- Giver PowerShell mulighed for at få dataene i dette array til at oprette virtuelle maskiner. Dette sikrer, at du har en ensartet visning af det, som PowerShell vil oprette for dig. Se det som en ordreoversigt, før du køber noget online.
Lad os forestille os, at jeg har alle de virtuelle maskiner, som jeg vil oprette, i $VMs. Dette kan være en import af en CSV, eller måske har jeg spurgt brugeren om detaljer med “Read-Host” eller Out-GridView. Når du importerer en CSV, vil indholdet allerede være organiseret i et array. Men med denne kode kan du nemt tilføje mere indhold til det og kombinere både data fra en CSV og fra scriptet. F.eks. en randomiseret adgangskode eller den første tilgængelige IP-adresse i et undernet i Azure. Mit slutmål er at få et fint overblik over alle de nødvendige virtuelle maskiner i $Report, som jeg senere kan bruge til at lave disse VM’er. Med nedenstående kode opretter du et PSObject for hver VM i variablen $VMs. Når PSObjektet er blevet oprettet, vil det blive vedhæftet til variablen $Report. Med “$Report = @()” beder du PowerShell om at oprette et tomt array. Se det som en tom tabel, som du senere kan bruge til at tilføje indhold til den. Når distributionen er lykkedes eller mislykkedes, kan du tilføje status til $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
Overstående eksempel er for mig langt den nemmeste måde at oprette et pænt array på. Tak for at læse. Håber du også finder det nyttigt.