I denne artikkelen skal vi se på hvordan Group Policy kan administreres ved hjelp av Windows PowerShell.
Hvordan installere Group Policy-modulen i PowerShell
Microsoft har støtte for å administrere Group Policy med PowerShell ved hjelp av den nye Group Policy-modulen for Windows PowerShell som ble lansert med Group Policy Management i Windows Server 2008 R2 og Windows 7 (RSAT).
Før vi går videre er det verdt å nevne at man ikke må ha Windows Server 2008 R2 for å bruke Group Policy-modulen fra Microsoft, verken på domenekontrollere eller andre servere.
For å installere Group Policy Management på Windows Server 2008 R2, åpne “Server Manager”, gå til “Features” og velg “Add Features”.
I wizarden som kommer opp hak av for “Group Policy Management”:

Velg “Next”, “Install” og deretter “Close”.
Alternativt kan installasjonen også gjøres med PowerShell og ServerManager-modulen:

Følgende kommando installerer Group Policy Management:

I tillegg til å være tilgjengelig som en “Feature” i Windows Server 2008 R2, er Group Policy-modulen tilgjengelig via Windows 7 og Remote Server Administration Tools for Windows 7 (RSAT).
Når RSAT er installert på en klient-maskin som er domene-medlem må man aktivere modulen via “Turn Windows features on or off” i Control Panel->Programs.

Bruk av Group Policy-modulen i PowerShell
For å ta i bruk Group Policy-modulen som følger med Group Policy Management Console har man flere muligheter. Den ene er å åpne “Windows PowerShell Modules” under “Administrative Tools” på Start-menyen.

Å åpne denne snarveien er den enkleste måten å starte PowerShell-modulen på, men denne laster også inn alle andre tilgjengelige PowerShell-moduler som er installert på maskinen. For å importere kun Group Policy-modulen i PowerShell-sesjonen kan man gjøre dette fra et vanlig Windows PowerShell promt ved å bruke Import-Module:

Her ser vi også de 25 PowerShell cmdlet`ene som tilhører Group Policy-modulen ved å bruke Get-Command. Som vi ser er det ulike operasjoner man har mulighet til å utføre på Group Policy objekter med disse cmdlet`ene: Backup, restore, kopiering, rapportering, rettighetsstyring og linking for å nevne noen.
Vi kan starte med et enkelt eksempel som lager en ny GPO i gjeldende domenet som heter “Demo”:

Videre linker vi den nye GPO`en opp mot en OU som heter “MyTestOU” med New-GPLink:

Til slutt sletter vi GPO`en med Remove-GPO:

Neste eksempel henter alle Group Policy objekter i gjeldende domene:

Kun de 2 første GPO`ene vises på bildet grunnet et stort antall. Denne listen er som regel lang, og oversikten vi får av Get-GPO –All kan virke uoversiktlig.
For å vise oversikten på en bedre måte kan vi “pipe” alle objektene vi fikk fra Get-GPO videre til Sort-Object hvor vi angir at vi vil sortere objektene på egenskapen “Displayname”. Deretter piper vi objektene videre til Format-Table hvor vi angir at det er kun “Displayname” vi vil se i outputen:

Kun de 17 første objektene vises på bildet over grunnet stort antall.
Vil vi hente informasjon om kun èn enkelt GPO kan vi angi –Name parameteren til Get-GPO og deretter angi navnet på GPO`en:

Dette er vel og bra, men en enkel oversikt over GPO`ene kunne vi også fått lett tilgjengelig i det grafiske grensensnittet for å administrere Group Policy (Group Policy Management Console).
Det neste eksempelet viser et script som er skrevet i den grafiske script-editoren som følger med Windows PowerShell 2.0: Windows PowerShell ISE (tilgjengelig på Start-menyen i Windows 7 under Accessories/Tilbehør).
Dette er et script som utfører en oppgave som ville tatt lang tid å utføre manuelt via det grafiske grensesnittet GPMC. Det vi gjør her er å hente alle GPO`ene i det gjeldende domenet med Get-GPO –All som i eksempelet over. Det vi gjør videre er å pipe alle objektene videre til en cmdlet som heter Foreach-Object. Ved hjelp av denne cmdlet`en får vi utført en såkalt bulk-operasjon/loop mot hver enkelt GPO; Vi lagrer en HTML-rapport som lagres under C:\GPO\”dagens-dato”\Report\”GPO-navn”.html, og vi tar en backup som lagres under C:\GPO\”dagens-dato”\Backup\”GPO GUID”.
Til slutt slettes alle under-mapper i C:\GPO som er eldre enn 7 dager (dette kan droppes, men GPO-backup kan være veldig plasskrevende i større miljøer).

Dette scriptet kan scheduleres til å kjøre for eksempel èn gang per dag. Man har da en hel-automatisert backup- og rapporterings-rutine for alle Group Policy-objekter i domenet som går 1 uke tilbake i tid. Er det gjort endringer kan man sammenligne rapportene fra tidligere dager, og om nødvendige kjøre en restore av en GPO ved hjelp av Restore-GPO.
Skjermbilder fra mappene som genereres av scriptet:


Eksempel på HTML-rapport:

