Gestire PC in rete locale con PowerShell

Vediamo com'è possibile collegarsi ai vari PC Windows connessi in rete locale da un'unica workstation che fungerà da console di amministrazione.

Windows offre tutto il necessario per controllare lo stato dei PC collegati in rete locale attraverso la finestra di PowerShell. E non è necessario che i sistemi siano attestati sullo stesso dominio e gestiti mediante Active Directory: la possibilità di gestire a distanza i PC collegati alla LAN può essere sfruttata anche nel caso di macchine appartenenti allo stesso gruppo di lavoro (workgroup).

In questo modo, usando la propria console personale, si potrà verificare la configurazione degli altri PC, gli aggiornamenti installati, modificarne i parametri di funzionamento, eseguirvi script, disporne il riavvio e molto altro ancora.

Prima di cimentarvi con i sistemi che utilizzate in produzione, suggeriamo di effettuare qualche test usando delle macchine virtuali collegate alla rete locale come se fossero sistemi fisici (impostazione Scheda con bridge nel caso dell’interfaccia di rete virtuale della virtual machine Virtualbox).

Per gestire i PC in rete locale a distanza usando il solo PowerShell la procedura è tutto sommato abbastanza semplice ma è importante porre la massima attenzione su ciascun passaggio.

Configurazione dei server

Chiamiamo server le macchine che si vogliono configurare via PowerShell: possono essere sistemi Windows Server ma anche Windows 7, Windows 8.1 e Windows 10. Con il termine “server” ci riferiamo quindi semplicemente alle macchine che devono condividere le loro risorse (possono quindi essere anche semplici workstation).

Per consentire ad altri PC connessi in rete locale di collegarsi alla macchina Windows, bisognerà semplicemente digitare powershell nella casella di ricerca del sistema operativo, cliccare con il tasto destro sulla voce Windows PowerShell quindi selezionare Esegui come amministratore.

A questo punto, nella finestra di PowerShell, bisognerà digitare quanto segue:

Enable-PSRemoting -Force

PowerShell provvederà così ad attivare un server HTTP (in un prossimo articolo vedremo come proteggere il flusso delle conversazioni utilizzando HTTPS) sulla macchina e a configurare le opportune regole in Windows Firewall per accettare le connessioni in ingresso.
Per impostazione predefinita, il firewall di Windows viene configurato per accettare le richieste di connessione solo e soltanto sulle interfacce di rete configurate come private oppure all’interno di un dominio.
Digitando Windows Firewall con sicurezza avanzata nella casella di ricerca del sistema operativo quindi selezionando Regole connessioni in entrata, si troveranno le regole Gestione remota Windows (HTTP-In) appena abilitate da PowerShell.

Configurazione del client

A questo punto l’amministratore di sistema può usare un’altra macchina Windows anch’essa collegata alla rete locale per gestire i server configurati in precedenza.

Per procedere in tal senso, basta digitare dapprima Windows+R, scrivere services.msc per aprire la finestra dei servizi installati sulla macchina, cercare Gestione remota Windows (WS-Management), cliccarvi due volte quindi scegliere Automatico (avvio ritardato) come Tipo di avvio e infine cliccare sul pulsante Avvia.

Aprendo una finestra di PowerShell con i diritti di amministratore (così come visto in precedenza), si dovranno quindi digitare i seguenti due comandi:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "COMPUTER1,COMPUTER2,COMPUTER3" -Force
Enter-PSSession -ComputerName COMPUTER1 -Credential NOMEUTENTE

Al posto di COMPUTER1,COMPUTER2,COMPUTER3 dovranno essere indicati, separati da virgole, i nomi o gli indirizzi IP privati dei PC da amministrare.
Nel secondo comando, al posto di COMPUTER1 va specificato il sistema al quale ci si vuole collegare mentre NOMEUTENTE deve essere sostituito con un account amministratore che esiste sulla macchina server del quale si conosce la corrispondente password.

Digitando la password al momento della richiesta, dopo qualche istante di attesa ci si vedrà proporre il prompt del computer remoto. A questo punto, tutti i comandi che si impartiranno verranno eseguiti sulla macchina remota collegata in rete locale: prestare la massima attenzione.

Con i comandi cd e dir si potrà ad esempio passare da una cartella all’altra e verificarne il contenuto.
Digitando Get-HotFix si otterrà la lista completa degli aggiornamenti Microsoft presenti sul sistema remoto; con Get-Service la lista dei servizi e il loro stato; con Start-Job si potrà avviare un’attività in background (per esempio uno script PowerShell); con Restart-Computer -Force si potrà forzare il riavvio della macchina (con Stop-Computer -Force lo spegnimento).

Digitando exit si esce dall’amministrazione del sistema remoto.

Disattivare il servizio di gestione remota Windows sulla macchina client

Nel caso in cui, successivamente, si volesse disabilitare il servizio di gestione remota, basterà aprire un prompt di PowerShell con i diritti amministrativi e usare il comando seguente:

Clear-Item -Path WSMan:\localhost\Client\TrustedHosts -Force
Stop-Service WinRM -PassThru
Set-Service WinRM -StartupType Disabled -PassThru

Il primo comando è opzionale e serve per cancellare tutti gli host verso i quali è stata precedentemente autorizzata la connessione. Si può evitare di impartire questo comando (limitandosi ai due successivi) nel caso in cui si volesse in seguito riavviare il servizio di gestione remota Windows per tornare ad amministrare i sistemi server via PowerShell.

Disinstallare completamente il servizio di gestione remota Windows sui server

La completa disinstallazione del servizio di gestione remota sui sistemi server è leggermente più noiosa.

Abbiamo però riunito i comandi da impartire dalla finestra di PowerShell aperta con i diritti di amministratore:

Disable-PSRemoting -Force
Remove-Item -Path WSMan:\localhost\listener\listener* -Recurse
Stop-Service WinRM -PassThru
Set-Service WinRM -StartupType Disabled -PassThru
Set-NetFirewallRule -DisplayName 'Gestione remota Windows (HTTP-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system -Name LocalAccountTokenFilterPolicy -Value 0

Ti consigliamo anche

Link copiato negli appunti