Windows: dowiedz się, kto i gdzie jest zalogowany

Windows: dowiedz się, kto i gdzie jest zalogowany
- Och, nic mi nie działa, pomocy!
- Nie martw się, teraz wszystko naprawimy. Podaj nazwę swojego komputera...
(klasyka gatunku od wezwań po wsparcie techniczne)

Dobrze, jeśli masz narzędzie a la BgInfo lub Twoi użytkownicy wiedzą o skrócie Windows+Pauza/Przerwa i wiedzą, jak go nacisnąć. Istnieją nawet rzadkie okazy, którym udało się nauczyć nazwy swojego samochodu. Ale często osoba dzwoniąca, oprócz głównego problemu, ma jeszcze drugi: poznanie nazwy/adresu IP komputera. I często rozwiązanie tego drugiego problemu zajmuje znacznie więcej czasu niż pierwszego (a wystarczyło zmienić tapetę lub zwrócić brakujący skrót :).
Ale o wiele przyjemniej jest usłyszeć coś takiego:
- Tatiana Siergiejewna, nie martw się, już się łączę...


I nie potrzeba do tego wiele.
Specjalista ds. wsparcia technicznego musi jedynie zapamiętać nazwy maszyn i pamiętać, kto dla kogo pracuje.
Zanim opiszę rozwiązanie, z którego aktualnie korzystamy, pokrótce przyjrzę się innym opcjom, aby móc je rzetelnie skrytykować i uzasadnić swój wybór.

  1. Informacje Bgg, Informacje o pulpicie i tym podobne. Jeśli jest dużo pieniędzy, są płatne. Chodzi o to, aby na pulpicie wyświetlały się informacje techniczne: nazwa komputera, adres IP, login itp. W Desktop Info możesz nawet umieścić wykresy wydajności na połowie ekranu.
    Nie podoba mi się to, że na przykład w przypadku tego samego Bginfo użytkownik musi minimalizować okna, aby zobaczyć niezbędne dane. Moi koledzy i ja również obserwowaliśmy więcej niż raz w BgInfo charakterystyczny artefakt, gdy nowy tekst jest wyświetlany na starym.
    Niektórych użytkowników denerwuje fakt, że administratorzy rysują przerażający 192.168.0.123 na twarzy kota rozciągniętego na pulpicie, psując estetykę obrazu tła i oczywiście jest to strasznie demotywujące i całkowicie zabija ducha pracy .
  2. Etykieta a la „Kim jestem” (nie próbuj dopisywać znaku zapytania na końcu :). Klasyczny skrót na pulpicie, za którym kryje się zgrabny lub niezbyt schludny skrypt wyświetlający niezbędne informacje w formie okna dialogowego. Czasami zamiast skrótu umieszczają sam skrypt na pulpicie, co IMHO jest kiepskie maniery.
    Wadą jest to, że aby uruchomić skrót, podobnie jak w pierwszym przypadku, należy zminimalizować wszystkie otwarte okna (nie bierzemy pod uwagę tych szczęściarzy, którzy mają jedyne otwarte okno pasjansa na swoim komputerze roboczym). Swoją drogą, czy Twoi użytkownicy wiedzą, gdzie kliknąć, aby zminimalizować wszystkie okna? Zgadza się, palec w oko administratora.

Ograniczenie sugeruje również, że obie opisane powyżej metody mają główną wadę polegającą na tym, że w zdobywanie informacji zaangażowany jest użytkownik, który może być ślepy, głupi, a nawet kłamać.
Nie będę rozważał możliwości zwiększenia znajomości obsługi komputera, skoro każdy wie, gdzie w Windowsie szukać nazwy swojego komputera: jest to szczytny cel, ale bardzo trudny. A jeśli w firmie występuje rotacja personelu, jest to całkowicie rujnujące. Cóż mogę powiedzieć, w większości przypadków nawet nie pamiętają swojego loginu.

Wylałem swoją duszę i teraz do rzeczy.
Za podstawę przyjęto pomysł mieszkańca Chabrowa średni z ten artykuł.
Istota pomysłu polega na tym, że gdy użytkownik loguje się do systemu Windows, skrypt logowania wprowadza niezbędne informacje (czas i nazwę komputera) do określonego atrybutu konta użytkownika. A kiedy wylogujesz się z systemu, wykonywany jest podobny skrypt wylogowania.

Sam pomysł mi się podobał, ale były pewne rzeczy, z których nie byłem zadowolony w realizacji.

  1. Polityka grupowa, która określa skrypty logowania i wylogowywania użytkowników, dotyczy całej domeny, więc skrypty będą uruchamiane na każdym komputerze, na którym logują się użytkownicy. Jeśli razem ze stacjami roboczymi korzystasz z rozwiązań terminalowych (na przykład produktów Microsoft RDS lub Citrix), takie podejście będzie niewygodne.
  2. Dane wprowadzane są do atrybutu Dział konta użytkownika, do którego przeciętny użytkownik ma dostęp tylko do odczytu. Oprócz atrybutu konta użytkownika skrypt wprowadza również zmiany w atrybucie Dział konta komputera, którego domyślnie użytkownicy nie mogą zmieniać. Dlatego, aby rozwiązanie zadziałało, autor sugeruje zmianę standardów ustawień zabezpieczeń dla obiektów AD.
  3. Format daty zależy od ustawień lokalizacji na maszynie docelowej, więc z jednej maszyny możemy uzyskać 10 listopada 2018 14:53, a z drugiej 11 10:18

Aby wyeliminować te niedociągnięcia, wykonano następujące czynności.

  1. GPO jest powiązany nie z domeną, ale z jednostką organizacyjną z maszynami (rozdzielam użytkowników i maszyny na różne jednostki organizacyjne i doradzam innym). Co więcej, za tryb przetwarzania zasad pętli zwrotnej tryb jest ustawiony łączyć.
  2. Skrypt zapisze dane do konta użytkownika jedynie w atrybucie Informacia, które użytkownik może zmienić samodzielnie dla swojego konta.
  3. Zmieniono fragment kodu generujący wartość atrybutu

Teraz skrypty wyglądają tak:
ZapiszLogonInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logon>" & " @ " & strComputerName
oUser.Setinfo

ZapiszLogoffInfoToAdUserAttrib.vbs

On Error Resume Next
Set wshShell = CreateObject("WScript.Shell")
strComputerName = wshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")
Set adsinfo = CreateObject("ADSystemInfo")
Set oUser = GetObject("LDAP://" & adsinfo.UserName)
strMonth = Month(Now())
If Len(strMonth) < 2 then
  strMonth = "0" & strMonth
End If
strDay = Day(Now())
If Len(strDay) < 2 then
  strDay = "0" & strDay
End If
strTime = FormatDateTime(Now(),vbLongTime)
If Len(strTime) < 8 then
  strTime = "0" & strTime
End If
strTimeStamp = Year(Now()) & "/" & strMonth & "/" & strDay & " " & strTime
oUser.put "info", strTimeStamp & " <logoff>" & " @ " & strComputerName
oUser.Setinfo

Kto pierwszy znajdzie wszystkie różnice pomiędzy skryptami Logowania i Wylogowania, otrzyma plusa za karmę. 🙂
Ponadto, aby uzyskać informację wizualną, utworzono następujący mały skrypt PS:
Get-UsersByPCsInfo.ps1

$OU = "OU=MyUsers,DC=mydomain,DC=com"
Get-ADUser -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

W sumie wszystko jest skonfigurowane raz-dwa-trzy:

  1. utwórz obiekt GPO z niezbędnymi ustawieniami i połącz go z działem ze stacjami roboczymi użytkowników:
    Windows: dowiedz się, kto i gdzie jest zalogowany
  2. chodźmy na herbatę (jeśli AD ma dużą liczbę użytkowników, to trzeba dużo herbaty :)
  3. uruchom skrypt PS i uzyskaj wynik:
    Windows: dowiedz się, kto i gdzie jest zalogowany
    W górnej części okna znajduje się wygodny filtr, w którym możesz wybrać dane na podstawie wartości jednego lub większej liczby pól. Kliknięcie na kolumny tabeli sortuje rekordy według wartości odpowiednich pól.

Możemy pięknie „opakować” nasze rozwiązanie.
Windows: dowiedz się, kto i gdzie jest zalogowany
W tym celu dodamy skrót do uruchomienia skryptu dla specjalistów wsparcia technicznego, którzy w polu „obiekt” będą mieli coś takiego:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Jeśli jest wielu pracowników pomocy technicznej, możesz rozpowszechnić skrót za pomocą GPP.

Kilka komentarzy końcowych.

  • Na komputerze, z którego uruchamiany jest skrypt PS, należy zainstalować moduł Active Directory dla PowerShell (w tym celu wystarczy dodać narzędzia administracyjne AD w komponentach Windows).
  • Domyślnie użytkownik nie może edytować większości atrybutów swojego konta. Należy o tym pamiętać, jeśli zdecydujesz się użyć atrybutu innego niż Informacia.
  • Poinformuj wszystkich zaangażowanych współpracowników, jakiego atrybutu będziesz używać. Na przykład to samo Informacia służy do interaktywnego dodawania notatek do skrzynki pocztowej użytkownika w panelu administracyjnym Exchange Server i ktoś może łatwo je nadpisać lub posmucić się, gdy dodane przez nich informacje zostaną nadpisane przez Twój skrypt.
  • Jeśli masz wiele lokacji Active Directory, uwzględnij opóźnienia replikacji. Na przykład, jeśli chcesz uzyskać aktualne informacje o użytkownikach z witryny AD A i uruchomić skrypt na komputerze z witryny AD B, możesz to zrobić:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

    DCzSiteA — nazwa kontrolera domeny witryny A (domyślnie polecenie cmdlet Get-AdUser łączy się z najbliższym kontrolerem domeny)

Windows: dowiedz się, kto i gdzie jest zalogowany

Źródło obrazu

Byłbym wdzięczny, gdyby zechcieli Państwo wypełnić poniższą krótką ankietę.

W ankiecie mogą brać udział tylko zarejestrowani użytkownicy. Zaloguj się, Proszę.

Czego używasz?

  • bginfo, informacje o pulpicie itp. (darmowe)

  • płatne analogi bginfo

  • Zrobię to tak jak w artykule

  • nieistotne, ponieważ Używam VDI/RDS itp.

  • Jeszcze nic nie używam, ale myślę o tym

  • Nie muszę zbierać takich danych

  • inne (podziel się w komentarzu)

Głosowało 112 użytkowników. 39 użytkowników wstrzymało się od głosu.

Źródło: www.habr.com

Dodaj komentarz