PowerShell – Hur man skapar en matris med PSObject

Som jag berättade i mitt tidigare blogginlägg ombads jag att bygga ett interaktivt PowerShell-skript för att skapa virtuella maskiner i Azure. I det här blogginlägget vill jag visa dig hur jag har skapat en rapport (eller array) i PowerShell som:

  • Visualisera de objekt som ska skapas till användaren
  • Möjliggör för PowerShell att hämta data från den arrayen för att skapa virtuella maskiner. Detta säkerställer att du har en konsekvent visning av vad PowerShell kommer att skapa åt dig. Se det som en orderöversikt innan du köper något på nätet.

Föreställ dig att jag har alla virtuella maskiner som jag vill skapa i $VMs. Detta kan vara en import av ett CSV, eller så har jag kanske bett användaren om detaljer med ”Read-Host” eller Out-GridView. När du importerar ett CSV är innehållet redan organiserat i en array. Men med den här koden kan du enkelt lägga till mer innehåll och kombinera både data från en CSV och från skriptet. Till exempel ett slumpmässigt lösenord eller den första tillgängliga IP-adressen i ett undernät i Azure. Mitt slutmål är att få en fin översikt över alla nödvändiga virtuella maskiner i $Report, som jag senare kan använda för att skapa dessa virtuella maskiner. Med koden nedan kommer du att skapa ett PSObject för varje VM i variabeln $VMs. När PSObjektet har skapats kommer det att läggas till i variabeln $Report. Med ”$Report = @()” ber du PowerShell att skapa en tom array. Se det som en tom tabell som du senare kan använda för att lägga till innehåll i den. När distributionen har lyckats eller misslyckats kan du lägga till status i $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

Ovanstående exempel är för mig det överlägset enklaste sättet att skapa en fin array. Tack för att du läste. Hoppas att du också finner det användbart.

Lämna ett svar

Din e-postadress kommer inte publiceras.