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.

Vedi anche