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

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:
-
L’utente tenta di connettersi al server di destinazione su un ascoltatore
WinRM
. L’ascoltatoreWinRM
è un piccolo servizio web che gira su un server.WinRM
è la versione di Microsoft di uno standard di implementazione chiamatoWSMan
.WSMan
è uno standard open source creato con molte altre grandi aziende tecnologiche dell’epoca, come Intel, Dell e Sun Microsystems. -
Il processo di autenticazione inizia quando il client si connette all’ascoltatore tramite il protocollo HTTP o HTTPS.
-
Dopo che il client si è connesso e autenticato al server,
PSRemoting
genera una sessione. -
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.
- 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.
- Tipo di trasporto – Ogni ascoltatore
WinRM
ha bisogno di un modo per comunicare con il client; lo fanno tramite trasporto utilizzando HTTP o HTTPS. - 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
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn