Como ya os comenté en mi anterior post del blog, me pidieron que construyera un script interactivo de PowerShell para crear Máquinas Virtuales en Azure. En esta entrada del blog, quiero mostraros cómo he creado un informe (o array) dentro de PowerShell que:
- Visualiza los objetos a crear al usuario
- Permite a PowerShell obtener los datos de ese array para crear Máquinas Virtuales. Esto asegura que usted tiene una vista consistente de lo que PowerShell creará para usted. Véalo como un resumen de pedidos antes de comprar algo en línea.
Imaginemos que tengo todas las Máquinas Virtuales que quiero crear en $VMs. Esto puede ser una importación de un CSV, o tal vez he pedido al usuario detalles con «Read-Host» o Out-GridView. Cuando importas un CSV, el contenido ya estará organizado en un array. Pero con este código, puedes añadir fácilmente más contenido y combinar tanto los datos de un CSV como los del script. Por ejemplo, una contraseña aleatoria o la primera dirección IP disponible en una subred en Azure. Mi objetivo final es tener un buen resumen de todas las Máquinas Virtuales necesarias en $Report, que luego puedo usar para hacer esas VMs. Con el código siguiente, creará un PSObject para cada VM en la variable $VMs. Una vez creado el PSObject, se anexará a la variable $Report. Con «$Report = @()» le pides a PowerShell que cree una matriz vacía. Véalo como una tabla vacía que podrá utilizar más tarde para añadirle contenido. Después de que el despliegue haya tenido éxito o haya fallado, puedes añadir el estado 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
El ejemplo anterior es, con mucho, la forma más fácil de crear un bonito array para mí. Gracias por la lectura. Espero que lo encuentres útil también.