PowerShell Direct: un nuovo modo di gestire le VM

Con l’arrivo di Windows Server 2016, e conseguentemente di Windows 10, Microsoft ha deciso di introdurre una funzionalità molto interessante per tutti coloro che intendono effettuare operazioni remote in ambienti virtuali.

PowerShell Direct consente di eseguire PowerShell in modo arbitrario all’interno di una macchina virtuale direttamente dall’host Hyper-V, indipendentemente dalle impostazioni di configurazione di rete o di gestione remota.

Per accedere a questa funzionalità è necessario che le VM siano basate su Windows 10 o Windows Server 2016 (e superiori).

Ma perché si dovrebbe usare questa modalità invece del classico PSSession, già disponibile dai tempi di Windows Server 2008 R2? Il motivo va ricercato nel fatto che è possibile collegarsi anche a macchine prive di network o che risiedono in reti diverse da quelle dell’host; inoltre PowerShell Direct consente di avere un canale diretto tra host e VM.

Requisiti di Configurazione

Per poter utilizzare PS Direct, è necessario assicurarsi che le seguenti condizioni siano rispettate:

  • La macchina virtuale deve essere eseguita localmente nell’host
  • La macchina virtuale deve essere attivata e in esecuzione con almeno un profilo utente configurato
  • È necessario accedere al computer host come amministratore di Hyper-V
  • È necessario specificare credenziali utente valide per la macchina virtuale

Creare una Sessione Remota

Per accedere alla macchina virtuale è sufficiente eseguire il comando: Enter-PSSession -VMName nomevm – come mostrato nella figura 1.

Figura 1 – Nuova Sessione PS

Una volta inserite, potrete iniziare a lavorare all’interno della macchina virtuale sfruttando i cmdlet messi a disposizione dalla stessa macchina, come mostra la figura 2. In questo caso è possibile eseguire comandi relativi a Docker, perché si trovano all’interno della macchina a cui mi sto collegato (comandi non disponibili nell’host Hyper-V).

Figura 2 – Esecuzione Comandi

Le connessioni basate su Enter-PSSession sono temporanee e questo significa che ogni volta che si esce, è necessario inserire nuovamente le credenziali di accesso.

Utilizzo Comandi Complessi

La semplice connessione può essere utile per quegli scenari in cui bisogna svolgere attività minori, mentre per attività più strutturate possiamo utilizzare Invoke-Command. Questo comando è perfetto per le situazioni in cui è necessario eseguire un comando, o uno script, su una macchina virtuale in modalità non controllata.

La sintassi può essere di due modi:

Comando: Invoke-Command -VMName nomevm -ScriptBlock { Get-Service }

Script: Invoke-Command -VMName nomevm -FilePath “C:\hyperv-folder\script.ps1”

Figura 3 – Esecuzione Comando

Copia File

Uno dei punti chiave di questa soluzione è sicuramente la possibilità di effettuare copia di file dall’host verso la macchina virtuale. Per usare il cmdlet Copy-Item è necessario però lavorare con una sessione persistente. Queste, una volta create, rimangono in background finché non si decide di eliminarle. Perciò è possibile fare riferimento più volte alla stessa sessione con senza passare credenziali.

Ecco un esempio per inviare dati verso una macchina virtuale:

$VM = New-PSSession -VMName nomevm -Credential (Get-Credential)

Copy-Item -ToSession $VM -Path C:\hyperv-folder\app.exe -Destination C:\guest-vm\

Figura 4 – Copia File

Le performance di questa operazione sono interessanti, perché grazie al VMBus si va a saltare lo strato di driver relativi alla scheda di rete e quindi la copia avviene in modo più rapido. Ovviamente tutto questo dipende anche dalla tipologia di file che vogliamo copiare, così come dalle prestazioni della macchina virtuale (se il vhdx si trova su un disco SSD sarà più veloce che su un disco SATA).

Veeam B&R e PowerShell Direct

Per offrire un livello di protezione delle macchine virtuali in modo avanzato, Veeam Backup & Replication utilizza un componente chiamato Guest Interaction Proxy, che ha il compito di eseguire i seguenti task:

  • Application-aware processing
  • Guest file system indexing
  • Transaction logs processing

Il processo viene eseguito e chiamato in ogni singola VM e consente la comunicazione anche se gli ambienti sono separati tra di loro.

Figura 5 – Guest Interaction Proxy

Importante ricordare che questo ruolo è disponibile solo per le licenze Enterprise ed Enterprise Plus. Per maggiori informazioni su come opera il GIP, potete consultare il seguente link: https://helpcenter.veeam.com/docs/backup/hyperv/guest_interaction_proxy.html?ver=95

Ovviamente la rete è uno dei punti critici di questo processo ma in caso di interruzioni o problemi, PowerShell Direct può intervenire per evitare errori in fase di backup. I requisiti lato host sono un server Hyper-V 2016, mentre le guest machine sono Windows 10 o Windows Server 2016 e superiori.

Figura 6 – PS Direct in Backup & Replication

Conclusione

PowerShell Direct consente di automatizzare facilmente le attività all’interno delle macchine virtuali senza la necessità di accedere al sistema operativo guest tramite GUI. Utile l’integrazione nativa in Backup & Replication che evita errori in caso di problemi.

Ricordate che una sessione interattiva consente di continuare l’attività di amministrazione in base all’output restituito dalla VM, ma con il comando Invoke-Command potete lanciare task avanzati.