about_Remote
Descrizione breve
Descrive come eseguire comandi remoti in PowerShell.
Descrizione lunga
È possibile eseguire comandi remoti in un singolo o più computer remoti usando una connessione temporanea o persistente. È anche possibile avviare una sessione interattiva con un singolo computer remoto.
Nota
Per usare la comunicazione remota di PowerShell, è necessario configurare i computer locali e remoti per la comunicazione remota. Per altre informazioni, vedere about_Remote_Requirements.
Come avviare una sessione interattiva
Il modo più semplice per eseguire comandi remoti consiste nell'avviare una sessione interattiva con un computer remoto.
All'avvio della sessione, i comandi digitati vengono eseguiti nel computer remoto, come se li digitassero direttamente nel computer remoto. È possibile connettersi a un solo computer in ogni sessione interattiva.
Per avviare una sessione interattiva, usare il Enter-PSSession
cmdlet . Il comando seguente avvia una sessione interattiva con il computer Server01:
Enter-PSSession Server01
PowerShell modifica il prompt dei comandi in modo da includere il nome del computer remoto.
Server01\PS>
È ora possibile digitare i comandi nel computer Server01.
Per terminare una sessione interattiva, digitare:
Exit-PSSession
Per altre informazioni, vedere Enter-PSSession.
Come usare i cmdlet con un parametro ComputerName
Diversi cmdlet hanno un parametro ComputerName che consente di ottenere oggetti da computer remoti.
Poiché questi cmdlet non usano la comunicazione remota di PowerShell basata su WS-Management, è possibile usare il parametro ComputerName di questi cmdlet in qualsiasi computer che esegue PowerShell. I computer non devono essere configurati per la comunicazione remota di PowerShell e i computer non devono soddisfare i requisiti di sistema per la comunicazione remota.
I cmdlet seguenti hanno un parametro ComputerName:
Clear-EventLog Limit-EventLog
Get-Counter New-EventLog
Get-EventLog Remove-EventLog
Get-HotFix Restart-Computer
Get-Process Show-EventLog
Get-Service Stop-Computer
Get-WinEvent Test-Connection
Get-WmiObject Write-EventLog
Ad esempio, il comando seguente ottiene i servizi nel computer remoto Server01:
Get-Service -ComputerName Server01
In genere, i cmdlet che supportano la comunicazione remota senza configurazione speciale hanno un parametro ComputerName e non hanno un parametro Session . Per trovare questi cmdlet nella sessione, digitare:
Get-Command | Where-Object {
$_.Parameters.Keys -contains 'ComputerName' -and
$_.Parameters.Keys -notcontains 'Session'
}
Come eseguire un comando remoto
Per eseguire altri comandi nei computer remoti, usare il Invoke-Command
cmdlet .
Per eseguire un singolo comando o alcuni comandi non correlati, usare il parametro ComputerName di Invoke-Command
per specificare i computer remoti. Usare il parametro ScriptBlock per specificare il comando .
Ad esempio, il comando seguente esegue un Get-Culture
comando nel computer Server01.
Invoke-Command -ComputerName Server01 -ScriptBlock {Get-Culture}
Come creare una connessione permanente
Quando si usa il parametro ComputerName del Invoke-Command
cmdlet, PowerShell stabilisce una connessione temporanea al computer remoto. Chiude la connessione al termine del comando. Tutte le variabili o le funzioni definite in questa sessione temporanea andranno perse.
Per creare una connessione permanente a un computer remoto, usare il New-PSSession
cmdlet . Ad esempio, il comando seguente crea pssessioni nei computer Server01 e Server02 e quindi salva le sessioni PSSession nella $s
variabile.
$s = New-PSSession -ComputerName Server01, Server02
Come eseguire comandi in una sessione PSSession
Con una sessione PSSession è possibile eseguire una serie di comandi remoti che condividono dati, ad esempio funzioni, alias e valori delle variabili. Per eseguire comandi in una sessione PSSession, usare il parametro Session del Invoke-Command
cmdlet .
Ad esempio, il comando seguente usa il Invoke-Command
cmdlet per eseguire un Get-Process
comando nelle sessioni PSSession nei computer Server01 e Server02.
Il comando salva i processi in una $p
variabile in ogni SESSIONE PSSession.
Invoke-Command -Session $s -ScriptBlock {$p = Get-Process}
Poiché la sessione PSSession usa una connessione permanente, è possibile eseguire un altro comando nella stessa sessione PSSession che usa la $p
variabile . Il comando seguente conta il numero di processi salvati in $p
.
Invoke-Command -Session $s -ScriptBlock {$p.count}
Come eseguire un comando remoto in più computer
Per eseguire un comando remoto in più computer, digitare tutti i nomi dei computer nel valore del parametro ComputerName di Invoke-Command
. Separare i nomi con virgole.
Ad esempio, il comando seguente esegue un Get-Culture
comando in tre computer:
Invoke-Command -ComputerName S1, S2, S3 -ScriptBlock {Get-Culture}
È anche possibile eseguire un comando in più sessioni PSSession. I comandi seguenti creano sessioni PSSession nei computer Server01, Server02 e Server03 e quindi eseguono un Get-Culture
comando in ognuna delle sessioni PSSession.
$s = New-PSSession -ComputerName S1, S2, S3
Invoke-Command -Session $s -ScriptBlock {Get-Culture}
Per includere l'elenco dei computer locali, digitare il nome del computer locale, digitare un punto (.
) o digitare localhost
.
Invoke-Command -ComputerName S1, S2, S3, localhost -ScriptBlock {Get-Culture}
Come eseguire uno script sui computer remoti
Per eseguire uno script locale nei computer remoti, usare il parametro FilePath di Invoke-Command
. Non è necessario copiare alcun file. Ad esempio, il comando seguente esegue lo Sample.ps1
script nei computer S1 e S2:
Invoke-Command -ComputerName S1, S2 -FilePath C:\Test\Sample.ps1
PowerShell restituisce i risultati dello script nel computer locale.
Come arrestare un comando remoto
Per interrompere un comando, premere CTRL+C. PowerShell passa la richiesta di interrupt al computer remoto in cui termina il comando remoto.
Ulteriori informazioni
Per informazioni sui requisiti di sistema per la comunicazione remota, vedere about_Remote_Requirements.
Per informazioni sulla formattazione dell'output remoto, vedere about_Remote_Output.
Per informazioni sul funzionamento della comunicazione remota, su come gestire dati remoti, configurazioni speciali, problemi di sicurezza e altre domande frequenti, vedere Domande frequenti sulla comunicazione remota di PowerShell.
Per informazioni sulla risoluzione degli errori di comunicazione remota, vedere about_Remote_Troubleshooting.
Per informazioni sulle sessioni PSSession e sulle connessioni persistenti, vedere about_PSSessions.
Per informazioni sui processi in background di PowerShell, vedere about_Jobs.