Come eseguire comandi utilizzando PowerShell Remoting

  1. Cos’è il Remoting di PowerShell
  2. Configurare gli Ascoltatori WinRM in PowerShell
  3. Crea una Nuova Sessione PowerShell
  4. Utilizza Metodi Invoke per Eseguire Comandi Rapidi in Remoto in PowerShell
Come eseguire comandi utilizzando PowerShell Remoting

Con Windows PowerShell, ci sono più modi per eseguire un comando su computer locali o remoti. Un modo è abilitare il remoting di PowerShell e utilizzare i comandi di sessione di PowerShell.

Questo articolo discuterà di come funziona il remoting di PowerShell, configurare WinRM, un paio di esempi di comandi di sessione di PowerShell e come possiamo accedere in remoto a un computer con accesso da amministratore.

Cos’è il Remoting di PowerShell

Il Remoting di PowerShell (o PSRemoting) è una delle funzionalità frequentemente utilizzate in PowerShell. Di conseguenza, possiamo connetterci senza soluzione di continuità a uno o più computer remoti ed eseguire comandi utilizzando un unico comando.

In poche parole, PSRemoting ci consente di eseguire comandi su computer remoti proprio come se fossimo seduti di fronte a loro. Inoltre, PSRemoting fornisce funzionalità che connettono e autenticano un utente, eseguono cmdlet remoti e visualizzano eventuali output di quel cmdlet sul computer locale.

Pensate a PSRemoting come a SSH o telnet o persino psexec. È solo un modo per eseguire comandi su computer all’interno di PowerShell.

PSRemoting si basa fortemente sull’esecuzione di comandi in una sessione. Una sessione è una shell remota che esegue comandi al suo interno.

Creare una di queste sessioni passa attraverso molti passaggi in background nella console di PowerShell.

Quando iniziamo una sessione di PSRemoting, vengono eseguiti i seguenti passaggi approssimativi:

  1. L’utente tenta di connettersi al server di destinazione su un ascoltatore WinRM. L’ascoltatore WinRM è un piccolo servizio web che gira su un server.

    WinRM è la versione di Microsoft di uno standard di implementazione chiamato WSMan. WSMan è uno standard open source creato con molte altre grandi aziende tecnologiche dell’epoca, come Intel, Dell e Sun Microsystems.

  2. Il processo di autenticazione inizia quando il client si connette all’ascoltatore tramite il protocollo HTTP o HTTPS.

  3. Dopo che il client si è connesso e autenticato al server, PSRemoting genera una sessione.

  4. Dopo che PSRemoting ha generato la sessione, essa è aperta per gli affari. Il client può iniziare a inviare informazioni al server, restituendo eventuali output necessari noti come serializzazione.

    Questa comunicazione è tipicamente crittografata.

Per abilitare PSRemoting, digita il comando qui sotto nella tua console di PowerShell.

Enable-PSRemoting Force

Configurare gli Ascoltatori WinRM in PowerShell

Un client ha bisogno di un luogo dove connettersi tramite la rete. Il client ha bisogno di “parlare” con qualcosa che è “in ascolto” dall’altra parte; la parte “in ascolto” è il ruolo dell’ascoltatore WinRM.

Puoi scoprire tutti gli ascoltatori WinRM in esecuzione su qualsiasi computer Windows utilizzando il comando winrm qui sotto.

winrm e winrm/config/listener

Gli ascoltatori WinRM hanno alcuni componenti essenziali.

  1. Indirizzo di ascolto – L’indirizzo IP a cui si collegano. L’indirizzo di ascolto è l’indirizzo IP del server a cui il client si connette.
  2. Tipo di trasporto – Ogni ascoltatore WinRM ha bisogno di un modo per comunicare con il client; lo fanno tramite trasporto utilizzando HTTP o HTTPS.
  3. Impronta del certificato opzionale – Se un ascoltatore WinRM utilizza HTTPS per il trasporto, deve sapere quale chiave privata utilizzare per autenticare il client; questa chiave si trova utilizzando un’impronta del certificato.

Per aggiungere un computer remoto a un elenco di host attendibili per il computer locale in WinRM, digita il seguente comando qui sotto.

winrm s winrm/config/client '@{TrustedHosts="RemoteComputer"}'

Per verificare e controllare la configurazione di WinRM, digita il seguente comando qui sotto.

winrm quickconfig

Crea una Nuova Sessione PowerShell

Il comando New-PSSession crea una sessione di Windows PowerShell (PSSession) su un computer locale o remoto. Quando si crea una PSSession, PowerShell stabilisce una connessione persistente al computer remoto.

Possiamo eseguire comandi su un computer remoto senza creare una PSSession utilizzando i parametri –ComputerName di Enter-PSSession o Invoke-Command.

Quando utilizzi il parametro –ComputerName, PowerShell crea una connessione temporanea utilizzata per il cmdlet e viene quindi chiusa in seguito.

A partire da Windows PowerShell 6.0, possiamo utilizzare Secure Shell (SSH) per creare e stabilire una sessione su una macchina remota se SSH è abilitato sul computer locale e il computer remoto è configurato con un endpoint SSH di Windows PowerShell.

Uno dei vantaggi di una sessione avviata in remoto basata su SSH di Windows PowerShell è che può funzionare su più piattaforme (Windows, Linux, macOS) o cross-platform.

Per le sessioni basate su SSH, possiamo utilizzare i parametri -HostName o -SSHConnection per specificare il computer remoto e altre informazioni di connessione rilevanti.

New-PSSession -ComputerName DC01 -Credential (Get-Credential)

Ricorda che la sessione generata dal comando New-PSSession è persistente. Ciò significa che possiamo usarla più volte.

Tuttavia, dobbiamo ricordare che dovremmo chiudere la sessione dopo averla utilizzata con il comando Remove-PSSession per evitare rischi per la sicurezza.

Utilizza Metodi Invoke per Eseguire Comandi Rapidi in Remoto in PowerShell

Il cmdlet Invoke-Command è preferibile se scriviamo i comandi eseguiti ora, poiché manteniamo IntelliSense nel nostro IDE. Inoltre, Invoke-Command è vantaggioso se eseguiamo comandi rapidi e facili, ad uso una tantum.

La sessione di qualsiasi metodo Invoke non è persistente e non conserva alcuna sessione che utenti malintenzionati possano abusare.

Il frammento qui sotto è un esempio di Invoke-Command che passa un nome utente e una password di stringa sicura che abiliterà l’esecuzione di comandi a livello di amministratore.

Esempio di Script:

$username = "Username"
$password = "Password"
$secstr = New-Object -TypeName System.Security.SecureString
$password.ToCharArray() | ForEach-Object { $secstr.AppendChar($_) }
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $secstr

Invoke-Command -ComputerName RemoteServer -ScriptBlock { Get-Process } -Credential $cred
Ti piacciono i nostri tutorial? Iscriviti a DelftStack su YouTube per aiutarci a creare altre guide video di alta qualità. Iscriviti
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn