lunedì 26 agosto 2019

PowerCLI 11.4.0 Updates - Automatic script to remove unnecessary modules improved


Disclaimer: Some of the procedures described below is not officially supported by VMware. Use it at your own risk.

Il 20 Agosto scorso è stata rilasciata la nuova versione PowerCLI 11.4.0 che include numerosi nuovi miglioramenti. Il modulo Horizon View è stato aggiornato per supportare la versione più recente di Horizon View che è la versione 7.9. Esistono alcuni aggiornamenti al modulo Storage, inclusi gli aggiornamenti e tre nuovi cmdlet. Infine, ci sono numerosi aggiornamenti ai cmdlet nel modulo HCX.

Con PowerCLI 11.4.0 vengono forniti i seguenti aggiornamenti:

  • Add support for Horizon View 7.9
  • Added new cmdlets to the Storage module
  • Updated Storage module cmdlets
  • Updated HCX module cmdlets

maggiori informazioni possono essere trovare sul blog ufficiale VMware a questo link.

L'update della PowerCLI di per se è semplice, come indicato anche in un mio precedente post è sufficiente lanciare il comando 'Update-Module -Name VMware.PowerCLI' ... accettare premendo 'A' e listare i moduli disponibili sul sistema con il comando 'Get-Module -Name VMware.* -ListAvailable'


... e come per le precedenti versioni, utilizzando il comando Update-Module per aggiornare i moduli, le versioni esistenti non vengono rimosse. Come vediamo dall'immagine sopra ci sono righe che contengono gli stessi moduli ma con diverse versioni.

Esattamente come indicato nel precedente post "PowerCLI 11.0.0 Updates - Automatic script to remove unnecessary modules" procedo con la rimozione dei moduli non più necessari; utilizzando lo script per la rimozione automatica dei moduli più vecchi.

Lo script è stato modificato per avere un Output migliorato, nel seguente modo
#!/usr/local/bin/pwsh 
########################################################################################
#  File  : PurgeDuplicatePowerCliModules.ps1
#  Author: Lorenzo Moglie
#  Date  : 17.10.2018
#  Update : 26.08.2018
#  Version     : 1.5.0.0
#  Disclaimer  : The script is provided as is, use at your own risk.
#  Description : This script list the VMware Modules Available into a TXT file. Read 
#                the txt file, line by line and comparing the duplicate modules 
#                uninstalling the older version
#######################################################################################

Get-Module -Name VMware.* -ListAvailable | select Name,Version > ModuleList.txt
$NameStr = ""
$VersionApp = ""
$Report = @()
Get-Content ./ModuleList.txt | where {$_ -ne ""} | ForEach-Object { 
 $line=[regex]::Replace($_, "\s+", " ")
 $NameModule,$VersionModule = $line.split(' ')
 $tempModule=@{}
 if($NameStr -match $NameModule) {  
     $tempModule.NameModule = $NameModule
     $tempModule.VerOne = $VersionModule
     $tempModule.VerTwo = $VersionApp
     if ([System.Version]::Parse($VersionModule) -lt [System.Version]::Parse($VersionApp)){
      $tempModule.Removed_Ver = $VersionModule
      Invoke-Expression  "Uninstall-Module -Name $NameModule -RequiredVersion $VersionModule -force"
     } else {
      $tempModule.Removed_Ver = $VersionApp
      Invoke-Expression  "Uninstall-Module -Name $NameModule -RequiredVersion $VersionApp -force"
     }
     $temp = New-Object -TypeName PSObject -Property $tempModule
     $Report += $temp
 }
 $NameStr = $NameModule
 if (($VersionModule -match "Version") -Or ($VersionModule -match "-------")) {
   # Do Nothing 
 } else {
   $VersionApp = $VersionModule
 }
}
$Report | Select NameModule, VerOne, VerTwo, Removed_Ver | Format-Table -AutoSize 
rm ./ModuleList.txt


L'output è il seguente :

That's it.

mercoledì 14 agosto 2019

PowerShell script to retrieve information on VM

Problema
Recentemente mi è capitato di dover recuperare velocemente tramite script PowerShell alcune informazioni come:
  1. Nome Virtual Machine (Inventario vCenter)
  2. Sistema Operativo
  3. Indirizzo IP
  4. Nome host della VM (FQDN)
  5. Indirizzo MAC
per le Virtual Machine presenti in un determinato Datacenter.

Soluzione
Di seguito lo script in powershell per fare questo.
Connect-VIServer -Server <VCSA> -User <Userrname> -Password <Password>
$DTC = "<Datacenter>"

$Report = @()
ForEach ($VM in (Get-Datacenter $DTC) | Get-VM) {
 $tempvm=@{}
 $tempvm.Name = $VM.Name
 $tempvm.GuestOS = If (!$VM.Guest.OSFullName) {"Tools Not Running\Unknown"} Else {$VM.Guest.OSFullName}
 $tempvm.IP = If (!$VM.Guest.IPAddress[0]) {"Tools Not Running\Unknown"} Else {$VM.Guest.IPAddress[0]}
 $tempvm.FullName = If (!$VM.Guest.hostname) {"Tools Not Running\Unknown"} Else {$VM.Guest.hostname}
 $tempvm.MacAddress = (Get-NetworkAdapter -VM $VM.Name).MacAddress
 #$tempvm.CustomFields = $VM.CustomFields
 $temp = New-Object -TypeName PSObject -Property $tempvm
 $Report += $temp
} 
$Report | Select Name, GuestOS, IP, FullName, MacAddress |  Sort Name | Format-Table -AutoSize #Output on Screen
#$Report | Select Name, GuestOS, IP, FullName, MacAddress |  Sort Name | export-csv ".\Export-VMInfo.csv" #Output on file
Come possibile vedere dallo script sopra, l'output viene mostrato in formato tabella direttamente a video, ma può anche essere esportato e salvato in un file .CSV.


That's it!

giovedì 1 agosto 2019

PowerCli to configure and modify Syslog on Hosts ESXi - "update"

Qualche tempo fa ho scritto un post sul come configurare/modificare tramite powercli l'entry syslog degli host ESXi.
Tuttavia l'output che si ottiene non permette di verificare a quale host ESXi si riferisce la configurazione. Modificando gli script nel seguente modo possiamo ottenere il seguente risultato:

Ottenere Informazioni (attuali impostazioni)
foreach ($ESXi in Get-VMHost) {
 Get-AdvancedSetting -Name "Syslog.global.logHost" -Entity $ESXi.Name | Select @{L='Host';E={$ESXi.Name}}, Value
} Format-Table -AutoSize


Impostare syslog
foreach ($ESXi in Get-VMHost) {
 Get-AdvancedSetting -Name "Syslog.global.logHost" -Entity $ESXi.Name | Set-AdvancedSetting -Value "udp://10.1.1.1:514" -Confirm:$false | Select @{L='Host';E={$ESXi.Name}}, Value
} Format-Table -AutoSize


That's it!