Condividi tramite


Esecuzione di comandi remoti

È possibile eseguire comandi in uno o centinaia di computer con un unico comando di PowerShell. Windows PowerShell supporta il calcolo remoto usando varie tecnologie, tra cui WMI, RPC e WS-Management.

PowerShell supporta la comunicazione remota WMI, WS-Management e SSH. In PowerShell 7 e versioni successive, RPC è supportato solo in Windows.

Per altre informazioni sulla comunicazione remota in PowerShell, vedere gli articoli seguenti:

Comunicazione remota di Windows PowerShell senza configurazione

Molti cmdlet di Windows PowerShell hanno un parametro ComputerName che consente di raccogliere dati e cambiare le impostazioni di uno o più computer remoti. Questi cmdlet usano diversi protocolli di comunicazione e sono supportati in tutti i sistemi operativi senza alcuna configurazione speciale.

Questi cmdlet sono i seguenti:

In genere, i cmdlet che supportano la comunicazione remota senza configurazioni speciali includono il parametro ComputerName e non includono invece il parametro Session. Per trovare questi cmdlet nella sessione, digitare:

Get-Command | Where-Object {
    $_.Parameters.Keys -contains "ComputerName" -and
    $_.Parameters.Keys -notcontains "Session"
}

Comunicazione remota di Windows PowerShell.

Usando il protocollo WS-Management, la comunicazione remota di Windows PowerShell consente di eseguire qualsiasi comando di Windows PowerShell in uno o più computer remoti. È possibile stabilire connessioni permanenti, avviare sessioni interattive ed eseguire script nei computer remoti.

Per usare il remoting di Windows PowerShell, è necessario configurare il computer remoto per la gestione remota. Per altre informazioni, incluse le istruzioni, vedere Informazioni sui requisiti remoti.

Dopo aver configurato la comunicazione remota di Windows PowerShell, sono disponibili molte strategie di comunicazione remota. Questo articolo elenca solo alcuni di essi. Per altre informazioni, vedere Informazioni su Remote.

Avviare una sessione interattiva

Per avviare una sessione interattiva con un singolo computer remoto, usare il cmdlet Enter-PSSession . Ad esempio, per avviare una sessione interattiva con il computer remoto Server01, digitare:

Enter-PSSession Server01

Il prompt dei comandi cambia per visualizzare il nome del computer remoto. Tutti i comandi digitati al prompt vengono eseguiti nel computer remoto e i risultati vengono visualizzati nel computer locale.

Per terminare la sessione interattiva, digitare:

Exit-PSSession

Per altre informazioni sui Enter-PSSession cmdlet e Exit-PSSession , vedere:

  • Enter-PSSession (accedi alla sessione PS)
  • Exit-PSSession

Eseguire un comando remoto

Per eseguire un comando in uno o più computer, usare il cmdlet Invoke-Command . Ad esempio, per eseguire un comando Get-UICulture nei computer remoti Server01 e Server02, digitare:

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-UICulture}

L'output viene restituito al computer.

LCID    Name     DisplayName               PSComputerName
----    ----     -----------               --------------
1033    en-US    English (United States)   server01.corp.fabrikam.com
1033    en-US    English (United States)   server02.corp.fabrikam.com

Eseguire uno script

Per eseguire uno script in uno o più computer remoti, usare il parametro FilePath del Invoke-Command cmdlet . Lo script deve essere attivo o accessibile al computer locale. I risultati vengono restituiti al computer locale.

Ad esempio, il comando seguente esegue lo DiskCollect.ps1 script nei computer remoti, Server01 e Server02.

Invoke-Command -ComputerName Server01, Server02 -FilePath C:\Scripts\DiskCollect.ps1

Stabilire una connessione permanente

Usare il New-PSSession cmdlet per creare una sessione permanente in un computer remoto. Nell'esempio seguente vengono create sessioni remote in Server01 e Server02. Gli oggetti sessione vengono archiviati nella $s variabile .

$s = New-PSSession -ComputerName Server01, Server02

Una volta stabilite le sessioni, è possibile eseguire qualsiasi comando al loro interno. Poiché le sessioni sono permanenti, è possibile raccogliere dati da un comando e usarli in un altro comando.

Ad esempio, il comando seguente esegue un Get-HotFix comando nelle sessioni nella $s variabile e salva i risultati nella $h variabile . La variabile $h viene creata in ognuna delle sessioni in $s, ma non esiste nella sessione locale.

Invoke-Command -Session $s {$h = Get-HotFix}

È ora possibile usare i dati nella $h variabile con altri comandi nella stessa sessione. I risultati vengono visualizzati nel computer locale. Per esempio:

Invoke-Command -Session $s {$h | where {$_.InstalledBy -ne "NT AUTHORITY\SYSTEM"}}

Accesso remoto avanzato

PowerShell include cmdlet che consentono di:

  • Configurare e creare sessioni remote sia dalle estremità locali che da quella remota
  • Creare sessioni personalizzate e limitate
  • Importare comandi da una sessione remota che viene effettivamente eseguita in modo implicito nella sessione remota
  • Configurare la sicurezza di una sessione remota

PowerShell su Windows include un provider WSMan. Il provider crea un'unità WSMan: che consente di spostarsi attraverso una gerarchia di impostazioni di configurazione nel computer locale e nei computer remoti.

Per altre informazioni sul provider WSMan, vedere Provider WSMan e About WS-Management Cmdlets oppure nella console di Windows PowerShell digitare Get-Help WSMan.

Per altre informazioni, vedere:

Per ottenere aiuto sugli errori di accesso remoto, vedere about_Remote_Troubleshooting.

Vedere anche