VMWare – License Report Manager – Parte 2


Hola Blogueros!! Hoy continuamos con la segunda parte del License Report Manager de VMware. Como vimos la semana pasada en su primera parte, este reporte nos proporciona la foto actual de nuestro entorno en cuanto a licencias aunque tiene sus limitaciones. Y como aquí estamos para ayudar e informar en lo posible, hoy, vamos a sacar esa información con un script en powerCli, simple, pero completo.

El script en sí se puede hacer más corto y complejo pero la idea es ir aprendiendo powerCli a la vez que nos hacemos con Powershell en el cuál se apoya.

Empezamos proporcionando las credenciales con las que ejecutaremos el script:

$user = “deCabo”
$pw = “deCabo2012”

Configuramos el fichero csv a modo tradicional. Powershell nos permite convertir la salida directamente en csv pero como he dicho antes, lo vamos a explicar lo más simple posible para que se capte la idea:

$outputfile = “e:\report\vLicenseReport.csv”
$logfile = “e:\public\ vLicenseReport.log”

Introducimos todos los Virtual Centers de los que queremos sacar la información. Deberán estar entre comillas y separados por comas:

$allviservers = (
“deCabo.com”,”deCabo2.com”
)

Inicializamos el array donde vamos a tratar cada Virtual Center:

$viservers=@();

Empezamos a escribir en el log. Esto es importante ya que si obtenemos algún error, sabremos cual es la causa:

Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Starting operation”) –Append

En este bucle comprobamos si todos los Virtual Center que hemos metido están accesibles y sin errores:

foreach ($viserver in $allviservers){
$private:connerr = $true
$private:outputtext=””
$outputtext=Connect-Viserver -Server $viserver -User $user -Password $pw -ErrorAction SilentlyContinue
$connerr=$?
if ( $connerr -eq $false ) {
# get-date -Format “yyyy-MM-dd hh:mm:ss” |$_ +” ” + “Cannot connect to ” + $viserver | Out-File -Append -FilePath $logfile
Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Cannot connect to ” + $viserver) -Append
continue
}
$viservers+=$viserver;
Disconnect-Viserver -Server $viserver -Confirm:$false
}

Construimos la cabecera del fichero csv en el que vamos a dejar la información:

“vCenter;License_Name;License_Key;License_Total;License_Used;License_Information;License_ExpirationDate” | Out-File -FilePath $outputfile

Creamos el bucle en el que pasaremos por cada Virtual Center que hayamos introducido en el array $allviservers:

foreach ($viserver in $viservers){
$bubu=Connect-Viserver -Server $viserver -User $user -Password $pw
Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Reading ” + $viserver) -Append

Las siguientes tres líneas obtienen toda la información de la API de VMware:

$ServiceInstance = Get-View ServiceInstance
$licMgr = Get-View $ServiceInstance.Content.licenseManager
$licAssignMgr = Get-View $licMgr.licenseAssignmentManager

Sacamos la información de licencia por cada Virtual Center:

$vSphereLicInfo = @()
$ServiceInstance = Get-View ServiceInstance

Foreach ($LicenseBy in Get-View ($ServiceInstance | Select -First 1).Content.LicenseManager) {
Foreach ($License in ($LicenseBy | Select -ExpandProperty Licenses)) {
$Details = “” |Select VC, Name, Key, Total, Used, ExpirationDate , Information
$Details.VC = ([Uri]$LicenseBy.Client.ServiceUrl).Host
$Details.Name= $License.Name
$Details.Key= $License.LicenseKey
$Details.Total= $License.Total
$Details.Used= $License.Used
$Details.Information= $License.Labels | Select -expand Value
$Details.ExpirationDate = $License.Properties | Where { $_.key -eq “expirationDate” } | Select -ExpandProperty Value
$vSphereLicInfo += $Details
$out=$viserver + “;” + $Details.Name + “;” + $Details.Key + “;” + $Details.Total + “;” + $Details.Used + “;” + $Details.Information + “;” + $Details.ExpirationDate
$out | Out-File -FilePath $outputfile -Append
}
}
$vSphereLicInfo | Format-Table -AutoSize
Disconnect-Viserver -Server $viserver -Confirm:$false
Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Finished ” + $viserver) -Append
}
Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Operation finished”) -Append

Probarlo y comprobareis que la información obtenida es mucho más completa y ordenada que la proporcionada por el reporte del GUI de VMware.

Espero que os haya servido. Hasta la semana que viene!!

Artículos relacionados

Acerca del autor

Deja tu comentario

Mostrar
Ocultar