Entrada actualizada para agregar compatibilidad con SCVMM 2016
Credits are from https://vniklas.djungeln.se/2013/09/29/ Niklas AkerlundGet an inventory of all VM’s from System Center Virtual Machine Manager including the vCPU’s, memory, all VHD´s, IP addresses. Report to CSV and HTML. Adapted to work with last actuallly SCVMM version 3.2.8224
__________________________
Créditos son de Niklas AkerlundGet https://vniklas.djungeln.se/2013/09/29/
Exportar un inventario de todas las VM’s es SCVMM. Se exporta a CSV y HTML, compatible con la 3.2.8224 /SCVMM 2016 y más.
Get an inventory of all VM’s from System Center Virtual Machine Manager including the vCPU’s, memory, up to 3 VHD´s, up to 4 interfaces and IP addresses. Report to CSV and HTML. Adapted to work with SCVMM version 3.2.8224. and at least SCVMM 2016 UR7
Thanks to @leleco for the suggestions and collaboration improvements
Example:
Get-SCVMInventory -report
Give a reports for «All Hosts»
Get-SCVMInventory -VMHost SERVER01
Give data from SERVER01 Hyper-v Host.
Publicado también en https://gallery.technet.microsoft.com/scriptcenter/Get-SCVMMInventory-Get-053afdc1
function Get-SCVMInventory { [CmdletBinding()] Param ( $VMHostGroup = "All Hosts", [Parameter(ValueFromPipeline=$True)][Alias('ClusterName')] $VMHostCluster = $null, $VMHost = $null, [switch]$report, [string]$path =".\", [string]$CSVFile = "VMdata.csv", [string]$HTMLReport = "VMdata.html" ) Begin { if(!(Get-Module virtualmachinemanager)){ Import-Module Hyper-V Import-Module virtualmachinemanager } if(Get-SCVMMServer localhost | where ProductVersion -gt 3){ $isR2 = $true }else{ $isR2 = $false } } Process { if ($VMHostCluster -eq $null){ if($VMHost -eq $null){ $VMHosts = (Get-SCVMHostGroup -Name $VMhostGroup).AllChildHosts }else{ $VMHosts = Get-SCVMHost $VMHost } }else{ $VMHosts = (Get-SCVMHostCluster -Name $VMHostCluster).Nodes } $VMs = $VMHosts | Get-SCVirtualMachine $reportArray = @() foreach ($VM in $VMs){ Write-Verbose $VM.Name $vNics = $VM.VirtualNetworkAdapters $VHDConf = $VM.VirtualHardDisks $driveConf = $VM.VirtualDiskDrives if(($vNics[0].IPv4Addresses -ne $null)){ Write-Verbose $vNics[0].IPv4Addresses[0] $IPAddress1 = $vNics[0].IPv4Addresses[0] }else{ if (!$isR2){ if(($vNics[0].IPv4Addresses -ne $null)){ $IPAddress1= (Hyper-V\Get-VMNetworkAdapter -ComputerName $VM.HostName -VMName $VM.Name).IPv4Addresses[0] }else{ $IPAddress1 = "N/A" } }else{ Write-Verbose "NO IP" $IPAddress1 = "N/A" } } if(($vNics[1].IPv4Addresses -ne $null)){ Write-Verbose $vNics[1].IPv4Addresses[0] $IPAddress2 = $vNics[1].IPv4Addresses[0] }else{ if (!$isR2){ if(($vNics[1].IPv4Addresses -ne $null)){ $IPAddress2= (Hyper-V\Get-VMNetworkAdapter -ComputerName $VM.HostName -VMName $VM.Name).IPv4Addresses[0] }else{ $IPAddress2 = "N/A" } }else{ Write-Verbose "NO IP" $IPAddress2 = "N/A" } } if(($vNics[2].IPv4Addresses -ne $null)){ Write-Verbose $vNics[2].IPv4Addresses[0] $IPAddress3 = $vNics[2].IPv4Addresses[0] }else{ if (!$isR2){ if(($vNics[2].IPv4Addresses -ne $null)){ $IPAddress3= (Hyper-V\Get-VMNetworkAdapter -ComputerName $VM.HostName -VMName $VM.Name).IPv4Addresses[0] }else{ $IPAddress3 = "N/A" } }else{ Write-Verbose "NO IP" $IPAddress3 = "N/A" } } if(($vNics[3].IPv4Addresses -ne $null)){ Write-Verbose $vNics[3].IPv4Addresses[0] $IPAddress4 = $vNics[3].IPv4Addresses[0] }else{ if (!$isR2){ if(($vNics[3].IPv4Addresses -ne $null)){ $IPAddress4= (Hyper-V\Get-VMNetworkAdapter -ComputerName $VM.HostName -VMName $VM.Name).IPv4Addresses[0] }else{ $IPAddress4 = "N/A" } }else{ Write-Verbose "NO IP" $IPAddress4 = "N/A" } } if($VM.VMCheckpoints){ $Snapshots = "Yes" }else{ $Snapshots = "No" } $data = [ordered]@{ VMName = $VM.Name vCPUs = $VM.CPUCount MemoryAssignedMB = $VM.MemoryAssignedMB Status = $VM.Status OperatingSystem = $VM.OperatingSystem HostName = $VM.HostName TotalSizeGB = $VM.TotalSize/1GB -as [int] vNics = $vNics.Count VirtualNetwork1 = $vNics[0].VirtualNetwork MacAddressType1 = $vNics[0].MacAddressType MacAddress1 = $vNics[0].MacAddress VirtualNetworkAdapterType1 = $vNics[0].VirtualNetworkAdapterType VLANEnabled1 = $vNics[0].VlanEnabled VLanID1 = $vNics[0].VlanID IPAddress1 = $IPAddress1 VirtualNetwork2 = $vNics[1].VirtualNetwork MacAddressType2 = $vNics[1].MacAddressType MacAddress2 = $vNics[1].MacAddress VirtualNetworkAdapterType2 = $vNics[1].VirtualNetworkAdapterType VLANEnabled2 = $vNics[1].VlanEnabled VLanID2 = $vNics[1].VlanID IPAddress2 = $IPAddress2 VirtualNetwork3 = $vNics[2].VirtualNetwork MacAddressType3 = $vNics[2].MacAddressType MacAddress3 = $vNics[2].MacAddress VirtualNetworkAdapterType3 = $vNics[2].VirtualNetworkAdapterType VLANEnabled3 = $vNics[2].VlanEnabled VLanID3 = $vNics[2].VlanID IPAddress3 = $IPAddress3 VirtualNetwork4 = $vNics[3].VirtualNetwork MacAddressType4 = $vNics[3].MacAddressType MacAddress4 = $vNics[3].MacAddress VirtualNetworkAdapterType4 = $vNics[3].VirtualNetworkAdapterType VLANEnabled4 = $vNics[3].VlanEnabled VLanID4 = $vNics[3].VlanID IPAddress4 = $IPAddress4 NumberofVHD = $VHDConf.Count VHDName = $VHDConf[0].Name VHDFormatType = $VHDconf[0].VHDFormatType VHDType = $VHDconf[0].VHDType VHDSize = $VHDconf[0].MaximumSize/1GB -as [int] VHDCurrentSize = $VHDconf[0].Size/1GB -as [int] VHDBusType = $driveConf[0].BusType VHDBus = $driveConf[0].Bus VHDLUN = $DriveConf[0].Lun VHDDatastore = $VHDconf[0].Directory VHDName2 = $VHDConf[1].Name VHDFormatType2 = $VHDconf[1].VHDFormatType VHDType2 = $VHDconf[1].VHDType VHDSize2 = $VHDconf[1].MaximumSize/1GB -as [int] VHDCurrentSize2 = $VHDconf[1].Size/1GB -as [int] VHDBusType2 = $driveConf[1].BusType VHDBus2 = $driveConf[1].Bus VHDLUN2 = $DriveConf[1].Lun VHDDatastore2 = $VHDconf[1].Directory VHDName3 = $VHDConf[2].Name VHDFormatType3 = $VHDconf[2].VHDFormatType VHDType3 = $VHDconf[2].VHDType VHDSize3 = $VHDconf[2].MaximumSize/1GB -as [int] VHDCurrentSize3 = $VHDconf[2].Size/1GB -as [int] VHDBusType3 = $driveConf[2].BusType VHDBus3 = $driveConf[2].Bus VHDLUN3 = $DriveConf[2].Lun VHDDatastore3 = $VHDconf[2].Directory StartMemoryGB = $VM.Memory/1024 DynamicMemory = $VM.DynamicMemoryEnabled DynamicMemoryDemandMB = $VM.DynamicMemoryDemandMB DynamicMemoryStatus = $VM.DynamicMemoryStatus -as [int] DynamicMemoryMinMB = $VM.DynamicMemoryMinimumMB -as [int] DynamicMemoryMaxGB = $VM.DynamicMemoryMaximumMB/1024 -as [int] HasSnaphots = $Snapshots Owner = $VM.Owner Cloud = $VM.Cloud CreationTime = $VM.CreationTime HasVMAdditions = $VM.HasVMAdditions VMAddition = $VM.VMAddition } $obj= New-Object -TypeName PSObject -property $data $reportArray +=$obj Write-Output $obj } if($report){ # $reportArray $CSVReport = $path + $CSVFile $HTMLReport = $path + $HTMLReport $reportArray | Export-Csv -Path $CSVReport -NoTypeInformation -UseCulture $reportArray | ConvertTo-HTML | Out-File $HTMLReport } } End { # Should we clean anything? } }