Public/Get-VMDetails.ps1
<#
.DESCRIPTION Collects multiple VM details across several functions and produces that info using PSCustomObject. Set the context of this command prior to running it. That can be done by using Set-Subscription function. That function is part of the Admintoolbox.office365 module. .EXAMPLE Get-VMdetails .NOTES Requires the AZ and Admintoolbox.Office365 module be installed, imported, and Connected. .Link https://github.com/TheTaylorLee/AdminToolbox #> Function Get-VMDetails { [CmdletBinding()] Param ( [Parameter(Mandatory = $false)][switch]$SetSubscription ) if ($SetSubscription) { #Set the subscription - Set-AzContext Write-Host "Select the subscription containing the VM's" -ForegroundColor Green Set-Subscription } #Will produce IP info and hostname. Expand on this command to include more details $results = foreach ( $azVM in Get-AzVM | Select-Object * ) { try { $networkProfile = $azVm.NetworkProfile.NetworkInterfaces.id.Split("/") | Select-Object -Last 1 $IPconfig = Get-AzNetworkInterface -Name $networkProfile $nsg = ($IPConfig).NetworkSecurityGroup.id [pscustomobject]@{ VMName = $azVm.Name ipaddress = ($IPconfig).IpConfigurations.PrivateIpAddress DNS = ($IPconfig).DnsSettings.AppliedDnsServers MacAddress = ($IPconfig).MacAddress NetworkSecurityGroup = $nsg.split("/") | Select-Object -Last 1 ResourceGroup = $azVM.ResourceGroupName Location = $azVM.Location Tags = $azVM.Tags Vmsize = ($azVm | Select-Object hardwareprofile).HardwareProfile.vmsize Type = $azVM.Type } } catch { $_ } } $results } |