Pagine

sabato 9 luglio 2011

PowerShell - Esecuzione Remota

Introduzione
Questo post mostra alcuni esempi per eseguire comandi powershell in remoto e spiega come configurare i server affinchè accettino queste connessioni.
Soddisfatti i requisiti sottoelencati si possono utilizzare questi 2 metodi per collegarsi al server/client remoto tramite la console di powershell:
- Enter-PSSession
- Invoke-Command


Prerequisiti
- Powershell 2.0 installato
- Winrm configurato

Configurazione Winrm  Da policy GPO:
Computer->Policy->Administrative Templates->Windows Components->Windows Remote Management->WinRM Service 
  - Allow Basic authentication = Enable 
  - Allow automatic configuration of listeners = Enable (ipv4/ipv6 = *)

Configurazione  Winrm  Manualmente: 
winrm quickconfig

Enter-PSSession
Tramite il comando Enter-PSSession possiamo collegarci direttamente al server e utilizzare il powershell a video come se fossimo direttamente su di esso.

Enter-PSSession -ComputerName <ServerName>
oppure
Enter-PSSession -computername <ServerName> -port 90 -credential<Domain>\<user>

Esempio:
Enter-PSSession -ComputerName Srv1
[Srv1]: PS C:\Users\aaa\Documents>

exit  per uscire dalla sessione. 


Invoke-command
Possiamo utilizzare il comando invoke-command per eseguire un singolo comando (parametro command) oppure uno scriptblock (parametro scriptblock ) sui server remoti.
Invoke-Command -ComputerName server1 , server2 -scriptblock {Get-Process notepad}

Il risultato sarà l'elenco dei processi notepad presenti su server1 e server2


AsJob
Nel caso volessimo eseguire un comando in maniera asincrona su tutti i server presenti all'interno di un file di testo possiamo utilizzare AsJob e Get-Content.
Parametro -Asjob per eseguire più comandi/scriptblock per volta.
Comando Get-Content per leggere il file contenente l'elenco dei server.
Invoke-Command -ComputerName (get-content machines.txt) -scriptblock {robocopy <sintassi robocopy>} -AsJob

In questo esempio verrà eseguito un robocopy in remoto su ogni macchina presente nel file di testo in maniera asyncrona.


Throttlelimit

Nel comando precedente viene aperta una sessione verso tutte le macchine presenti all'interno del file di testo, questo potrebbe essere negativo se le macchine sono molte. 

Aggiungendo il parametro throttlelimit N° (es. -throttlelimit 16) si limita il numero di operazioni simultanee e quindi lo script non eseguirà più di N° operazioni per volta.
Invoke-Command -ComputerName (get-content machines.txt) -scriptblock {robocopy <sintassi robocopy>} -AsJob -throttlelimit 16


Nessun commento:

Posta un commento