Centrum skryptów - Systemy Operacyjne

Jak usunąć określony zbiór użytkowników z grupy lokalnych administratorów?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak usunąć określony zbiór użytkowników z grupy lokalnych administratorów?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak usunąć wszystkie konta użytkowników, których nazwa zaczyna się od GER/ad_ z grupy lokalnych administratorów?

-- ID

Cześć Skrypciarze! Odpowiedź

Cześć, ID. Macie czasem coś takiego, że czekacie na coś z niecierpliwością? Ktoś Wam coś obiecał, albo po prostu się czegoś spodziewacie. Może czekacie na kogoś, kto ma wrócić z dalekiej lub niedalekiej podróży. Wiecie, co to za uczucie? Jeżeli tak, wiecie też jak smakuje rozczarowanie, jeżeli to nasze czekanie, oczekiwanie się nie spełni. Kompletna klapa. Zjazd, dół. Nikomu tego nie życzymy.

Czy chcemy w ten sposób przygotować Was na informację, że dziś skryptu nie będzie? Skąd! Skrypciarze tacy nie są. Po prostu uświadamiamy, że mogliście trafić gorzej! A oto i skrypt usuwający z grupy lokalnych administratorów wszystkie konta użytkowników, których nazwa zaczyna się od GER/ad_:

strComputer = "atl-fs-01"



Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators")



For Each objUser In objGroup.Members

    If InStr(objUser.ADsPath, "WinNT://GER/ad_") Then

        objGroup.Remove(objUser.AdsPath)

    End If

Next
Uwaga: W systemie Windows Vista ten skrypt wymaga podniesionych uprawnień. Oznacza to, że w razie uruchamiania z wiersza poleceń należy otworzyć okno poleceń prawym przyciskiem myszy i wybrać opcję uruchomienia jako administrator.

Jak widać, rozpoczynamy od przypisania nazwy docelowego komputera do zmiennej o nazwie strComputer; następnie stosujemy poniższy wiersz kodu w celu połączenia się z grupą lokalnych administratorów na tym komputerze:

Set objGroup = GetObject("WinNT://" & strComputer & "/Administrators")

Ważna rzecz w tym momencie: używamy providera WinNT, z nazwą zapisaną dokładnie w ten sposób (W-i-n-N-T). Jeżeli napiszemy to inaczej (np. winnt lub WINNT), skrypt nie zadziała.

Zanim posuniemy się dalej, powinniśmy zauważyć, że gdybyśmy pracowali z katalogiem Active Directory, moglibyśmy rozpocząć pewnego rodzaju wyszukiwanie w celu zlokalizowania użytkowników „GER/ad_”. Tak czy siak, nie możemy wykonać wyszukiwania dla lokalnych kont. Zamiast tego musimy połączyć się bezpośrednio z grupą administratorów; ponadto musimy uruchomić pętlę For Each, która przejdzie elementy we właściwości grup Members:

For Each objUser In objGroup.Members

Jak można się było spodziewać, elementy z właściwości Members są całkiem zgodne z listą członków grupy. Oznacza to, że teraz wystarczy tylko się dowiedzieć, którzy użytkownicy spełniają nasze kryteria (GER/ad_), a którzy nie.

Co prawda to jest trochę trudne, chociażby dlatego, że ludzie zazwyczaj podczas pracy z kontami lokalnych użytkowników używają właściwości Name. Niewiele nam to pomaga, jeśli wziąć pod uwagę fakt, że właściwość Name nie zawiera nazwy domeny (GER/ w naszym przypadku) i otrzymujemy nazwy podobne do następujących:

kmyer

packerman

jhaas

Wszystko fajnie, ale nie ma sposobu na określenie, czy są to naprawdę lokalne konta użytkowników, czy konta na poziomie domen. A jeżeli to drugie, to nie można sprawdzić, z której domeny te konta pochodzą.

Z tego powodu musimy zastosować właściwość konta ADsPath, a nie właściwość Name. Właściwość ADsPath przekaże nam informację podobną do poniższej, w której GER reprezentuje nazwę domeny:

WinNT://GER/kmyer

WinNT://GER/packerman

WinNT://GER/jhaas

Teraz nasze zadanie jest o wiele prostsze: jeżeli właściwość ADsPath rozpoczyna się od WinNT://GER/ad_, to jest to konto, które musimy usunąć z grupy lokalnych administratorów.

To wyjaśnia nasz następny wiersz kodu, który sprawdza, czy gdzieś we właściwości ADsPath tego konta znajduje się ciąg znaków WinNT://GER/ad_:

If InStr(objUser.ADsPath, "WinNT://GER/ad_") Then

Jeżeli znajdziemy w niej wartość ciągu, wywołujemy metodę Remove (przekazując ADsPath jako jedyny parametr metody) w celu usunięcia tego konta użytkownika z grupy administratorów:

objGroup.Remove(objUser.AdsPath)

Jeżeli nie znajdziemy wartości ciągu, to nie musimy robić zupełnie nic; po prostu kontynuujemy działanie pętli i powtarzamy proces z następnym użytkownikiem z kolekcji. Kiedy już skończymy, usunięci zostaną wszyscy użytkownicy GER/ad_ z grupy lokalnych administratorów.

Nie jest to może tak zabawne, jak wyszukiwanie, ale na pewno skuteczne.

 Do początku strony Do początku strony

Centrum skryptów - Systemy Operacyjne