Assicurati di leggere gli articoli precedenti della serie:
- Scopri come automatizzare Windows con PowerShell
- Imparare a utilizzare i cmdlet in PowerShell
- Apprendimento Come utilizzare gli oggetti in PowerShell
- Apprendimento della formattazione, del filtro e del confronto in PowerShell
E rimanete sintonizzati per il resto della serie per tutta la settimana.
Cos'è il servizio remoto?
La gestione collettiva dei tuoi server può essere noiosa e, se prima hai dovuto apportare una modifica alla configurazione di IIS su 50 server web, saprai cosa intendo. Questi sono i tipi di situazioni in cui PowerShell Remoting e le abilità di scripting del linguaggio possono venire in soccorso. Utilizzando HTTP o HTTPS più sicuro, PowerShell Remoting consente di inviare comandi a una macchina remota sulla rete dell'utente. La macchina esegue quindi i comandi e restituisce l'output all'utente, che a sua volta viene visualizzato sullo schermo.
Prendiamo il tecnico
Alla base di PowerShell Remoting si trova un singolo servizio Windows, il servizio Gestione remota Windows o WinRM, come è diventato noto. Utilizzando WinRM, è possibile configurare una o più configurazioni di sessione (note anche come endpoint), che sono fondamentalmente file che contengono informazioni sull'esperienza che si desidera fornire alla persona che si connette all'istanza remota di PowerShell. In particolare, è possibile utilizzare i file di configurazione della sessione per definire chi può e chi non può connettersi all'istanza, quali cmdlet e script possono essere eseguiti, nonché il contesto di sicurezza in cui la sessione deve essere eseguita. Utilizzando il servizio WinRM, si impostano anche "ascoltatori", che ascoltano le richieste PowerShell in arrivo. Questi "listener" possono essere HTTP o HTTPS e possono essere associati a un singolo indirizzo IP sulla macchina. Quando si apre una connessione PowerShell con un'altra macchina (tecnicamente ciò avviene usando il protocollo WS-MAN, che è basato su HTTP), la connessione si lega a uno di questi "listener". Gli "ascoltatori" sono quindi incaricati di inviare il traffico all'applicazione associata al file di configurazione della sessione appropriato; l'applicazione (in genere PowerShell ma è possibile avere altre applicazioni di hosting se lo si desidera) quindi esegue il comando e restituisce i risultati attraverso il "listener" attraverso la rete e di nuovo sul computer.
Mostrami come
La prima cosa che devi fare è abilitare i servizi remoti sulla macchina a cui desideri connetterti. Questo può essere fatto eseguendo quanto segue:
Enable-PSRemoting
- Il servizio WinRM si avvia.
- Il servizio WinRM passa dalla modalità di avvio manuale a automatica.
- Crea un listener HTTP che è associato a tutte le tue schede di rete.
- Crea inoltre un'eccezione firewall in entrata per il protocollo WS-MAN.
- Alcune configurazioni di sessione predefinite vengono create
Se si utilizza Windows 7 e la posizione della scheda di rete è impostata su Pubblico, l'abilitazione di PowerShell Remoting avrà esito negativo. Per risolverlo, passa semplicemente al percorso di rete Casa o Lavoro. In alternativa, puoi saltare il controllo della rete usando quanto segue:
Enable-PSRemoting –SkipNetworkProfileCheck
Esistono due modi per connettersi a un'altra macchina utilizzando PowerShell. C'è il metodo one-to-one, che è molto simile all'uso di SSH, e poi c'è il metodo da uno a molti.
Utilizzo di una sessione di PowerShell
Il primo modo per connettersi a una macchina remota che utilizza PowerShell consiste nell'usare qualcosa chiamata PowerShell Session. In poche parole, una sessione ti consente di eseguire comandi sulla macchina remota in modo interattivo, quasi come faresti sulla tua macchina. Per aprire una sessione è sufficiente digitare quanto segue:
Enter-PSSession –ComputerName “Darlah”
Get-ChildItem –Path C:
Utilizzo di Invoke-Command
Il secondo modo in cui è possibile utilizzare PowerShell su una macchina remota è utilizzando Invoke-Command. Il vantaggio dell'utilizzo di Invoke-Command deriva dal fatto che è possibile eseguire lo stesso comando su più macchine contemporaneamente. Come puoi immaginare, questo è particolarmente utile quando vuoi fare qualcosa come raccogliere i log degli eventi dai tuoi server. Invoke-Command segue la seguente sintassi:
Invoke-Command -ComputerName Darlah,localhost -ScriptBlock {Get-EventLog Application -Newest 2}
Nota: esistono alcune eccezioni a questa regola, ad esempio la maggior parte dei tipi primitivi come gli interi può essere deserializzata con i suoi metodi inclusi. C'è anche un processo chiamato Reidratazione dove alcuni metodi possono essere aggiunti agli oggetti deserializzati. Quindi, fai attenzione e ricorda che Get-Member è tuo amico.