Archivi categoria: powershell

MAC – Installare PowerCLI

Facebooktwittergoogle_plusredditlinkedin
Nel precedente post abbiamo installato la “PowerShell” su mac, siamo quindi pronti per poter procedere con l’installazione della PowerCLI VMware.

Apriamo il terminale ed accediamo alla PowerShell digitando:

LIF:~ Lorenzo$ pwsh

Possiamo procedere con l’installazione della PowerCli VMware semplicemente digitando:


PS /Users/lorenzo> Install-Module -Name VMware.PowerCLI -Scope CurrentUser  

e confermare con “Y” per procedere con il download e l’installazione dei vari moduli….. per verificare che siano stati correttamente installati lanciare il comando …


PS /Users/lorenzo> Get-Module -Name VMware.* -ListAvailable

Tutto sembra essere stato installato correttamente. Siamo pronti per poter utilizzare la PowerCLI su nostro macOS.


Alcuni link utili: 
https://ithinkvirtual.com/2018/03/04/install-powershell-and-vmware-powercli-on-centos/
https://blogs.vmware.com/PowerCLI/2018/03/installing-powercli-10-0-0-macos.html
https://notesfrommwhite.net/2018/02/28/installing-powershell-powercli-on-a-mac/

MAC – Installare PowerShell Core

Facebooktwittergoogle_plusredditlinkedin
Abbiamo precedentemente installato il tool (homebrew) necessario per procedere con l’installazione della PowerShell Core come indicato da documentazione Microsoft.

La successiva componente che dobbiamo installare per poter installare PowerShell e successivamente la PowerCLI, è Homebrew-Cask. Procediamo come indicato di seguito:

LIF:~ Lorenzo$ brew tap caskroom/cask

e continuiamo con l’installare la PowerShell

LIF:~ Lorenzo$ brew cask install powershell

Se tutto è andato correttamente ….

Verifichiamo che tutto funzioni correttamente lanciando il comando …

LIF:~ Lorenzo$ pwsh

Come possiamo vedere la PowerShell installata in questo caso è la v6.0.2, tuttavia per avere maggiori dettagli sulla PowerShell installata possiamo digitare direttamente dal prompt della pwsh:

PS /Users/lorenzo> $PSVersionTable 



Verifichiamo i moduli installati di default 

PS /Users/lorenzo> Get-Module * -ListAvailable




Nel prossimo post procederemo con l’installazione della PowerCli VMware.

Disconnect all CD Drives on all VMs of the Cluster

Facebooktwittergoogle_plusredditlinkedin
Problema
Spesso capita che gli utenti a seguito di installazioni e/o aggiornamenti lascino i CD agganciati alle VM, e questo può causare dei problemi. In caso di DRS attivo in modalità “Fully Automated” VMs con CD-ROM  attivi non migrano da un host all’altro; stessa condizione quando si ha la necessità di mettere in “Maintenance” un nodo.


Soluzione
Per risolvere il problema, si è deciso di creare due script in powershell. Il primo script “ListVMsWithDrive.ps1” per ottenere la lista delle VMs che ha i CD-ROM connessi producendo come output un file di testo che può essere editato ed utilizzato come input del successivo script “DisconnectDrive.ps1” per la rimozione dei CD-ROM dalle VM contenute nel file.

Di seguito lo script “ListVMsWithCDDrive.ps1” per avere una lista delle VMs con i CD-ROM connessi.


########################################################################################

#  File  : ListVMsWithCDDrive.ps1

#  Author: Lorenzo Moglie

#  Date  : 17.04.2018

#  Description : The output of the script is a txt file, containing the list of VMs with 

#                the CD-Rom configured for that cluster

#######################################################################################



$vCenter = "<VIRTUALCENTER>"

$CLS = "<CLUSTER-NAME>"

$User = "<USERNAME>"

$Password = "<PASSWORD>"

$VMlist = ".\VMlist.txt"



Connect-VIServer -Server $vCenter -User $User -password $Password | Out-Null



#List of VMs with CD-ROM connected for the whole vCenter

#Get-VM | Get-CDDrive | Where {$_.ISOPath -ne $null} | Sort-Object -Unique ParentID | FT -AutoSize Parent, IsoPath 



#List of VMs with CD-ROM connected only for the specified Cluster - Output on TXT file

#The file can be used as input od the script DisconnectDrive.ps1

Get-VM -Location $CLS  | Get-CDDrive | Where {$_.ISOPath -ne $null} | Sort-Object -Unique ParentID | FT -AutoSize Parent | Out-File $VMlist



#List of VMs with CD-ROM connected - Output on TXT file 

#The file can be used as input od the script DisconnectDrive.ps1

#Get-VM | Get-CDDrive | Where {$_.ISOPath -ne $null} | Sort-Object -Unique ParentID | FT -AutoSize Parent | Out-File $VMlist

Disconnect-VIServer * -Confirm:$false 




Di seguito lo script “DisconnectDrive.ps1” per disconnettere i CD-ROM


########################################################################################

#  File  : DisconnectDrive.ps1

#  Author: Lorenzo Moglie

#  Date  : 17.04.2018

#  Description : This script disconnect the CD-ROM from the VMs present in the input 

#                file

#######################################################################################



$vCenter = "<VIRTUALCENTER>"

$CLS = "<CLUSTER-NAME>"

$User = "<USERNAME>"

$Password = "<PASSWORD>"

$VMlist = ".\VMlist.txt"



Connect-VIServer -Server $vCenter -User $User -password $Password | Out-Null





foreach($VM in Get-Content $VMlist) {


    if ($VM -ne $null) {


        if (($VM.TrimEnd() -contains "Parent") -or ($VM.TrimEnd() -contains "------")){       


        } else {


            Get-VM -Name $VM.TrimEnd() |Get-CDDrive | Where {$_.ISOPath -ne $null} | Set-CDDrive -NoMedia -Confirm:$false 


        }


    }


}




Disconnect-VIServer * -Confirm:$false 




Si è deciso di creare due script proprio per avere la possibilità di decidere su quale VM andare o meno a rimuovere il CD-ROM.

Se non si ha questo tipo di necessità e si vuole disconnettere il CD-ROM sull’intero DataCenter è possibile lanciare il comando di seguito:


 Get-VM | Get-CDDrive | Where {$_.ISOPath -ne $null} | Set-CDDrive -NoMedia -Confirm:$false 




.

ESXi may take long time to boot – Perennialy Reserved

Facebooktwittergoogle_plusredditlinkedin
Il riavvio dei nodi ESXi risultano essere estremamente lento; un nodo impiega a salire circa 45 minuti rimanendo in uno stato apparentemente frizzato come nell’immagine seguente “vmw_satp_alua”…


terminato l’avvio verifico che all’host sono mappate ben 69 LUN di tipo VMFS e 24 LUN RDM (Allocate a dei cluster Microsoft 🙂 ).

Come indicato dalla KB VMware (1016106) “ESXi/ESX hosts with visibility to RDM LUNs being used by MSCS nodes with RDMs may take a long time to start or during LUN rescan” si è deciso di realizzare lo script (in powershell) seguente per identificare le LUN Raw e marcarle su ogni host che fa parte del cluster come perennialy-reserved.

#------------------------------------------------------
# Il seguente script viene fornito "AS IS"
# Author: Lorenzo Moglie
#------------------------------------------------------

$vCenter = "<VIRTUALCENTER>" #<== Inserire FQDN del vCenter
$CLS = "<CLUSTER NAME>" #<== Il nome del cluster
$User = "<USERNAME>"
$Password = "<PASSWORD>"
$PerenniallyReserved = $true #<== $true=per mapparle ; $false=per smappare le LUN

#Connessione al vCenter
Connect-VIServer -Server $vCenter -User $User -password $Password | Out-Null
#Identifichiamo tutte le LUN RDMs che sono configurate su questo cluster
$RAWDisks = Get-VM -Location $CLS | Get-HardDisk -DiskType "RawPhysical","RawVirtual" | Select ScsiCanonicalName

#Identifichiamo gli Hosts ESXi che fanno parte del cluster
$Hosts = Get-VMHost -Location $CLS

foreach($ESXi in $Hosts) {
$ESXi
$myesxcli = Get-EsxCli -VMHost $ESXi
foreach($RDM in $RAWDisks){
#Comando esxcli come da KB(1016106)
#esxcli storage core device setconfig -d naa.id --perennially-reversed=true
$myesxcli.storage.core.device.setconfig($false, ($RDM.ScsiCanonicalName), $PerenniallyReserved)
}
echo "------------------------------------------------------"
}

Disconnect-VIServer * -Confirm:$false


Lanciato lo script, i server si riavviano in 10 minuti.

Copy-VMGuestFile cmdlet

Facebooktwittergoogle_plusredditlinkedin
Ci siamo trovati nella situazione in cui abbiamo avuto l’esigenza di esportare dei file di configurazione da una VM ripristinata dal Backup (accesa ma sconnessa dalla rete) per poterli ripristinare/copiare nella stessa VM in esercizio. La copia dei file avviene tramite l’utilizzo dei vmtools.

Lo strumento semplice da utilizzare per fare questo è tramite PowerCLI di VMware. Istruzioni sul come installare e configurare la PowerCLI possono essere trovare qui. Di seguito le operazioni operative.

Connettiamoci al vCenter di riferimento …

PS c:\...>Connect-VIServer -Server <virtualcenter> -User <username> -Password <password>




quindi lanciamo il comando con i parametri come di seguito  …

PS c:\...>Copy-VMGuestFile -Source </path/source file> -Destination </path/ 
destination> -VM <VM Name> -GuestToLocal -GuestUser <User> -GuestPassword <password>



maggiori informazioni sull’utilizzo e sui parametri del comando Copy-VMGuestFile si possono avere consultando help ..

PS c:\...>Get-Help Copy-VMGuestFile


PowerShell Core 6: ancora Open Source in trionfo

Facebooktwittergoogle_plusredditlinkedin

E’ passato più di un anno e mezzo da quando il progetto PowerShell 6 è arrivato su GitHub (https://github.com/powershell/powershell). Per la prima volta PowerShell non è solo OpenSource, ma addirittura Cross-Platform. La nuova shell, con l’obiettivo principale di creare un ambiente leggero mantenendo una buona compatibilità con le versioni precedenti, è ormai stata rilasciata in versione stabile su una moltitudine di sistemi operativi. E’ infatti possibile installare la nuova release su tutti i sistemi operativi Windows client a partire da Windows 7 e su Windows Server a partire da 2008 R2, oltre che su molteplici distribuzioni Linux (CentOS, RedHat. Debian, Fedora, OpenSuse) ed addirittura MacOS dalla versione 10.12.

L’installazione è molto semplice e va effettuata a partire dal Setup scaricato direttamente dalla pagina download del progetto (https://github.com/PowerShell/PowerShell/releases), selezionando la versione relativa al proprio sistema operativo. Il setup della versione per Windows x64 ha una dimensione di circa 50MB.

Dopo aver accettato le condizioni e confermato il path per l’installazione possiamo aprire PowerShell 6 mettendo un segno di spunta su “Launch PowerShell”

Per avviare PowerShell successivamente è possibile richiamare pwsh.exe dal prompt dei comandi se siamo su Windows, o avviare pwsh se siamo su Linux o MacOS.

Come possiamo notare stiamo utilizzando l’edizione Core di PowerShell 6, che come abbiamo anticipato è molto leggera ed ha caratteristiche di compatibilità elevate, ma non è possibile utilizzare gli stessi CmdLet dell’edizione Desktop. E’ importante notare che le due edizioni possono coesistere su uno stesso sistema. Se proviamo ad eseguire sulla stessa macchina il comando powershell vediamo che è possibile utilizzare la PowerShell completa.

Potrebbe capitare di leggere della documentazione su questi due componenti, e li vediamo spesso indicati come FullCLR (Windows PowerShell) e CoreCLR (PowerShell Core)

Aiutiamoci con Windows Subsystem for Linux e scopriamo quanti moduli sono disponibili nelle due edizioni di PowerShell. Proviamo a lanciare su entrambe il comando Get-Module -ListAvailable , che ci restituisce l’elenco dei moduli utilizzabili, redirezionando l’output al comando Linux wc -l, che ci indica il numero di righe di cui questo elenco è composto. Il comando completo è quindi:

Get-Module -ListAvailable bash -c “wc -l”

Proviamo ad eseguirlo su PowerShell Core

E successivamente su PowerShell

La differenza è notevole, 22 moduli contro 100, ma come al solito parliamo di progetti nati da pochissimo tempo e sui quali viene investito un gran numero di risorse, quindi ci aspettiamo delle grosse novità in tempi brevi.

Ricordiamo ovviamente che sui sistemi operativi non Windows è utilizzabile unicamente l’edizione Core, ed a questo proposito indichiamo che su alcune distribuzioni Linux si rilevano problemi nell’ottenimento dell’ultima release utilizzando l’opzione update dei vari package manager. Se vi trovate in questa situazione è sufficiente disinstallare e reinstallare il componente utilizzando:

Sulle distribuzioni Debian/Ubuntu:

sudo apt remove powershell && sudo apt-get install powershell

Sulle distribuzioni RedHat/CentOS:

sudo yum remove powershell && sudo yum install powershell

Sul futuro di PowerShell Core, quindi, sappiamo che la direzione su cui il team di sviluppo si sta muovendo è quella di aumentare il numero dei comandi supportati in modo da avere sistemi, anche eterogenei, sempre più in simbiosi ed in grado di scambiarsi il maggior numero di informazioni possibili, così da permettere un management sempre più centralizzato.

Nel frattempo Windows PowerShell continua ad essere supportato ma probabilmente non ci saranno grossi sviluppi futuri.

PowerShell Core 6.0: una nuova era ha inizio

Facebooktwittergoogle_plusredditlinkedin

Da qualche giorno è disponibile una nuova versione di Windows PowerShell, giunta ormai alla sesta versione. La grande novità risiede nell’introduzione della versione Core, che ha l’obiettivo di portare l’utilizzo della shell Microsoft su tutti […]