VMware Cloud Community
kradke
Contributor
Contributor

Fetch ESXi license name & expiration date with PowerCLI

Hi folks,

i have a simple PowerShell inventory script for our ESXi servers and i would like to integrate two additional items:

License type (Standard, Enterprise, Enterprise Plus)

License expiration date.

Does anybody have an advice how to obtain this information with my script below?

The script looks like follows:

Get-View -ViewType HostSystem  |

select Name,

    @{N='Cluster';E={

      $parent = Get-View -Id $_.Parent -Property Name,Parent

      While ($parent -isnot [VMware.Vim.ClusterComputeResource] -and $parent.Parent){

        $parent = Get-View -Id $parent.Parent -Property Name,Parent

      }

      if($parent -is [VMware.Vim.ClusterComputeResource]){

        $parent.Name}}},

@{N="Type";E={$_.Hardware.SystemInfo.Vendor+ " " + $_.Hardware.SystemInfo.Model}},

@{N="BIOS version"; E={$_.Hardware.BiosInfo.BiosVersion}},

@{N="BIOS date";E={$_.Hardware.BiosInfo.releaseDate}},

@{N='Product';E={$_.Config.Product.FullName}},

@{N='Build';E={$_.Config.Product.Build}}| export-csv -NoTypeInformation -Path C:\temp\report_esxihosts.csv

The script's output so far is a CSV with hostname, cluster, hardware & BIOS information, product name and build number.

I am not sure whether i can retrieve the addional information with the "Get-View" pipe as well or if i have to build an entirely new loop statement for this ( i am a PowerShell newbie, i must admit).

Thanks in advance!

Karsten

5 Replies
LucD
Leadership
Leadership

Try like this.

Note that LicenseExpiration will only show a value when there is an expiration date on the license.

$LicenseManager= Get-view LicenseManager

$LicenseAssignmentManager= Get-View $LicenseManager.LicenseAssignmentManager

Get-View -ViewType HostSystem  |

select Name,

    @{N='Cluster';E={

      $parent = Get-View -Id $_.Parent -Property Name,Parent

      While ($parent -isnot [VMware.Vim.ClusterComputeResource] -and $parent.Parent){

        $parent = Get-View -Id $parent.Parent -Property Name,Parent

      }

      if($parent -is [VMware.Vim.ClusterComputeResource]){

        $parent.Name}}},

@{N="Type";E={$_.Hardware.SystemInfo.Vendor+ " " + $_.Hardware.SystemInfo.Model}},

@{N="BIOS version"; E={$_.Hardware.BiosInfo.BiosVersion}},

@{N="BIOS date";E={$_.Hardware.BiosInfo.releaseDate}},

@{N='Product';E={$_.Config.Product.FullName}},

@{N='Build';E={$_.Config.Product.Build}},

@{N='LicenseType';E={

    $script:licInfo = $LicenseAssignmentManager.GetType().GetMethod("QueryAssignedLicenses").Invoke($LicenseAssignmentManager,@($_.MoRef.Value))

    $licInfo.AssignedLicense.Name

}},

@{N='LicenseExpiration';E={$script:licInfo.Properties | where{$_.Key -eq 'expirationDate'} | select -ExpandProperty Value}} |

Export-Csv -NoTypeInformation -Path C:\temp\report_esxihosts.csv


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

kradke
Contributor
Contributor

LucD, thank you very much so far!

Of course, you are perfectly right that expiration dates are only available with expiring licenses 😉

With your suggestion, i am getting in fact the additional information on the license type.

But i also have indeed expiring licenses (type "Evaluation Mode"), and in these cases, the expiration date is still an empty field in the output file.

It seems that the licInfo script does not get the proper input values from the Get-View pipe.

Cheers

Karsten

Reply
0 Kudos
LucD
Leadership
Leadership

To confirm, you do you see the expiration dates for those licenses when you look via the Web Client?

And which vSphere version are you using?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
kradke
Contributor
Contributor

See attached picture, that's what i'm seeing in vSphere client.

licenseview.jpg

This environment is vSphere 5.5, the vCenter version is 5.5 Update 3b, build 3252642.

Cheers,

Karsten

Reply
0 Kudos
LucD
Leadership
Leadership

Ok, try this variation

$LicenseManager= Get-view LicenseManager

$LicenseAssignmentManager= Get-View $LicenseManager.LicenseAssignmentManager

Get-View -ViewType HostSystem  |

select Name,

    @{N='Cluster';E={

      $parent = Get-View -Id $_.Parent -Property Name,Parent

      While ($parent -isnot [VMware.Vim.ClusterComputeResource] -and $parent.Parent){

        $parent = Get-View -Id $parent.Parent -Property Name,Parent

      }

      if($parent -is [VMware.Vim.ClusterComputeResource]){

        $parent.Name}}},

@{N="Type";E={$_.Hardware.SystemInfo.Vendor+ " " + $_.Hardware.SystemInfo.Model}},

@{N="BIOS version"; E={$_.Hardware.BiosInfo.BiosVersion}},

@{N="BIOS date";E={$_.Hardware.BiosInfo.releaseDate}},

@{N='Product';E={$_.Config.Product.FullName}},

@{N='Build';E={$_.Config.Product.Build}},

@{N='LicenseType';E={

    $script:licInfo = $LicenseAssignmentManager.GetType().GetMethod("QueryAssignedLicenses").Invoke($LicenseAssignmentManager,@($_.MoRef.Value))

    $Script:licInfo.AssignedLicense.Name

}},

@{N='LicenseExpiration';E={

    $lic = $LicenseManager.Licenses | where{$_.LicenseKey -eq $script:licInfo.assignedlicense.Licensekey}

    $lic.Properties.GetEnumerator() | where{$_.Key -eq 'expirationDate'} | select -ExpandProperty Value}} |

Export-Csv -NoTypeInformation -Path C:\temp\report_esxihosts.csv


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos