How to get detailed info for all esxi into csv or Excel file

The advantage of below powerCLI is that oneliner shows as well SerialNumber (for example Dell/HP tags – very useful to find your esxi server in Datacenter physically )

Get-VMHost |Select-Object Name,NetworkInfo,Manufacturer,Model,ProcessorType, ConnectionState, PowerState, NumCpu, MemoryTotalGB, Version, Build, MaxEVCMode, @{N="SerialNumber";E={(Get-VMHostHardware -vmhost $_).SerialNumber}} | Export-Csv -notypeinformation -Path c:\temp\all-vmhosts.csv 

or more detailed report:

.'C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1'
connect-viserver vcsa.itforce.local

function Get-VMHostWSManInstance {
        param (
        [Parameter(Mandatory=$TRUE,HelpMessage="VMHosts to probe")]
        [VMware.VimAutomation.Client20.VMHostImpl[]]
        $VMHosts,
 
        [Parameter(Mandatory=$TRUE,HelpMessage="Class Name")]
        [string]
        $class,
 
        [switch]
        $ignoreCertFailures,
 
        [System.Management.Automation.PSCredential]
        $credential=$null
        )
 
        $omcBase = "http://schema.omc-project.org/wbem/wscim/1/cim-schema/2/"
        $dmtfBase = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/"
        $vmwareBase = "http://schemas.vmware.com/wbem/wscim/1/cim-schema/2/"
 
        if ($ignoreCertFailures) {
                $option = New-WSManSessionOption -SkipCACheck -SkipCNCheck -SkipRevocationCheck
        } else {
                $option = New-WSManSessionOption
        }
        foreach ($H in $VMHosts) {
                if ($credential -eq $null) {
                        $hView = $H | Get-View -property Value
                        $ticket = $hView.AcquireCimServicesTicket()
                        $password = convertto-securestring $ticket.SessionId -asplaintext -force
                        $credential = new-object -typename System.Management.Automation.PSCredential -argumentlist $ticket.SessionId, $password
                }
                $uri = "https`://" + $h.Name + "/wsman"
                if ($class -cmatch "^CIM") {
                        $baseUrl = $dmtfBase
                } elseif ($class -cmatch "^OMC") {
                        $baseUrl = $omcBase
                } elseif ($class -cmatch "^VMware") {
                        $baseUrl = $vmwareBase
                } else {
                        throw "Unrecognized class"
                }
                Get-WSManInstance -Authentication basic -ConnectionURI $uri -Credential $credential -Enumerate -Port 443 -UseSSL -SessionOption $option -ResourceURI "$baseUrl/$class"
        }
}
 
# Examples (make sure you are connected to an ESX server.)
# Get-VMHostWSManInstance -VMHost (Get-VMHost) -class CIM_Fan -ignoreCertFailures
# Get-VMHostWSManInstance -VMHost (Get-VMHost) -class VMware_Role -ignoreCertFailures
# Get-VMHostWSManInstance -VMHost (Get-VMHost) -class OMC_Card -ignoreCertFailures
# See http`://www.vmware.com/support/developer/cim-sdk/smash/u2/ga/apirefdoc/ for a list of classes.

function moguy-esxi

{

$filename = "vmware-esxi-" + (get-date).ToString('yyyy-MMMM-dd')

Get-VMHost |Select-Object Name,NetworkInfo,@{N="SerialNumber";E={(Get-VMHostHardware -vmhost $_).SerialNumber}}, `
@{ N="OutOfBandIP";E={(Get-VMHostWSManInstance -VMHost $_ -ignoreCertFailures -class OMC_IPMIIPProtocolEndpoint).IPv4Address}},`
Manufacturer,Model,`
@{N="vmotionIP";E={(get-view $_.id).config.vmotion.ipconfig.ipaddress}},`
ProcessorType, ConnectionState, PowerState, NumCpu,`
@{N="Cores/CPU";E={$_.Extensiondata.Summary.Hardware.NumCpuCores/$_.Extensiondata.Summary.Hardware.NumCpuPkgs}}, `
MemoryTotalGB, Version, Build, MaxEVCMode,`
@{N="Lockdown";E={$_.Extensiondata.Config.adminDisabled}},@{N="site";E={$_.customfields.item("00-site")}}, @{N="rack";E={$_.customfields.item("01-rack")}}, @{N="position";E={$_.customfields.item("02-rack-position")}},`
Parent, @{N="iso-image";E={((get-view ($_.ExtensionData.ConfigManager.ImageConfigManager)).HostImageConfigGetProfile()).name}},`
@{N="wwns";E={[string]::join(",",(Get-VMHostHBA -vmhost $_ -Type FibreChannel | select-object @{N="WWN";E={"{0:X}"-f$_.PortWorldWideName}} | Select-Object -ExpandProperty wwn))}}, `
@{N="10G";E={[string]::join(",", ((Get-EsxCli -VMHost $_ ).network.nic.list()|where {($_.Description -like "*10G*") -or ($_.Description -like "*10 G*")} | Select-Object -ExpandProperty Description))}}`
| Export-Csv -notypeinformation -Path c:\temp\$filename.csv

}

moguy-esxi

ps
The above script implys that you’ve create custom fields for all your esxi named: “00-site”,”01-rack”, “02-rack-position”