Esaminare la funzionalità di comunicazione remota di Windows PowerShell
La comunicazione remota usa un protocollo open-standard denominato Servizi Web per la gestione (WS-Management o WS-MAN). Come suggerisce il nome, questo protocollo è basato sullo stesso protocollo HTTP o HTTPS usato dai Web browser per comunicare con i server Web. In questo modo il protocollo risulta più semplice da gestire e da instradare attraverso i firewall. I sistemi operativi Windows implementano il protocollo usando il servizio Gestione remota Windows (WinRM). PowerShell supporta la comunicazione remota WMI, WS-Management e Secure Shell (SSH). In PowerShell 6 la comunicazione basata su RPC (Remote Procedure Calls) non è supportata. In PowerShell 7 e versioni successive, RPC è supportato solo in Windows.
È necessario abilitare la comunicazione remota nei computer in cui si desidera ricevere le connessioni in ingresso, anche se non è necessaria alcuna configurazione nei computer che avviano le connessioni in uscita. La comunicazione remota di PowerShell è abilitata per impostazione predefinita per le connessioni in ingresso in tutte le versioni attualmente supportate di Windows Server. È anche possibile abilitarla in qualsiasi computer che esegue Windows PowerShell 3.0 o versioni successive.
Nota
Anche se la comunicazione remota è abilitata per impostazione predefinita nei sistemi operativi Windows Server, non è abilitata per impostazione predefinita nei sistemi operativi client, tra cui Windows 10 e Windows 11.
La comunicazione remota di Windows PowerShell usa WinRM, che può gestire le comunicazioni per altre applicazioni. Ad esempio, in un'installazione di Windows Server 2016 predefinita o successiva, WinRM gestisce le comunicazioni per Windows PowerShell a 64 bit, Windows PowerShell a 32 bit e due componenti Server Manager.
Architettura della comunicazione remota
La comunicazione remota inizia con il servizio WinRM. Registra uno o più listener, ognuno dei quali accetta il traffico in ingresso tramite HTTP o HTTPS. Ogni listener può essere associato a un singolo indirizzo IP locale o a più indirizzi IP. Non esiste alcuna dipendenza da Microsoft Internet Information Services (IIS), il che significa che IIS non deve essere installato per il funzionamento di WinRM.
Il traffico in ingresso include un'intestazione del pacchetto che indica la destinazione prevista o l’endpoint del traffico. In Windows PowerShell questi endpoint sono noti anche come configurazioni di sessione. Ogni endpoint è associato a un'applicazione specifica. Quando il traffico viene indirizzato a un endpoint, WinRM avvia l'applicazione associata, disattiva il traffico in ingresso e attende che l'applicazione completi l'attività. L'applicazione può restituire i dati a WinRM, il quale trasmette i dati al computer di origine.
In uno scenario di Windows PowerShell si inviano comandi a WinRM, che quindi esegue i comandi. Il processo viene elencato come Wsmprovhost nell'elenco dei processi del computer remoto. Windows PowerShell eseguirà quindi questi comandi e convertirà gli oggetti risultanti (se presenti) in XML. Il flusso di testo XML viene quindi restituito a WinRM, che lo trasmette al computer di origine. Windows PowerShell nel computer remoto converte nuovamente il codice XML in oggetti statici. In questo modo i risultati del comando si comportano in modo analogo a qualsiasi altro oggetto all'interno della pipeline di Windows PowerShell.
Windows PowerShell può registrare più endpoint o configurazioni di sessione con WinRM. Infatti, per impostazione predefinita un sistema operativo a 64 bit registrerà un endpoint sia per l'host Windows PowerShell a 64 bit che per l'host a 32 bit. È anche possibile creare endpoint personalizzati con assegnate autorizzazioni e funzionalità estremamente precise.
Comunicazione remota di Windows PowerShell senza configurazione
Molti cmdlet di Windows PowerShell hanno un parametro ComputerName che consente di raccogliere dati e cambiare le impostazioni di uno o più computer remoti. Questi cmdlet usano diversi protocolli di comunicazione e sono supportati in tutti i sistemi operativi senza alcuna configurazione speciale.
Questi cmdlet sono i seguenti:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
In genere, i cmdlet che supportano la comunicazione remota senza configurazioni speciali includono il parametro ComputerName e non includono invece il parametro Session.
Per trovare questi cmdlet nella sessione, immettere:
Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Comunicazione remota di PowerShell su SSH
La comunicazione remota di PowerShell solitamente usa WinRM per la negoziazione di connessione e il trasporto dei dati. SSH è ora disponibile per le piattaforme Linux e Windows e permette a PowerShell di offrire un'autentica comunicazione remota multipiattaforma.
WinRM offre un solido modello di hosting per sessioni remote di PowerShell. La comunicazione remota basata su SSH attualmente non supporta la configurazione di endpoint remoti e JEA (Just Enough Administration).
La comunicazione remota SSH offre la comunicazione remota di base di sessioni di PowerShell tra computer Windows e Linux. La comunicazione remota SSH crea un processo host di PowerShell nel computer di destinazione come sottosistema SSH. In futuro Microsoft intende implementare un modello di hosting generale, simile a WinRM, per supportare la configurazione degli endpoint e JEA.
Nota
I cmdlet New-PSSession, Enter-PSSession e Invoke-Command hanno un nuovo set di parametri per supportare la nuova connessione di comunicazione remota.
Per usare la comunicazione remota di PowerShell tramite SSH, è necessario installare PowerShell 6 o versioni successive e SSH in tutti i computer. È quindi necessario installare sia i file eseguibili client SSH (ssh.exe) che i file eseguibili server (sshd.exe) in modo da poter stabilire una connessione remota da e verso i computer. OpenSSH per Windows è ora disponibile in Windows 10 build 1809 e Windows Server 2019. Per Linux installare la versione di SSH (incluso il server sshd.exe) appropriata per la piattaforma. È anche necessario installare la versione corrente di PowerShell da GitHub per assicurarsi che la funzionalità di comunicazione remota SSH sia disponibile. Il server SSH deve essere configurato per creare un sottosistema SSH in modo da ospitare un processo PowerShell nel computer remoto. È anche necessario abilitare l'autenticazione basata su password o chiave.