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