Windows Server 2008

Automatyzacja zarządzania zasadami grupy za pomocą programu Windows PowerShell Udostępnij na: Facebook

Autor: Darren Mar-Elia

Opublikowano: 30 lipca 2009

 

Fragmenty tego artykułu zostały oparte na nieopublikowanych jeszcze wersjach produktów i podane w nich informacje mogą ulec zmianie.

 

Zawartość strony
 Co oferuje konsola GPMC?   Co oferuje konsola GPMC?
 Automatyzacja cyklu życia obiektu GPO   Automatyzacja cyklu życia obiektu GPO
 Automatyzowanie raportów zasad grupy   Automatyzowanie raportów zasad grupy
 Generowanie raportu w formacie HTML   Generowanie raportu w formacie HTML
 Generowanie raportu w formacie XML   Generowanie raportu w formacie XML
 Tworzenie raportów RSoP w trybie rejestrowania   Tworzenie raportów RSoP w trybie rejestrowania
 Prostszy sposób   Prostszy sposób
 O autorze   O autorze

Zasady grupy (ang. Group Policy) to potężna choć skomplikowana technologia. W pewnym stopniu jest ona używana praktycznie w każdym środowisku, a dla wielu administratorów, którzy wykorzystują ją do dokładnego zabezpieczania i blokowania ustalonej konfiguracji środowisk z systemem Windows, zasady grupy są jedną z kluczowych części ich infrastruktury.

Mimo to, zawsze jestem zaskoczony widząc w wielu organizacjach IT, jak niewielki jest stopień automatyzacji zarządzania za pomocą zasad grupy. Wraz z dostarczeniem konsoli GPMC (Group Policy Management Console - Konsola zarządzania zasadami grupy), firma Microsoft dostarczyła również zbiór kilku interfejsów API oraz przykładowe skrypty, pozwalające na automatyzację zadań wykonywanych za pomocą tej konsoli. Dostępne interfejsy API pozwalają na wykonywanie bardzo wielu zadań, a także stwarzają możliwości automatyzacji innych aspektów zarządzania zasadami grupy, takich jak rozwiązywanie problemów lub zadania diagnostyczne. A wraz z nadejściem programu Windows PowerShell niektóre z tych zadań stały się jeszcze łatwiejsze.

Możliwość korzystania z niektórych interfejsów API konsoli GPMC z poziomu programu Windows PowerShell została omówiona przez Thorbjörna Sjövolda, w jego artykule zatytułowanym „Simplify Group Policy Administration with Windows PowerShell" (Uproszczenie administrowania zasadami grupy za pomocą programu Windows PowerShell). W tym artykule opierać się będę na informacjach podanych w artykule Thorbjörna Sjövolda i przedstawię pewne dodatkowe techniki, pozwalające na dalszą automatyzację zarządzania środowiskiem zasad grupy.

Co oferuje konsola GPMC?

Konsola GPMC koncentruje się na działaniach wykonywanych na całym obiekcie zasad grupy (GPO - Group Policy Object), na skojarzonych z tym obiektem uprawnieniach, powiązaniach itp. Nie oferuje ona żadnych możliwości automatyzacji lub zarządzania w odniesieniu do konkretnych ustawień zapisywanych wewnątrz obiektów GPO. Pozwala ona jednak na automatyzację zadań wykonywanych na całych obiektach GPO jako sposób przeprowadzania zmian w obrębie istniejącego środowiska zasad grupy. Za pomocą interfejsu API konsoli GPMC można np. modyfikować powiązania z obiektami GPO. Jeśli zechcemy wdrożyć nowy obiekt GPO, możemy zapisać proces tworzenia tego obiektu w skrypcie, a następnie po wypełnieniu ustawień obiektu przeprowadzić proces tworzenia powiązań tego obiektu, również za pomocą skryptu. Za pomocą odpowiednich skryptów można również zmieniać uprawnienia do obiektów GPO, pozwalające określać grupy zabezpieczeń, których mają dotyczyć ustawienia zapisane w danym obiekcie oraz kto może edytować zawartość danego obiektu GPO.

Oczywiście za pomocą dostępnych interfejsów API można nie tylko zmieniać istniejące obiekty GPO, ale także odczytywać informacje o tych obiektach. Obejmuje to możliwość generowania raportów w formacie HTML lub XML o ustawieniach obiektu GPO, a także raportów o tzw. wynikowych zestawach zasad (RSoP - Resultant Set of Policy) dla zdalnych stacji roboczych i serwerów, które pozwalają sprawdzić, czy zasady grupy zostały pomyślnie zastosowane na tych komputerach.

Warto również wspomnieć, że wraz z opublikowaniem przez firmę Microsoft zaktualizowanej wersji konsoli GPMC, która jest rozpowszechniana z systemem Windows Vista SP1 i Windows Server 2008, pojawiły się także pewne uaktualnienia interfejsów API, związane z obsługą niektórych nowych funkcjonalności, obsługiwanych przez konsolę GPMC oraz zasady grupy. Zmiany te obejmują możliwość tworzenia nowych obiektów GPO na podstawie „startowych obiektów GPO” oraz możliwość dodawania komentarzy do obiektów GPO. Startowe obiekty GPO przypominają szablony - pozwalają one na utworzenie zbioru ustawień zasad z gałęzi Administrative Template (Szablony administracyjne), które będą następnie mogły być stosowane w nowych obiektach GPO, wypełniając wstępnie niektóre z ich ustawień. Na początek chciałbym opisać sposób automatyzacji procesu tworzenia oraz konfigurowania uprawnień i powiązań obiektu GPO, a następnie pokażę, jak do tej automatyzacji można wykorzystać niektóre z nowych funkcjonalności konsoli GPMC.

 Do początku strony Do początku strony

Automatyzacja cyklu życia obiektu GPO

Do zademonstrowania sposobu automatyzacji procesu tworzenia i zarządzania obiektami GPO posłużę się programem Windows PowerShell oraz interfejsami API konsoli GPMC. Demonstrowany przykład polegać będzie na utworzeniu obiektu GPO o nazwie " TechNet Marketing Policy ". Po utworzeniu tego obiektu GPO zamierzam wykorzystać jako punkt wyjścia startowy obiekt GPO o nazwie " User Lockdown Template ” oraz dodać komentarz wskazujący, kto utworzył ten obiekt. Startowy obiekt GPO również można utworzyć za pomocą interfejsów API konsoli GPMC, ale w tym przykładzie przyjęto założenie, że obiekt ten już istnieje.

Kolejnym krokiem, który zamierzam zautomatyzować, jest konfigurowanie uprawnień obiektu GPO. Uprawnienia utworzonego obiektu GPO zostaną skonfigurowane w taki sposób, by zapisane w nim ustawienia zasad grupy dotyczyły wyłącznie użytkowników z grupy " Marketing Users ". Dodana zostanie także nowa grupa o nazwie „ GPO Admins ” z uprawnieniami do edycji obiektu GPO, a na koniec utworzony obiekt GPO zostanie powiązany z jednostką organizacyjną Marketing, znajdującą się w mojej domenie usługi katalogowej Active Directory.

Cały skrypt programu Windows PowerShell, który otrzymał nazwę gpoCreate.ps1, został pokazany na rysunku 1. Widoczne na tym rysunku numery linii zostały dodane wyłącznie dla ułatwienia opisu tego skryptu.

1. $gpmc = New-Object -ComObject GPMgmt.GPM

2. $constants = $gpmc.GetConstants()

3. $domain = $gpmc.GetDomain("cpandl.com",$null,$null)

4. $starter = $domain.GetStarterGPO("{CDFD6B94-BF4E-4D07-8D99-3D416EC7C9A0}")

5. $gpo = $domain.CreateGPOFromStarterGPO($starter)

6. $gpo.DisplayName = "Technet Marketing Policy"

7. $gpo.Description = "Created by Darren for Technet Demo"

8. $permissions = $gpo.GetSecurityInfo()

9. $permissions.RemoveTrustee("Authenticated Users")

10. $applyPermission = $gpmc.CreatePermission("Marketing Users",$constants.permGPOApply,$false)

11. $editPermission = $gpmc.CreatePermission("GPO Admins",$constants.permGPOEdit,$false)

12. $permissions.Add($applyPermission)

13. $permissions.Add($editPermission)

14. $gpo.SetSecurityInfo($permissions)

15. $som = $domain.GetSOM("OU=Marketing,DC=cpandl,DC=com")

16. $som.CreateGPOLink(1,$gpo)

Rysunek 1. Skrypt programu Windows PowerShell, gpoCreate.ps1

Linia 1 jest wymagana to tego, by można było zacząć korzystać z interfejsu API konsoli GPMC. Linia ta powinna znajdować się w każdym skrypcie konsoli GPMC. Tworzy ona instancje obiektu konsoli GPMC i zapisuje ten obiekt w zmiennej $gpmc. Linia 2 zawiera jeszcze jedno, często używane polecenie. Konsola GPMC dostarcza zbioru użytecznych stałych, które są wykorzystywane w różnych zadaniach do określania konkretnego stanu. Sposób korzystania z tych stałych zostanie zademonstrowany w dalszej części skryptu, a na razie zostaną one po prostu przypisane do zmiennej $constants.

Linia 3 służy do pobrania wskaźnika do domeny usługi Active Directory, w której tworzony będzie obiekt GPO. W tym przykładzie jest to domena o nazwie cpandl.com. W tym celu wywoływana jest metoda GetDomain obiektu zapisanego w zmiennej $gpmc. Występujące w tej metodzie dwa parametry $null są opcjonalne i umożliwiają wskazanie konkretnego kontrolera domeny, z którym należy się połączyć podczas łączenia się z domeną. Pozostawienie wartości null dla obu tych parametrów oznacza wybranie opcji domyślnej, polegającej na wyborze kontrolera domeny emulującego podstawowy kontroler domeny (PDC).

W linii 4 następuje pobranie wskaźnika do używanego w tym przykładzie startowego obiektu GPO (User Lockdown Template). Metoda GetStarterGPO umożliwia wywoływanie startowego obiektu GPO wyłącznie za pomocą jego identyfikatora GUID, którego wartość została odczytana za pomocą konsoli GPMC (zadanie to również można wykonać za pomocą skryptu). Argumentem przekazywanym do metody GetStarterGPO jest właśnie wartość tego identyfikatora GUID.

W linii 5 dysponujemy już wskaźnikiem do startowego obiektu GPO, który został użyty do utworzenia nowego obiektu GPO za pomocą metody CreateGPOfromStarterGPO, wywołanej na zmiennej $domain. Nowo utworzony obiekt GPO zostaje zapisany w zmiennej $gpo, dzięki czemu można będzie używać tego obiektu w dalszej części skryptu. Należy zauważyć, że w tym miejscu utworzony obiekt GPO nie ma jeszcze żadnej nazwy (mówiąc dokładniej ma domyślną nazwę „New Group Policy Object”, co oznacza „Nowy obiekt zasad grupy”). W linii 6 następuje więc nadanie temu obiektowi nowej nazwy, poprzez modyfikację właściwości displayName na zmiennej $gpo. W linii 7 dodawany jest komentarz dla obiektu GPO, poprzez ustawienie wartości właściwości description na zmiennej $gpo.

W tym miejscy mamy już gotowy nowy obiekt GPO i następnym zadaniem będzie modyfikacja uprawnień do tego obiektu. Zadanie to rozpoczyna się w linii 8 od pobrania aktualnej listy uprawnień do nowo utworzonego obiektu GPO, poprzez wywołanie metody GetSecurityInfo tego obiektu. W tym przykładzie sposób modyfikowania uprawnień obiektu GPO polegać będzie na pobraniu listy bieżących uprawnień, dodaniu do tej listy lub usunięciu z niej odpowiednich pozycji, a następnie jej ponownym zastosowaniu wobec modyfikowanego obiektu GPO. W linii 9, z listy uprawnień nowo utworzonego obiektu GPO usuwane są domyślne uprawnienia grupy Authenticated Users (Użytkownicy uwierzytelnieni).

W liniach 10 i 11 tworzone są dwa nowe uprawnienia, które chcemy dodać do obiektu GPO. Uprawnienia te zostały utworzone za pomocą metody $gpmc.CreatePermission, do której przekazywana jest nazwa podmiotu (grupy użytkowników) oraz uprawnienia, jakie powinien posiadać ten podmiot. Należy zwrócić uwagę na fakt, że do zdefiniowania uprawnień użyta została zmienna $constants. Właściwość $constants.permGPOApply przyznaje uprawnienie typu „ Read and Apply Group Policy " (Odczyt i stosowanie zasad grupy), które umożliwi członkom grupy przetwarzanie danego obiektu GPO, a właściwość permGPOEdit przyznaje tej grupie także możliwość edytowania obiektu GPO. Wartość $false, będąca ostatnim parametrem metody CreatePermission, oznacza po prostu, że przyznane uprawnienia nie powinny być dziedziczone, co jest zachowaniem domyślnym dla uprawnień obiektów GPO.

Po utworzeniu obu tych uprawnień instrukcje z linii 12 i 13 dodają je z powrotem do listy uprawnień zapisanych w zmiennej $permissions, a instrukcja z linii 14 wywołuje metodę obiektu GPO o nazwie SetSecurityInfo, która powoduje zastosowanie nowej listy wobec obiektu GPO.

Ostatnie dwie linie tworzą powiązanie obiektu GPO z jednostką organizacyjną Marketing. W linii 15 następuje wywołanie metody GetSOM (litery SOM pochodzą od słów „scope of management”, oznaczających „zasięg zarządzania”) na zmiennej $domain w celu „połączenia się” ze wskazaną jednostką organizacyjną. W linii 16 wywoływana jest metoda CreateGPOLink utworzonego wcześniej obiektu $som, do której przekazywane są dwa parametry. Pierwszy z nich określa kolejność, w jakiej dany obiekt GPO ma zostać powiązany z jednostką organizacyjną (z jedną jednostką organizacyjną może być powiązany więcej niż jeden obiekt GPO). Wartość „ 1 ” pierwszego parametru oznacza, że dany obiekt GPO ma zostać powiązany jako pierwszy. Drugi parametr (w tym przypadku jest to zmienna $gpo) jest wskaźnikiem do obiektu GPO, który ma zostać powiązany z daną jednostką organizacyjną. W ten sposób, korzystając z metod automatyzacji, utworzyliśmy obiekt GPO, skonfigurowaliśmy jego uprawnienia i powiązaliśmy go ze wskazaną jednostką organizacyjną. Rezultat tego działania został pokazany na rysunku 2.

Rysunek 2: Przeglądanie nowo utworzonego obiektu GPO.

 Do początku strony Do początku strony

Automatyzowanie raportów zasad grupy

Kolejnym aspektem zarządzania zasadami grupy, który również można zautomatyzować, jest raportowanie. Pod tym względem istnieją przynajmniej dwa rodzaje raportów dostarczanych przez konsolę GPMC. Pierwszy z nich polega na możliwości raportowania ustawień zapisanych w obiekcie GPO. Pozwala to na generowanie raportów w formacie HTML lub XML, zawierających wykaz wszystkich ustawień, które są aktualnie włączone w danym obiekcie GPO, co zostało pokazane na rysunku 3.

Rysunek 3: Raport z ustawieniami obiektu GPO.

Druga funkcja raportowania pozwala na generowanie raportów o wynikowych zestawach zasad (RSoP - Resultant Set of Policy) lub wynikowych raportów zasad grupy (Group Policy Results). Istnieją dwa rodzaje raportów RSoP - raporty rejestrowania i raporty planowania. Raporty rejestrowania są uruchamiane dla zdalnych komputerów lub serwerów pokazując, jakie zasady zostały dostarczone do tych zdalnych systemów i czy zostały one pomyślnie zastosowane. Raporty RSoP tworzone w trybie planowania pozwalają przeprowadzać analizę typu „co by było gdyby” dla konkretnych jednostek organizacyjnych, komputerów lub użytkowników, pozwalając na sprawdzanie, jakie zasady grupy zostaną zastosowane wobec tych podmiotów. W obydwu przypadkach, raportów tworzonych w trybie rejestrowania lub planowania, korzystając z programu Windows PowerShell oraz z interfejsów API konsoli GMPC generowane są raporty w formacie HRML lub XML.

 Do początku strony Do początku strony

Generowanie raportu w formacie HTML

W celu wygenerowania za pomocą programu Windows PowerShell raportu o ustawieniach obiektu GPO zaczniemy od dwóch znajomych poleceń inicjujących, które użyte zostały także w poprzednim skrypcie:

1. $gpmc = New-Object -ComObject GPMgmt.GPM

2. $constants = $gpmc.GetConstants()

Następnie należy uzyskać wskaźnik do obiektu GPO, którego ma dotyczyć tworzony raport. Można to zrobić w następujący sposób:

3. $domain = $gpmc.GetDomain("cpandl.com",$null,$null)

4. $gpo = domain.GetGPO("{31B2F340-016D-11D2-945F-00C04FB984F9}")

W tym przykładzie, instrukcja z linii 3 ponownie realizuje połączenie z domeną, a następnie instrukcja z linii 4 wykorzystuje metodę GetGPO obiektu domeny do uzyskania wskaźnika do obiektu GPO, dla którego chcemy utworzyć raport. Metoda GetGPO wymaga przekazania jej identyfikatora GUID obiektu GPO, którym w tym przypadku jest obiekt „Default Domain Policy” (Domyślna zasada domeny).

Następnie pozostaje już tylko wygenerowanie raportu o ustawieniach:

5. $gpo.GenerateReportToFile($constants.ReportHTML,"c:\GPReports\DDPSettings.html")

W tym przykładzie w celu wygenerowania raportu o ustawieniach wywoływana jest metoda obiektu GPO o nazwie GenerateReportToFile. Jako pierwszy parametr tej metody, użyta została zmienna $constants, za pomocą której poinformowaliśmy tę metodę, że chcemy uzyskać raport w formacie HTML. Drugi z parametrów wskazuje ścieżkę do lokalizacji, w której należy zapisać gotowy raport.

 Do początku strony Do początku strony

Generowanie raportu w formacie XML

Innym sposobem na odczytanie wartości ustawień za pomocą programu Windows PowerShell jest wykorzystanie wbudowanych możliwości tego programu w zakresie przetwarzania formatu XML oraz możliwości generowania raportu o ustawieniach w formacie XML. W tym celu należy w następujący sposób zmienić linię 5 z powyższego przykładu:

[xml]$report = ($gpo.GenerateReport($constants.ReportXML)).Result

W tym przykładzie użyta została inna metoda obiektu GPO, o nazwie GenerateReport. Metoda ta ma tylko jeden parametr określający rodzaj raportu. Jednak w tym przypadku rezultat działania tej metody został przypisany do zmiennej o nazwie $report, a nazwa tej zmiennej została poprzedzona akceleratorem typu [xml], który mówi programowi Windows PowerShell, by zapisywany w tej zmiennej rezultat przetworzyć na dokument w formacie XML, zamiast zapisywać go jako zwykły tekst. Jednak, aby korzystając z metody GenerateReport faktycznie uzyskać raport w formacie XML, należy skorzystać z właściwości Result jej strumienia wyjściowego, co widać na końcu pokazanej instrukcji. Tak więc właściwość Report zawiera faktyczną wartość w formacie XML, która zostanie użyta do wygenerowania naszego dokumentu XML.

Dysponując już wartością XML zapisaną w zmiennej $report możemy zrobić z tą zmienną wiele interesujących rzeczy. Rozważmy np. następujące polecenie:

$report.GPO

Spowoduje ono zwrócenie zapisanej w dokumencie wartości elementu „GPO”, który zawiera ogólne informacje o obiekcie GPO, dla którego utworzony został ten raport. Albo weźmy np. takie polecenie:

$report.GPO.LinksTo

To polecenie spowoduje zwrócenie listy wszystkich miejsc, z którymi jest powiązany dany obiekt GPO.

Co ciekawsze, strukturalną naturę wartości XML można wykorzystać do badania z poziomu wiersza poleceń faktycznych ustawień zapisanych w obiekcie GPO. Np. ponieważ użytym w tym przykładzie obiektem GPO był obiekt „Default Domain Policy”, więc prawdopodobnie zawierać on będzie jakieś ustawienia zabezpieczeń związane z zasadami haseł. Nawigując po przestrzeni nazw obiektu GPO odwzorowanej w strukturze pliku XML możemy szybko dotrzeć do tych ustawień w następujący sposób:

$report.GPO.Computer

To polecenie zwróci informacje o węźle Computer z obiektu GPO. Jeśli przyjrzymy się właściwościom tej właściwości Computer, to zauważymy kolekcję obszarów zasad wymienionych jako wartość właściwości ExtensionData, co zostało pokazane na rysunku 4.

Rysunek 4: Przeglądanie ustawień obiektu GPO za pomocą właściwości wartości w formacie XML.

W tym przypadku mamy do czynienia z dwoma obszarami rozszerzeń istniejącymi w węźle Computer tego obiektu GPO: Registry i Security. Tak więc jako następne, należy wydać następujące polecenie:

$report.GPO.Computer.ExtensionData[0].Extension

To polecenie zwróci już całkiem sporo obszarów zasad zaimplementowanych w sekcji zasad Security. Wśród nich znajdują się dwie właściwości o nazwach Account i Security Options . Kolejnym poleceniem będzie więc następujące polecenie:

$report.GPO.Computer.ExtensionData[0].Extension.Account

To polecenie zwróci listę wszystkich ustawień zasad konta, zapisanych w tym obiekcie GPO, co zostało pokazane na rysunku 5.

Rysunek 5: Przeglądanie ustawień zasad konta, zapisanych w obiekcie GPO.

Należy zwrócić uwagę na fakt, że dla niektórych z ustawień widocznych na rysunku 5 nie są widoczne ich wartości. Każde ustawienie jest zwracane jako element kolekcji znajdującej się we właściwości Account. Tak więc chcąc poznać np. wartość ustawienia Minimum Password Length (Minimalna długość hasła) należy posłużyć się indeksem tego ustawienia w całej kolekcji, np. w następujący sposób:

$report.GPO.Computer.ExtensionData[0].Extension.Account[4]

Znając już sposób poruszania się po przestrzeni nazw XML w poszukiwaniu ustawień obiektu GPO możemy z łatwością odszukiwać konkretne ustawienia i wykorzystywać tę możliwość w połączeniu z programem Windows PowerShell do całkiem szybkiego lokalizowania wartości ustawień zapisanych wewnątrz obiektu GPO.

 Do początku strony Do początku strony

Tworzenie raportów RSoP w trybie rejestrowania

Podobnie jak w przypadku ustawień zapisanych w obiekcie GPO, korzystając z programu Windows PowerShell można również generować raporty w formacie XML lub HTML, pokazujące ustawienia zasad grupy, które zostały zastosowane na danym komputerze. W tym przypadku sposób realizacji tego celu jest nieco inny. Zaczynając od tych samych dwóch poleceń inicjujących nasz skrypt podążać będzie w nieco innym kierunku:

1. $gpmc = New-Object -ComObject GPMgmt.GPM

2. $constants = $gpmc.GetConstants()

3. $rsop = $gpmc.GetRSOP($constants.RSOPModeLogging,$null,0)

4. $rsop.LoggingComputer = "xp2"

5. $rsop.LoggingUser = "cpandl\dpmtest"

6. $rsop.CreateQueryResults()

7. $rsop.GenerateReportToFile($constants.ReportHTML,"c:\gpreports\XP2Rsop.html")

Po przygotowaniu procesu przez instrukcje z linii 1 i 2, instrukcja z linii 3 tworzy zmienną $rsop, wywołując metodę GetRSOP na zmiennej $gpmc. Pierwszy argument użyty w wywołaniu tej metody wskazuje, że chcemy uzyskać raport RSoP w trybie rejestrowania, a nie w trybie planowania. Instrukcje z linii 4 i 5 ustawiają właściwości obiektu $rsop, wskazując komputer i użytkownika, dla którego należy zgromadzić dane raportu RSoP. Zadaniem instrukcji z linii 6 jest połączenie się z komputerem określonym w linii 5 oraz wygenerowanie przestrzeni nazw raportu RSoP dla tego zapytania. Na koniec, instrukcja z linii 7 zwraca rezultat zapytania w formacie HTML, zapisując go we wskazanym pliku.

Należy zauważyć, że obiekt raportu RSoP również posiada metodę GenerateReport, która jest podobna do metody o takiej samej nazwie, używanej wcześniej w przykładzie z generowaniem raportu o ustawieniach obiektu GPO. Możliwe jest również utworzenie raportu RSoP w formacie XML i nawigowanie po nim za pomocą programu Windows PowerShell, sprawdzając z perspektywy zasad grupy, co się dzieje na wskazanym zdalnym kliencie. Przypuśćmy np., że chcemy szybko sprawdzić, czy przetwarzanie danego obiektu GPO miało wpływ na ustawienia z gałęzi Computer. W tym celu możemy posłużyć się poprzednim skryptem, zastępując w nim linię 7 następującą linią:

[xml]$rsopReport = ($rsop.GenerateReport($constants.ReportXML)).Result

Spowoduje to utworzenie raportu RSoP jako dokumentu XML.

Następnie, poruszając się po przestrzeni nazw tego dokumentu XML, możemy znaleźć status rozszerzenia CSE (Client-Side Extension - Rozszerzenie po stronie klienta) dla wybranego komputera, za pomocą następującej instrukcji:

$rsopReport.Rsop.ComputerResults.ExtensionStatus

Po wykonaniu tej instrukcji otrzymamy listę wszystkich rozszerzeń CSE, które zostały przetworzone na wskazanym komputerze!

 Do początku strony Do początku strony

Prostszy sposób

Przedstawione dotychczas przykłady pokazują, jak wielki potencjał ma wykorzystywanie interfejsów API konsoli GPMC do automatyzacji cyklu życia obiektów GPO oraz do wykonywania różnych zadań zarządzających i diagnostycznych. Choć uzyskanie oczekiwanego rezultatu wymaga wykonania sporej liczby kroków, to istnieją narzędzia pozwalające na uproszczenie niektórych zadań, a liczba tych narzędzi może się jeszcze zwiększyć.

Utworzyłem 25 bezpłatnych i łatwych w użyciu poleceń typu cmdlet dla programu Windows PowerShell, które realizują najbardziej typowe funkcje konsoli GPMC. Polecenia te można pobrać ze strony www.sdmsoftware.com/freeware. Aby pokazać, jak przygotowane przeze mnie polecenia typu cmdlet

mogą uprościć wykonywane procesy, pokazany poniżej skrypt tworzy obiekt GPO, konfiguruje jego uprawnienia i tworzy odpowiednie powiązania, wykonując to samo zadanie, które wykonywał skrypt z pierwszego zamieszczonego w tym artykule przykładu, ale za pomocą mniejszej liczby poleceń:

$gpo = New-SDMgpo "Technet Marketing Policy" 

  -FromStarterGPO "User Lockdown Template" –native

$gpo.Description = 

  "Darren's Technet Demo GPO" Remove-SDMgpoSecurity 

$gpo.DisplayName -Trustee "Authenticated Users"  –PermApply

Add-SDMgpoSecurity $gpo.DisplayName 

  -Trustee "Marketing Users" –PermApply

Add-SDMgpoSecurity $gpo.DisplayName 

  -Trustee "GPO Admins" –PermEdit

Add-SDMgplink "Technet Marketing Policy" 

  -Scope "OU=Marketing,DC=cpandl,DC=com" -Location 1

Systemy Windows 7 i Windows Server 2008 R2 oferować będą jeszcze lepsze polecenia typu cmdlet dla konsoli GPMC. Np. do utworzenia naszego przykładowego obiektu GPO na podstawie startowego obiektu GPO i opatrzenia go komentarzem wystarczy jedno następujące polecenie programu Windows PowerShell:

new-gpo "Darren's Technet Policy" -starterGPOName "User Lockdown Template" -Comment "Darren's Demo"

Firma Microsoft zamierza również dodać możliwość odczytywania i zapisywania całego podzbioru ustawień zasad grupy. W szczególności przewidziana jest możliwość odczytywania i zapisywania ustawień rejestru albo w dotychczasowych zasadach z gałęzi Administrative Template (Szablony administracyjne), albo w nowym rozszerzeniu rejestru o nazwie Group Policy Preferences (Preferencje zasad grupy). Np. w celu przepisania nowej wartości rejestru do elementu Group Policy Preferences można posłużyć się następującym poleceniem:

Set-GPPrefRegistryValue "Darren's Technet Policy" 

  -key 'HKEY_LOCAL_MACHINE\Software\SDM Software' 

  -ValueName "Path" -Value "2" -Type String 

  -Context Computer -Action Update

W powyższym przykładzie, cmdlet Set-GPPrefRegistryValue pobiera kilka parametrów powodujących utworzenie w obiekcie GPO o nazwie „Darren's Technet Policy" ustawień zasad grupy odpowiadających kluczowi rejestru HKEY_LOCAL_MACHINE\Software\SDM Software\Path= REG_SZ 2 . Parametr Context mówi, czy stawienia zasad należy umieścić w gałęzi Computer, czy w gałęzi User wskazanego obiektu GPO, a parametr Action określa sposób zastosowania wartości rejestru i odpowiada opcjom udostępnianym przez interfejs użytkownika preferencji zasad grupy (GPP UI) (pozostałe możliwe opcje to Replace - Zastąp, Create - Utwórz oraz Delete - Usuń).

W chwili pisania tego artykułu planowane było dołączenie do systemu Windows 7 oraz Windows Server 2008 R2 25 poleceń typu cmdlet, przeznaczonych do zarządzania zasadami grupy. Polecenia te pozwolą na znaczne uproszczenie procesu zarządzania zasadami grupy za pomocą programu Windows PowerShell.

 Do początku strony Do początku strony

O autorze

Darren Mar-Elia jest posiadaczem certyfikatu Microsoft Group Policy MVP, twórcą popularnej witryny webowej poświęconej zasadom grupy, www.gpoguy.com, oraz współautorem książki Microsoft Windows Group Policy Guide (wydawnictwo Microsoft Press, 2005). Jest również dyrektorem do spraw technicznych i założycielem firmy SDM Software, Inc. Z Darrenem można skontaktować się wysyłając e-mail na adres Darren@gpoguy.com.

 Do początku strony Do początku strony

Windows Server 2008