PowerShell – Hoe maak je een Array met PSObject

Zoals ik al eerder vertelde in mijn vorige blog post, werd ik gevraagd om een interactief PowerShell script te bouwen voor het maken van Virtual Machines in Azure. In deze blogpost wil ik u laten zien hoe ik binnen PowerShell een rapport (of array) heb gemaakt dat:

  • De aan te maken objecten aan de gebruiker laat zien
  • Hiermee kan PowerShell de gegevens van die array opvragen om Virtual Machines te maken. Dit zorgt ervoor dat je een consistent beeld hebt van wat PowerShell voor je gaat maken. Zie het als een besteloverzicht voordat je iets online koopt.

Stel je voor dat ik alle Virtual Machines die ik wil maken in $VMs heb staan. Dit kan een import van een CSV zijn, of misschien heb ik de gebruiker om details gevraagd met “Read-Host” of Out-GridView. Wanneer je een CSV importeert, zal de inhoud reeds georganiseerd zijn in een array. Maar met deze code kun je er gemakkelijk meer inhoud aan toevoegen en zowel gegevens uit een CSV als uit het script combineren. Bijvoorbeeld een gerandomiseerd wachtwoord of het eerste beschikbare IP adres in een subnet in Azure. Mijn einddoel is om een mooi overzicht te hebben van alle benodigde Virtual Machines in $Report, die ik later kan gebruiken om die VM’s te maken. Met onderstaande code maak je een PSObject voor elke VM in de $VMs variabele. Nadat het PSObject is aangemaakt, zal het worden toegevoegd aan de $Report variabele. Met “$Report = @()” vraag je PowerShell om een lege array te maken. Zie het als een lege tabel die je later zou kunnen gebruiken om er inhoud aan toe te voegen. Nadat de deployment gelukt of mislukt is, kun je de status toevoegen aan $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

Het bovenstaande voorbeeld is voor mij verreweg de makkelijkste manier om een mooie array te maken. Bedankt voor het lezen. Hopelijk vindt u het ook nuttig.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.