Archivio

Archive for ottobre 2015

Aggiornamento forzato di GPO da remoto con PowerShell

Uno degli aspetti più delicati nella gestione delle infrastrutture di dominio sono le Group Policy. Tutti gli amministratori di rete hanno implementato almeno 8 impostazioni mediante le GPO (Group Policy Objects), per intenderci, quelli legati alla scadenza delle password ed il blocco degli account. Pochi, invece, implementano GPO complesse ed ancor meno sfruttano l’applicazione di regole alle OU (Organizational Units) per impostazioni granulari di regole; tutti però hanno l’esigenza di propagare le GPO ai destinatari. Come noto le GPO possono essere per utente o per computer, vengono applicate all’avvio del pc ed all’accesso dell’utente, vengono rinfrescate periodicamente (tipicamente ogni 120 minuti), alcune possono essere recepite dopo un paio di riavvii…e noi stiamo ad aspettare! Noioso, direi! Possiamo far in modo che le GPO su una specifica macchina vengano aggiornate anzi tempo? CERTO! Tra i vari comandi presenti sui nostri pc è disponibile GUPUDATE, un eseguibile che ci permette di aggiornare le GPO per la nostra macchina, ma risulta poco adatto per l’esecuzione su altre macchine; con PowerShell, invece, abbiamo la possibilità di effettuare l’aggiornamento delle GPO di macchine remote con uno sforzo minimo utilizzando il cmdlet Invoke-GPUpdate.

L’utilizzo di questo cmdlet è molto semplice, specificando il parametro -Computer seguito dal nome del computer (o dall’elenco dei nomi di computers separati da virgola) verrà eseguito remotamente l’aggiornamento delle GPO. Ovviamente è disponibile il parametro -Force per imporre l’esecuzione forzata dell’aggiornamento ed è possibile specificare, col parametro -Target, su quale gruppo d’impostazioni agire (Computer oppure Users).

Siccome PowerShell è uno strumento di gestione ed automazione risulta più interessante leggere le macchine a cui applicare l’aggiornamento delle GPO direttamente da Active Directory Domain Services. Utilizzando il cmdlet Get-ADComputer potremo ottenere l’elenco delle macchine e quindi passando in pipe il risultato far eseguire l’operazione mediante il ciclo foreach. Purtroppo Invoke-GPUpdate non ammette il passaggio di parametri in pipe, quindi siamo obbligati ad utilizzare foreach per scandire ogni oggetto estratto da Get-ADComputer.

Così facendo chiederemo al sistema di leggere tutte le macchine da AD DS e riapplicare le GPO. Ovviamente in una piccola realtà questo è sicuramente fattibile in tempi ragionevoli ma in realtà molto estese potrebbe essere abbastanza impegnativo eseguire questa sequenza di cmdlets! Per questo motivo, specie su realtà geograficamente distribuite o molto articolate (in particolare con la struttura delle GPO) sarebbe idoneo applicare un filtro per la lettura dei sistemi da AD DS, per applicare questa limitazione alla ricerca va specificato il parametro -SearchBase al cmdlet Get-ADComputer. Il valore del parametro deve essere imputato in formato LDAP, come nel sottostante esempio (occhio all’accento grave!!!!).

Per far sì che le GPO vengano rilette mediante Invoke-GPUpdate è necessario ricordarsi di abilitare sulle macchine Windows Remote Management (WinRM), mediante l’esecuzione del cmdlet Enable-PSRemoting, e che le porte del firewall siano aperte per garantire l’accesso al servizio WinRM.

Per comodità potrete accedere al file DistribuzioneGPO.ps1 per copiare i cmdlets proposti in questo post. Attenzione alla versione di PowerShell che state utilizzando! È necessario utilizzare almeno la versione 3 (quindi da Windows Server 2012/Windows 8 in poi).

Buono scripting a tutti!!! J

%d blogger hanno fatto clic su Mi Piace per questo: