GinShell.Azure/Public/Get-GsAzureVmFullInfo.ps1
|
function Get-GsAzureVmFullInfo { param ( [string[]]$VmName, [string]$ResourceGroupName ) try { Write-GsLog -Message "Fetching Azure VM details..." -Type Info $allVms = if ($ResourceGroupName) { Get-AzVM -ResourceGroupName $ResourceGroupName } else { Get-AzVM } $filteredVms = if ($VmName) { $allVms | Where-Object { $_.Name -in $VmName } } else { $allVms } if (-not $filteredVms -or $filteredVms.Count -eq 0) { Write-GsLog -Message "No matching VMs found." -Type Warning return } $vmDetailsList = foreach ($vm in $filteredVms) { $vmStatus = Get-AzVM -ResourceGroupName $vm.ResourceGroupName -Name $vm.Name -Status # Get disk info $osDiskName = $vm.StorageProfile.OSDisk.Name $dataDiskNames = $vm.StorageProfile.DataDisks.Name $allDiskNames = @($osDiskName) + $dataDiskNames $disks = $allDiskNames | ForEach-Object { Get-AzDisk -ResourceGroupName $vm.ResourceGroupName -DiskName $_ } # Get NICs $nicIds = $vm.NetworkProfile.NetworkInterfaces.Id $nics = $nicIds | ForEach-Object { Get-AzNetworkInterface -ResourceId $_ } # Build NIC and IP details $nicDetails = foreach ($nic in $nics) { $ipConfigs = $nic.IpConfigurations | ForEach-Object { [PSCustomObject]@{ PrivateIpAddress = $_.PrivateIpAddress PublicIpAddress = if ($_.PublicIpAddress) { (Get-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name ($_.PublicIpAddress.Id.Split('/')[-1])).IpAddress } else { $null } Subnet = $_.Subnet.Id.Split('/')[-1] Vnet = $_.Subnet.Id.Split('/')[-3] } } [PSCustomObject]@{ NicName = $nic.Name IpConfigs = $ipConfigs Nsg = if ($nic.NetworkSecurityGroup) { (Get-AzNetworkSecurityGroup -ResourceGroupName $vm.ResourceGroupName -Name ($nic.NetworkSecurityGroup.Id.Split('/')[-1])).Name } else { $null } } } [PSCustomObject]@{ Name = $vm.Name ResourceGroup = $vm.ResourceGroupName Location = $vm.Location VmSize = $vm.HardwareProfile.VmSize OSType = $vm.StorageProfile.OSDisk.OsType ComputerName = $vm.OsProfile.ComputerName ProvisionState = $vmStatus.ProvisioningState PowerState = ($vmStatus.Statuses | Where-Object { $_.Code -like 'PowerState/*' }).DisplayStatus Disks = $disks Nics = $nicDetails } } return $vmDetailsList } catch { Write-GsLog -Message "Failed to retrieve VM details: $($_.Exception.Message)" -Type Error return } } |