Get-NICDetails.psm1

function Get-NICDetails {
<#
    .NOTES
    ===========================================================================
    Created by: Markus Kraus
    Twitter: @VMarkus_K
    Private Blog: mycloudrevolution.com
    ===========================================================================
    Changelog:
    2017.02 ver 1.0 Base Release
    ===========================================================================
    External Code Sources:
    -
    ===========================================================================
    Tested Against Environment:
    vSphere Version: ESXi 6.0 U2, ESXi 6.5
    PowerCLI Version: PowerCLI 6.3 R1, PowerCLI 6.5 R1
    PowerShell Version: 4.0, 5.0
    OS Version: Windows 8.1, Server 2008 R2, Server 2012 R2
    Keyword: ESXi, NIC, vmnic, Driver, Firmware
    ===========================================================================
 
    .DESCRIPTION
    Reports Firmware and Driver Details for your ESXi vmnics.
 
    .Example
    Get-NICDetails -Clustername *
 
    .PARAMETER Clustername
    Name or Wildcard of your vSphere Cluster Name to process.
 
 
#Requires PS -Version 4.0
#Requires -Modules VMware.VimAutomation.Core, @{ModuleName="VMware.VimAutomation.Core";ModuleVersion="6.3.0.0"}
#>


[CmdletBinding()]
param( 
    [Parameter(Mandatory=$True, ValueFromPipeline=$False, Position=0)]
    [ValidateNotNullorEmpty()]
        [String] $Clustername
        
)

Begin {
    $Validate = $True

    if (($myCluster = Get-Cluster -Name $Clustername).count -lt 1) {
       $Validate = $False
       thow "No Cluster '$myCluster' found!"
    }
  
}

Process {

    $MyView = @()
    if ($Validate -eq $True) {
  
        foreach ($myVMhost in ($myCluster | Get-VMHost)) {

            $esxcli2 = Get-ESXCLI -VMHost $myVMhost -V2
            $niclist = $esxcli2.network.nic.list.invoke()

            $nicdetails = @()
            foreach ($nic in $niclist) {

                $args = $esxcli2.network.nic.get.createargs()
                $args.nicname = $nic.name
                $nicdetail = $esxcli2.network.nic.get.Invoke($args)
                $nicdetails += $nicdetail

                }
            ForEach ($nicdetail in $nicdetails){
                $NICReport = [PSCustomObject] @{
                        Host = $myVMhost.Name
                        vmnic = $nicdetail.Name
                        LinkStatus = $nicdetail.LinkStatus
                        BusInfo = $nicdetail.driverinfo.BusInfo
                        Driver = $nicdetail.driverinfo.Driver
                        FirmwareVersion = $nicdetail.driverinfo.FirmwareVersion
                        DriverVersion = $nicdetail.driverinfo.Version
                        }
                $MyView += $NICReport
                }

        }
        
       $MyView

    }
}
}