SCENARIUSZ
Aby uprościć to do najłatwiejszego przykładu:
Mam standardowy kontroler domeny Windows 2008 R2 z rolą serwera DHCP. Rozdaje adresy IP za pomocą różnych zakresów IPv4, nie ma problemu.
CO CHCĘ
Chciałbym utworzyć sposób na powiadomienie / wpis w dzienniku zdarzeń / podobny, ilekroć urządzenie uzyska dzierżawę adresu DHCP, a NIE JEST to komputer przyłączony do domeny w usłudze Active Directory. Nie ma dla mnie znaczenia, czy jest to niestandardowy PowerShell itp.
Konkluzja = Chciałbym wiedzieć, kiedy urządzenia niebędące domenami są w sieci bez korzystania z 802.1X w tej chwili. Wiem, że to nie będzie uwzględniać statycznych urządzeń IP. Mam oprogramowanie monitorujące, które skanuje sieć i wyszukuje urządzenia, ale nie jest to tak szczegółowe.
WYKONANE BADANIA / ROZWAŻONE OPCJE
Nie widzę takich możliwości z wbudowanym logowaniem.
Tak, znam standard 802.1X i mam możliwość jego długoterminowej implementacji w tym miejscu, ale jesteśmy trochę wolni od takiego projektu, i choć rozwiązałoby to problemy z uwierzytelnianiem sieci, nadal jest to pomocne dla mnie na zewnątrz celów 802.1X.
Rozejrzałem się za bitami skryptu itp., Które mogą okazać się przydatne, ale rzeczy, które znajduję, doprowadziły mnie do przekonania, że moje google-fu zawiodło mnie w tej chwili.
Uważam, że poniższa logika jest rozsądna ( zakładając, że nie istnieje jakieś istniejące rozwiązanie ):
- Urządzenie otrzymuje adres DHCP
- Zapis dziennika zdarzeń jest rejestrowany (identyfikator zdarzenia 10 w dzienniku kontroli DHCP powinien działać (ponieważ najbardziej interesuje mnie nowa dzierżawa, a nie odnawianie): http://technet.microsoft.com/en-us/library /dd759178.aspx )
- W tym momencie pewien skrypt prawdopodobnie musiałby przejąć pozostałe „KROKI” poniżej.
- W jakiś sposób przeszukuj ten dziennik DHCP w poszukiwaniu tych zdarzeń o identyfikatorze 10 (chciałbym wypchnąć, ale zgaduję, że jedynym rozwiązaniem jest ściągnięcie)
- Przeanalizuj zapytanie o nazwę urządzenia, któremu przypisano nową dzierżawę
- Zapytanie AD o nazwę urządzenia
- JEŻELI nie znaleziono w AD, wyślij wiadomość e-mail z powiadomieniem
Jeśli ktoś ma jakieś pomysły, jak właściwie to zrobić, bardzo bym to docenił. Nie szukam „daj mi kod”, ale chciałbym wiedzieć, czy istnieją alternatywy dla powyższej listy lub czy nie myślę jasno i istnieje inna metoda gromadzenia tych informacji. Jeśli masz fragmenty kodu / polecenia PS, które chcesz udostępnić, aby to osiągnąć, tym lepiej.
Odpowiedzi:
Z podziękowaniami dla ErikE i innych tutaj, poszedłem ścieżką ... Nie powiem, że to właściwa ścieżka, ale skrypt Powershell, który wymyśliłem, załatwia sprawę.
Kod jest poniżej, jeśli ktoś tego chce. Wystarczy uruchomić go ręcznie, wskazując na każdy serwer DHCP lub zaplanować (ponownie wskazując każdy serwer DHCP w skrypcie).
Co robi skrypt:
Co będziesz potrzebował:
Skrypt korzysta z modułu AD (
import-module activedirectory
), więc najlepiej jest go uruchomić na AD DC z DHCP. Jeśli tak nie jest, możesz zainstalować moduł AD PowerShell: http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory- module-in-powershell-in-windows-7.aspxBędziesz także potrzebować poleceń cmdlet Powershell AD, które można znaleźć tutaj: http://www.quest.com/powershell/activeroles-server.aspx . Zainstaluj TE PRZED uruchomieniem skryptu, inaczej się nie powiedzie.
Sam skrypt (zdezynfekowany, musisz skonfigurować niektóre zmienne, aby dostosować je do swoich potrzeb, takie jak nazwy plików wejściowych, domena, z którą chcesz się połączyć, serwer dhcp, z którym chcesz się połączyć, ustawienia poczty e-mail pod koniec itp.):
Mam nadzieję, że pomoże to komuś innemu!
źródło
OK, nie jestem pewien, czy przestrzegam etykiety, ale zamieszczam drugą odpowiedź zamiast edytować moją poprzednią, ponieważ zawierała ona pewne informacje, które mogą być przydatne dla kogoś, nawet jeśli okażą się nieistotne w tym przypadku. Jeśli to czyni mnie idiotą na tym forum, możesz poinformować mnie o moich błędnych sposobach.
Problem jest podzielony na kilka części, oto sugestie dla tych, które uważam za najbardziej interesujące. Bez przykładów z dziennika jest to najlepsze, co mogę zrobić, więc to tylko sugestie, a nie rozwiązania.
Do analizowania wykorzystania dziennika
get-content
z-wait
parametrem. W moim przypadku użycia wystarczy znaleźć błąd w dzienniku błędów.Oto, co zadziałało w moim przypadku użycia, wybacz formatowanie:
Zamiast tego
$_ -match "ERROR"
musisz jakoś oddzielić pole identyfikatora dziennika i nazwę komputera. Nie jestem pewien, jak to zrobić w najlepszy sposób, ale ponieważwhere-object -match
zapewnia obsługę wyrażeń regularnych, myślę, że może to być opcja. Możesz także rozpocząć od zapisania zmiennej $ _ w innej nowej zmiennej, aby móc ją później wygodnie odebrać w rurociągu, w zagnieżdżonych pętlach foreach itp.Zakładając, że możesz dostać się do nazwy komputera, myślę, że
get-adcomputer
cmdlet byłby najprostszym sposobem na zapytanie AD (import-module activedirectory
) i domyślam się, że błąd wysłał wiadomość?Korzystanie z tego
import-csv
byłoby oczywiście znacznie bardziej eleganckie w twoim przypadku, ale nie jestem świadomy żadnego sposobu na dostosowanie go (jeśli ktoś to przeczyta i zna sztuczkę, ale proszę, podziel się).źródło
Zakładając, że masz pewność co do identyfikatora zdarzenia i że żadne inne zdarzenia nie logują się do tego identyfikatora w dzienniku DHCP, ale te, które Cię interesują, wypychanie jest rzeczywiście opcją.
1) Otwórz Menedżera serwera, przejdź do dziennika DHCP w Podglądzie zdarzeń.
2) Znajdź reprezentatywny wpis, do którego chcesz dołączyć swoje działanie. Wybierz i kliknij prawym przyciskiem myszy.
3) Wybierz „Dołącz zadanie do tego wydarzenia”.
4) Otwiera się Kreator tworzenia zadań, zabierz go stąd ...
W rzeczywistości istnieje wyraźna opcja wiadomości e-mail, ale jeśli potrzebujesz więcej logiki, możesz oczywiście skorzystać z opcji uruchomienia programu, aby uruchomić program powershell.exe i dołączyć do niego skrypt. Istnieje wiele doskonałych wskazówek Google, jak pozwolić Menedżerowi zadań uruchamiać skrypty PowerShell, jeśli potrzebujesz wskazówek.
Bezpośrednią alternatywą, jaką widzę, jest użycie metody pull przez parsowanie dziennika zdarzeń za pomocą programu PowerShell w zaplanowanych odstępach czasu. „The Microsoft Scripting Guy”, znany również jako Ed Wilson, napisał kilka niesamowitych postów na blogu, w jaki sposób parsować dziennik zdarzeń za pomocą poleceń cmdlet dostępnych w różnych wersjach programu PowerShell, więc moją propozycją byłoby rozpoczęcie jego blogu.
Jeśli chodzi o rzeczywiste polecenia cmdlet, nie mam teraz czasu, aby wyciągnąć mój zapas przydatnych porcji, ale zajrzę do niego ponownie za dzień lub dwa i może się przydać, jeśli nikt inny nie przyłączy się do niektórych dobrze wybranych, albo nie macie Nie rozwiązałeś tego wszystkiego sam :-)
źródło
Applications and Services Logs
(do tej pory na podstawie moich badań / testów)Chociaż nie dotyczy to pożądanego rozwiązania, opcją, która może osiągnąć twój cel, jest wykorzystanie
arpwatch
( link ), aby powiadomić cię, gdy nowy (wcześniej niewidoczny) host zostanie wyświetlony w sieci.Alternatywą dla systemu Windows
arpwatch
wydaje się być bezkofeinowa, ale nigdy jej nie używałem, więc nie mogę mówić za nią dobrze ani źle.źródło