Generate ESXi Host EOL report

Version 1

    <#

            ===========================================

            Created By:   Jason Pierce

            Created on:   31/Jan/2020

            Version:         3.0 (Final)

            NOTE:           The $vCenters and $vmHostModelEolMapping variables need to be edited to include your environment details before running the script

            ===========================================

    #>

     

    # login to vCenter(s) - use CTRL to select multiple vCenters

    $cred = Get-Credential -Message "  ***********  Enter vCenter Credentials  ***********"

     

    $vCenters = @(

        "vc1.company.com"

        "vc2.company.com"

        "vc3.company.com"

        "vc4.company.com"

        "vc5.company.com"

        )

     

    $selectedVC = $vCenters | Out-GridView -Title "  ***  vCenter Listing - Select required vCenter(s)  ***" -OutputMode Multiple

    Connect-VIServer -Server $selectedVC -Credential $cred -ErrorAction SilentlyContinue

     

     

    # Server model to EOL date mappings, edit to add/correct dates

    $vmHostModelEolMapping = @{

        # Cisco Servers

        "B230-BASE-M2"      = "2020/Jun"

        "C260-BASE-2646"    = "2020/Jun"

        "UCSB-B200-M4"      = "2024/Feb"

        "UCSC-BASE-M2-C460" = "2020/Apr"

        # Dell Servers

        "PowerEdge R630"    = "2018/May"

        "PowerEdge R640"    = "No EOL Published"

        "PowerEdge R710"    = "2016/May"

        # VxRails

        "VxRail E460"       = "2023/05"

        "VxRail P570F"      = "No EOL Published"

        }

     

    # Install the ImportExcel module if not already installed and prepare Excel layout@@

    If (!(Get-module -ListAvailable "ImportExcel")) {

        Find-Module -Name ImportExcel | Install-Module -Scope CurrentUser

        }

     

    $ContainsBlanks = New-ConditionalText -ConditionalType ContainsBlanks

     

    $hash = @{

        Path = "C:\Temp\EOLreport.xlsx"

        Show = $true;

        AutoSize = $true;

        AutoFilter = $true;

        ConditionalText = $ContainsBlanks

        ShowPercent = $true;

        #HideSheet = "Sheet1";

        }

     

    Remove-Item $hash.Path -ErrorAction Ignore

     

    # Collect ESXi Host details for EOL Report

    $vmHostAll = Get-VMHost

    $i = 1

     

    $vmHostAll | ForEach-Object -PipelineVariable vmhost -Process {

        Write-Progress -PercentComplete ($i / $vmHostAll.count * 100) -Activity "Generating Server End Of Life Report" -Status "Getting info on $_"

        $i++

     

        try {

            $esxcli = Get-EsxCli -vmhost $_ -V2 -ErrorAction Stop

            $platform = $esxcli.hardware.platform.get.invoke()

            }

     

        catch {

            Write-Host -ForegroundColor red  "Get-EsxCli failed for $($_.Name)"

            }

     

     

        [pscustomobject] @{

            vCenter          = [System.Net.Dns]::GetHostEntry((Get-View $_ -ErrorAction SilentlyContinue).summary.managementserverip).HostName

            "ESXi Host Name" = $_.Name

            Vendor           = $platform.VendorName

            Model            = $platform.ProductName

            Serial           = $platform.SerialNumber

            EOL              = $vmHostModelEolMapping[$platform.ProductName] -replace "^$", 'Unknown'

            }

     

    } | Sort-Object vCenter, "ESXi Host Name" | Export-Excel @hash