After successfully tweaking my VM Inventory script, I had written this VMHost inventory script, which helps me for quick info for Capacity Planning, CPU EVC mode, SSH service status and etc,
Below is the full list.
Other helpful inventories
Extra Extended VM inventory using powercli - Part 2
VMware Datastores inventory powercli
Other useful blogs
Schedule PowerShell (.PS1 file) script in Windows Task Scheduler
Below is the full list.
- Management IP and its VLAN
- Model
- ESXi Service Tag/ Serial No
- TotalVMs and PowerOn VMs count
- Esxi host CPU Sockets and Core per socket
- Total ESXi host CPU mhz and Logical CPU
- Esxi memory and assigned to VMs
- MAX-EVC-Key (This is helpful when setting up EVC mode on the vmware cluster)
- ESXi uptime
- Domain, syslog and dump collector settings info
- DRacIP and RackLocation (You will have to fillup onetime custom attributes (annotation))
function Get-VMHostinventory {
foreach ($vmhost in Get-VMHost) {
Write-host $vmhost.Name
#####################################
## http://kunaludapi.blogspot.com
## Version: 1
## Tested this script on successfully
## 1) Powershell v4
## 2) Powercli v5.5
## 2) Windows 7
## 3) vSphere 5.5 (vcenter, esxi, powercli)
#####################################
if ($vmhost.Version -ne "4.1.0") {
$esxcli = $vmhost | Get-EsxCli
$serviceTag = $esxcli.hardware.platform.get().SerialNumber
}
else {
$serviceTag = $vmhost.ExtensionData.summary.hardware.otheridentifyinginfo | select-object -ExpandProperty IdentifierValue -last 1
}
#Esxihost Management IP and vlan ID
$Managementinfo = $vmhost | Get-VMHostNetworkAdapter | Where-Object {$_.ManagementTrafficEnabled -eq $true}
$VirtualPortGroup = $vmhost | Get-VirtualPortGroup
$IPinfo = $Managementinfo | select-object -ExpandProperty ip
$ManagementPortGroup = $Managementinfo.extensiondata.spec
$ManagementIP = $IPinfo -join ", "
$MulitvLans = @()
if ($ManagementPortGroup.DistributedVirtualPort -ne $null) {
$vLanIDinfo = $VirtualPortGroup | Where-Object {$Managementinfo.PortGroupName -contains $_.name}
foreach ($MGMTVlan in $vLanIDinfo) {
$MulitvLans += $MGMTVlan.ExtensionData.config.DefaultPortConfig.Vlan.VlanId
}
$vLanID = $MulitvLans -join ", "
}
else {
$vLanIDinfo = $VirtualPortGroup | Where-Object {$ManagementPortGroup.Portgroup -contains $_.name } | Select-Object -ExpandProperty VLanId
foreach ($MGMTVlan in $vLanIDinfo) {
$MulitvLans += $MGMTVlan
}
$vLanID = $MulitvLans -join ", "
}
#EsxiHost CPU info
$HostCPU = $vmhost.ExtensionData.Summary.Hardware.NumCpuPkgs
$HostCPUcore = $vmhost.ExtensionData.Summary.Hardware.NumCpuCores/$HostCPU
#All Virtual Machines Info
$VMs = $vmhost | Get-VM
$PoweredOnVM = $VMs | Where-Object {$_.PowerState -eq "PoweredOn"}
#EsxiHost and VM -- CPU calculation
$AssignedTotalvCPU = $VMs | Measure-Object NumCpu -Sum | Select-Object -ExpandProperty sum
$PoweredOnvCPU = $PoweredOnVM | Measure-Object NumCpu -Sum | Select-Object -ExpandProperty sum
$onecoreMhz = $vmhost.CPUTotalMhz / $vmhost.NumCpu
$TotalPoweredOnMhz = $onecoreMhz * $PoweredOnvCPU
#EsxiHost and VM -- Memory calculation
$TotalMemory = [math]::round($vmhost.MemoryTotalGB)
$Calulatedvmmemory = $VMs | Measure-Object MemoryGB -sum | Select-Object -ExpandProperty sum
$TotalvmMemory = [math]::round($Calulatedvmmemory)
$Calulatedvmmemory = $PoweredOnVM | Measure-Object MemoryGB -sum | Select-Object -ExpandProperty sum
$PoweredOn_vMemory = "{0:N2}" -f $Calulatedvmmemory
#EsxiHost Domain Details
$domain = ($vmhost | Get-VMHostAuthentication).Domain
#Cluster and Datstore info
$Clusterinfo = $vmhost | Get-Cluster
$Clustername = $Clusterinfo.Name
$DataCenterinfo = Get-DataCenter -VMHost $VMHost.Name
$Datacentername = $DataCenterinfo.Name
#vCenterinfo
$vCenter = $vmhost.ExtensionData.CLient.ServiceUrl.Split('/:')[3]
$vcenterversion = $global:DefaultVIServers | where {$_.Name -eq $vCenter} | %{"$($_.Version) build $($_.Build)"}
#vmhost SSH service Staus
$SSHservice = $vmhost | Get-VMHostService | Where-object {$_.key -eq "Tsm-ssh"} | Select-Object -ExpandProperty running
#vmhost Uptime
$UPtime = (Get-Date) - ($vmhost.ExtensionData.Runtime.BootTime) | Select-Object -ExpandProperty days
#vmhost syslog server settings
if ($vmhost.Version -ne "4.1.0") {
$syslog = ($vmhost | Get-AdvancedSetting -Name Syslog.global.logHost).value
}
else {$syslog = "Not Supported"}
#vmhost Dump collector
$DumpCollector = $esxcli.system.coredump.network.get().NetworkServerIP
$VmHostresult = New-Object PSObject
$VmHostresult | add-member -MemberType NoteProperty -Name "Name" -Value $vmhost.Name
$VmHostresult | add-member -MemberType NoteProperty -Name "Management IP" -Value $ManagementIP
$VmHostresult | add-member -MemberType NoteProperty -Name "vLan ID" -Value $vlanID
$VmHostresult | add-member -MemberType NoteProperty -Name "PowerState" -Value $vmhost.PowerState
$VmHostresult | add-member -MemberType NoteProperty -Name "Manufacturer" -Value $vmhost.Manufacturer
$VmHostresult | add-member -MemberType NoteProperty -Name "Model" -Value $vmhost.Model
$VmHostresult | add-member -MemberType NoteProperty -Name "Service_Tag" -Value $serviceTag
$VMHostresult | add-member -MemberType NoteProperty -Name "TotalVms" -Value $VMs.count
$VMHostresult | add-member -MemberType NoteProperty -Name "PoweronVMs" -Value $PoweredOnvm.Count
$VmHostresult | add-member -MemberType NoteProperty -Name "ProcessorType" -Value $VMHost.ProcessorType
$VmHostresult | add-member -MemberType NoteProperty -Name "CPU_Sockets" -Value $HostCPU
$VmHostresult | add-member -MemberType NoteProperty -Name "CPU_core_per_socket" -Value $HostCPUcore
$VmHostresult | add-member -MemberType NoteProperty -Name "Logical_CPUs" -Value $vmhost.Numcpu
$VmHostresult | add-member -MemberType NoteProperty -Name "TotalHost_Mhz" -Value $vmhost.CPUTotalMhz
$VmHostresult | add-member -MemberType NoteProperty -Name "AssignedTotal_vCPUs" -Value $AssignedTotalvCPU
$VmHostresult | add-member -MemberType NoteProperty -Name "PoweredOn_vCPUs" -Value $PoweredOnvCPU
$VmHostresult | add-member -MemberType NoteProperty -Name "PoweredOn_Mhz" -Value $TotalPoweredOnMhz
$VmHostresult | add-member -MemberType NoteProperty -Name "Memory(GB)" -Value $TotalMemory
$VmHostresult | add-member -MemberType NoteProperty -Name "AssignedTotal-vMemory(GB)" -Value $TotalvmMemory
$VmHostresult | add-member -MemberType NoteProperty -Name "PoweredOn-vMemory(GB)" -Value $PoweredOn_vMemory
$VmHostresult | add-member -MemberType NoteProperty -Name "Esxi-Version" -Value $vmhost.Version
$VmHostresult | add-member -MemberType NoteProperty -Name "Build-Number" -Value $vmhost.Build
$VmHostresult | add-member -MemberType NoteProperty -Name "Domain" -Value $domain
$VmHostresult | add-member -MemberType NoteProperty -Name "Max-EVC-Key" -Value $vmhost.ExtensionData.Summary.MaxEVCModeKey
$VmHostresult | add-member -MemberType NoteProperty -Name "Cluster" -Value $ClusterName
$VmHostresult | add-member -MemberType NoteProperty -Name "DataCenter" -Value $DatacenterName
$VmHostresult | add-member -MemberType NoteProperty -Name "vCenter Server" -Value $vcenter
$VmHostresult | add-member -MemberType NoteProperty -Name "vCenter version" -Value $vcenterversion
$VMHostresult | add-member -MemberType NoteProperty -Name "Esxi-status" -Value $vmhost.ExtensionData.Summary.OverallStatus
$VMHostresult | add-member -MemberType NoteProperty -Name "Physical-Nics" -Value $vmhost.ExtensionData.summary.hardware.NumNics
$VMHostresult | add-member -MemberType NoteProperty -Name "SSH-Enabled" -Value $SSHservice
$VMHostresult | add-member -MemberType NoteProperty -Name "Uptime" -Value $UPtime
$VMHostresult | add-member -MemberType NoteProperty -Name "Syslog-Server" -Value $syslog
$VMHostresult | add-member -MemberType NoteProperty -Name "Dump-Collector" -Value $DumpCollector
$VmHostresult
}
}
Get-VMHostinventory
#To write information to csv file
#Get-VMHostinventory | export-csv -path c:\vmhostlist.csv
Other helpful inventories
Extra Extended VM inventory using powercli - Part 2
VMware Datastores inventory powercli
Other useful blogs
Schedule PowerShell (.PS1 file) script in Windows Task Scheduler
No comments:
Post a Comment