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:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
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:
- Domande frequenti sulla comunicazione remota di PowerShell
- Register-PSSessionConfiguration
- Import-PSSession
Per informazioni sugli errori di comunicazione remota, vedere about_Remote_Troubleshooting.