Geek School: imparare a utilizzare i servizi remoti in PowerShell

Sommario:

Geek School: imparare a utilizzare i servizi remoti in PowerShell
Geek School: imparare a utilizzare i servizi remoti in PowerShell

Video: Geek School: imparare a utilizzare i servizi remoti in PowerShell

Video: Geek School: imparare a utilizzare i servizi remoti in PowerShell
Video: Learn and use PowerShell with just three commands - YouTube 2024, Aprile
Anonim
Una delle migliori caratteristiche offerte da PowerShell è la possibilità di gestire da remoto i server. Ti permette anche di gestirli un po 'contemporaneamente.
Una delle migliori caratteristiche offerte da PowerShell è la possibilità di gestire da remoto i server. Ti permette anche di gestirli un po 'contemporaneamente.

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

Dovrai quindi rispondere di si a tutti i prompt. Quando esegui Enable-PSRemoting, alcune modifiche vengono apportate al tuo PC:
Dovrai quindi rispondere di si a tutti i prompt. Quando esegui Enable-PSRemoting, alcune modifiche vengono apportate al tuo PC:
  • 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

Tuttavia, ti consigliamo di cambiare la posizione della tua rete.
Tuttavia, ti consigliamo di cambiare la posizione della tua rete.

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”

Il prompt otterrà un prefisso che indica la macchina su cui si stanno eseguendo i cmdlet.
Il prompt otterrà un prefisso che indica la macchina su cui si stanno eseguendo i cmdlet.
Da qui puoi davvero trattare il prompt come se fossi seduto al computer remoto. Ad esempio, se vuoi vedere tutti i file sull'unità C: puoi fare un semplice:
Da qui puoi davvero trattare il prompt come se fossi seduto al computer remoto. Ad esempio, se vuoi vedere tutti i file sull'unità C: puoi fare un semplice:

Get-ChildItem –Path C:

Se provieni da uno sfondo Linux, puoi pensare di utilizzare questo metodo di remoting one to one come alternativa a PowerShell per SSH.
Se provieni da uno sfondo Linux, puoi pensare di utilizzare questo metodo di remoting one to one come alternativa a PowerShell per SSH.

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}

Poiché il comando viene eseguito in parallelo su tutte le macchine, è necessario un modo per vedere da quale PC proviene un determinato risultato. Puoi farlo osservando la proprietà PSComputerName.
Poiché il comando viene eseguito in parallelo su tutte le macchine, è necessario un modo per vedere da quale PC proviene un determinato risultato. Puoi farlo osservando la proprietà PSComputerName.
Quando usi Invoke-Command, non hai più gli oggetti che potresti aspettarti nella Pipeline. Vedete, per consentire a PowerShell di recuperare le informazioni dalla macchina remota sul vostro computer, hanno bisogno di un modo per rappresentare gli oggetti che il comando che avete eseguito sulle uscite della macchina remota. In questi giorni sembra che il modo scelto per rappresentare una struttura gerarchica dei dati sia l'uso di XML, il che significa che quando si impartisce un comando usando Invoke-Command, i risultati vengono prima serializzati in XML prima di essere rispediti al proprio computer.Una volta che tornano alla tua macchina, vengono nuovamente sottoposti a deserializzazione in un oggetto; il problema è che quando vengono deserializzati, tutti i metodi, ad eccezione del metodo ToString (), che l'oggetto è stato rimosso da esso.
Quando usi Invoke-Command, non hai più gli oggetti che potresti aspettarti nella Pipeline. Vedete, per consentire a PowerShell di recuperare le informazioni dalla macchina remota sul vostro computer, hanno bisogno di un modo per rappresentare gli oggetti che il comando che avete eseguito sulle uscite della macchina remota. In questi giorni sembra che il modo scelto per rappresentare una struttura gerarchica dei dati sia l'uso di XML, il che significa che quando si impartisce un comando usando Invoke-Command, i risultati vengono prima serializzati in XML prima di essere rispediti al proprio computer.Una volta che tornano alla tua macchina, vengono nuovamente sottoposti a deserializzazione in un oggetto; il problema è che quando vengono deserializzati, tutti i metodi, ad eccezione del metodo ToString (), che l'oggetto è stato rimosso da esso.
Image
Image

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.

Compiti a casa

Leggi i segreti di PowerShell Remoting ebook di Don Jones.

Consigliato: