PowerShell – Come creare un array con PSObject

Come vi ho già detto nel mio precedente post sul blog, mi è stato chiesto di costruire uno script PowerShell interattivo per creare macchine virtuali in Azure. In questo blog post, voglio mostrarvi come ho creato un rapporto (o array) all’interno di PowerShell che:

  • Visualizza gli oggetti da creare all’utente
  • Permette a PowerShell di ottenere i dati di quell’array per creare le Macchine Virtuali. Questo fa sì che tu abbia una visione coerente di ciò che PowerShell creerà per te. Vedila come una panoramica dell’ordine prima di comprare qualcosa online.

Immaginiamo che io abbia tutte le macchine virtuali che voglio creare in $VMs. Questo può essere un’importazione di un CSV, o forse ho chiesto i dettagli all’utente con “Read-Host” o Out-GridView. Quando importate un CSV, il contenuto sarà già organizzato in un array. Ma con questo codice, si può facilmente aggiungere altro contenuto e combinare sia i dati da un CSV che dallo script. Per esempio, una password randomizzata o il primo indirizzo IP disponibile in una subnet in Azure. Il mio obiettivo finale è quello di avere una bella panoramica di tutte le macchine virtuali necessarie in $Report, che posso poi utilizzare per creare quelle VM. Con il codice qui sotto, si creerà un PSObject per ogni VM nella variabile $VMs. Dopo che il PSObject è stato creato, verrà aggiunto alla variabile $Report. Con “$Report = @()” chiedete a PowerShell di creare un array vuoto. Vedetelo come una tabella vuota che potreste usare in seguito per aggiungervi del contenuto. Dopo che il deployment è riuscito o fallito, puoi aggiungere lo stato a $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

L’esempio precedente è di gran lunga il modo più semplice per creare un bell’array per me. Grazie per aver letto. Spero che anche voi lo troviate utile.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.