Como eu disse antes no meu post anterior no blog, foi-me pedido para construir um script PowerShell interativo para a criação de Máquinas Virtuais no Azure. Neste post de blog, quero mostrar como criei um relatório (ou array) dentro do PowerShell que:
- Visualizar os objetos a serem criados para o usuário
- Permitir que o PowerShell obtenha os dados desse array para criar Máquinas Virtuais. Isto garante que você tenha uma visão consistente do que o PowerShell irá criar para você. Veja-o como uma visão geral do pedido antes de comprar algo online.
Vejamos que eu tenho todas as Máquinas Virtuais que eu quero criar em $VMs. Isto pode ser uma importação de um CSV, ou talvez eu tenha pedido ao usuário detalhes com “Read-Host” ou Out-GridView. Quando você importa um CSV, o conteúdo já estará organizado em um array. Mas com este código, você pode facilmente adicionar mais conteúdo a ele e combinar tanto os dados de um CSV quanto do script. Por exemplo, uma senha aleatória ou o primeiro endereço IP disponível em uma subrede no Azure. Meu objetivo final é ter uma boa visão geral de todas as máquinas virtuais necessárias em $Report, que eu posso usar mais tarde para fazer essas VMs. Com o código abaixo, você irá criar um PSObject para cada VM na variável $VMs. Após o PSObject ter sido criado, ele irá anexar à variável $Report. Com “$Report = @()” você pede ao PowerShell para criar um array vazio. Veja-o como uma tabela vazia que você poderia usar mais tarde para adicionar conteúdo a ele. Após o deployment ter tido sucesso ou falhado, você pode adicionar o status 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
O exemplo acima é de longe a maneira mais fácil de criar um bom array para mim. Obrigado por ler. Espero que você ache útil também.