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 permette di eseguire qualsiasi comando di Windows PowerShell in uno o più computer remoti. È possibile stabilire connessioni permanenti, avviare sessioni interattive ed eseguire script in computer remoti.

Per usare la comunicazione remota di Windows PowerShell, è necessario che il computer remoto sia configurato per la gestione remota. Per altre informazioni, incluse le istruzioni, vedere about_Remote_Requirements.

Una volta configurata la comunicazione remota di Windows PowerShell, sono disponibili diverse strategie per usarla. Questo articolo ne indica solo alcune. Per altre informazioni, vedere about_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. Qualsiasi comando digitato nel prompt viene eseguito nel computer remoto e i risultati vengono visualizzati nel computer locale.

Per terminare una sessione interattiva, digitare:

Exit-PSSession

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

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 nel computer locale.

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 sul 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 cmdlet New-PSSession per creare una sessione permanente in un computer remoto. L'esempio seguente crea sessioni remote in Server01 e Server02. Gli oggetti sessione vengono archiviati nella variabile $s.

$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 variabile $h con altri comandi nella stessa sessione. I risultati vengono visualizzati nel computer locale. Ad esempio:

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

Comunicazione remota avanzata

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 in Windows include un provider WSMan. Il provider crea un'unità WSMAN: che permette di spostarsi all'interno di 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 (Informazioni sui cmdlet WS-Management) oppure digitare Get-Help wsman nella console di Windows PowerShell.

Per altre informazioni, vedi:

Per informazioni sugli errori di comunicazione remota, vedere about_Remote_Troubleshooting.

Vedi anche