Windows: aflăm cine este autentificat unde

Windows: aflăm cine este autentificat unde
— Oh, nimic nu funcționează, ajutați-mă!
— Nu vă faceți griji, acum rezolvăm totul. Spuneți-mi numele computerului...
(clasicul apelurilor la suportul tehnic)

Bine, dacă aveți un instrument de genul BgInfo sau utilizatorii dvs. știu despre combinația Windows+Pause/Break și știu să o apese. Uneori întâlnim chiar și exemplare rare care au reușit să învețe numele mașinii lor. Dar adesea, apelantului, pe lângă problema principală, îi apare o a doua: să afle numele/adresa IP a computerului. Și adesea rezolvarea acestei a doua probleme durează mult mai mult decât prima (și trebuia doar să schimbe wallpaper-ul sau să aducă înapoi un scurtăreț dispărut :).
Și ar fi mult mai plăcut să auziți ceva de genul:
— Tatiana Sergeyevna, nu vă faceți griji, mă conectez deja…


Dar pentru asta nu e nevoie de foarte mult.
Specialistului de suport tehnic îi este suficient să învețe pe de rost numele mașinilor și să-și aducă aminte cine lucrează la ce.
Înainte de a descrie soluția pe care o folosim acum, voi trece pe scurt în revistă alte variante, pentru a le critica în detaliu explica alegerea mea.

  1. BgInfo, Desktop Info și altele similare. Dacă aveți mulți bani, sunt disponibile și opțiuni plătite. Ideea este că informația tehnică este afișată pe desktop: numele mașinii, adresa IP, loginul etc. În Desktop Info, putem introduce chiar și grafice de performanță pe jumătate de ecran.
    Nu îmi place că, în cazul lui BgInfo, utilizatorul trebuie să minimizeze feroneri pentru a vedea informațiile necesare. De asemenea, eu și colegii am observat de mai multe ori la BgInfo un artefact caracteristic, când textul nou apare deasupra celui vechi.
    Unii utilizatori sunt deranjați de faptul că administratorii scriu un terifiant 192.168.0.123 pe fața unei pisici care ocupă întregul desktop și strică estetica imaginii de fundal, și, desigur, acest lucru demotivează groaznic și distruge complet atmosfera de muncă.
  2. Scurtcircuit de tip „Cine sunt eu” (nu încercați să-i adăugați un semn de întrebare la final :)). Este un scurtcircuit clasic pe desktop, care ascunde un script ordonat sau mai puțin ordonat, care afișează informațiile necesare într-o fereastră de dialog. Uneori, în loc de un scurtcircuit pe desktop, se plasează direct scriptul, ceea ce IMHO este de prost gust.
    Problema este că pentru a rula o scurtătură, la fel ca în primul caz, trebuie să minimizezi toate feronurile deschise (nu luăm în calcul acei norocoși, care au deschis un singur fereastră cu solitare pe mașina de lucru). Apropo, știu utilizatorii tăi unde trebuie să facă clic pentru a minimiza toate feronurile? Corect, cu degetul în ochi la admin.

De asemenea, căpitanul sugerează că ambele metode descrise mai sus au un dezavantaj principal, și anume că în obținerea informațiilor este implicat utilizatorul, care poate fi ușor orb, prost și poate chiar minți.
Nu voi lua în considerare opțiunea de a îmbunătăți competențele IT, când toată lumea știe unde să caute numele computerului în Windows, este o inițiativă nobilă, dar extrem de dificilă. Și dacă în companie există o fluctuație a personalului, devine cu adevărat imposibil. Ce să mai vorbim, în majoritatea cazurilor nici măcar nu își amintesc propriul username.

Mi-am versat sufletul, acum să trecem la treabă.
Ideea a fost preluată de un utilizator de pe Habr mittel din acestui articol.
Esenta ideii este că, atunci când utilizatorul se conectează în Windows, scriptul de logon introduce informațiile necesare (timpul și numele computerului) într-un atribut specific al contului utilizatorului. Iar la deconectare, un script similar de logoff se execută.

Mie mi-a plăcut ideea, dar implementarea a avut câteva neajunsuri.

  1. Politica de grup, în care sunt definite scripturile de logon și logoff pentru utilizatori, se aplică întregului domeniu, astfel încât scripturile vor funcționa pe orice mașină pe care se conectează utilizatorii. Dacă în plus față de stațiile de lucru sunt utilizate soluții terminale (de exemplu, Microsoft RDS sau produsele Citrix), această abordare ar putea fi inconvenientă.
  2. Datele sunt introduse în atributul Department al contului utilizatorului, la care un utilizator obișnuit are acces doar în citire. Pe lângă atributul contului utilizatorului, scriptul efectuează, de asemenea, modificări în atributul Department al contului computerului, care, prin default, utilizatorii nu pot modifica. Așadar, pentru ca soluția să funcționeze, autorul sugerează modificarea setărilor standard de securitate pentru obiectele AD.
  3. Formatul datei depinde de setările de localizare de pe mașina finală, deci de pe o mașină putem obține 10 noiembrie 2018 14:53, iar de pe alta 11/10/18 2:53 p.m.

Pentru a elimina aceste neajunsuri, s-au făcut următoarele.

  1. GPO se leagă nu de domeniu, ci de OU cu mașini (îmi separ utilizatorii și mașinile în OU-uri diferite și le recomand altora să facă la fel). În acest sens, pentru modul de procesare a politicii de loopback a fost setat modul merge.
  2. Scriptul va înregistra datele doar în contul utilizatorului în atributul Info, pe care utilizatorul îl poate schimba singur pentru contul său.
  3. A fost modificat un segment de cod care generează valoarea atributului

Acum scripturile arată astfel:
SaveLogonInfoToAdUserAttrib.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 & " " & " @ " & strComputerName
oUser.Setinfo

SaveLogoffInfoToAdUserAttrib.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 & " " & " @ " & strComputerName
oUser.Setinfo

Cine găsește primul toate diferențele dintre scriptul de logare și cel de delogare, va câștiga plusuri în carma sa. 🙂
De asemenea, pentru a obține informații vizuale, am creat un mic script 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 "Informații despre logări" -Wait

În total, totul se setează foarte repede:

  1. creăm un GPO cu setările dorite și îl leagă de unitatea organizațională cu stațiile de lucru ale utilizatorilor:
    Windows: aflăm cine este autentificat unde
  2. mergem la o cană de ceai (dacă AD are un număr mare de utilizatori, atunci va fi nevoie de mult ceai 🙂
  3. lansăm scriptul PS și obținem rezultatul:
    Windows: aflăm cine este autentificat unde
    În partea superioară a ferestrei există un filtru convenabil, unde se pot selecta datele după valorile unuia sau mai multor câmpuri. Click pe coloanele tabelului sortează înregistrările după valorile câmpurilor corespunzătoare.

Putem să "împachetăm" frumos soluția noastră.
Windows: aflăm cine este autentificat unde
Pentru aceasta, vom adăuga un shortcut pentru a lansa scriptul către specialiștii din suport tehnic, unde în câmpul „obiect” va fi ceva de genul:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Dacă sunt mulți angajați în suport tehnic, atunci se poate distribui un shortcut prin GPP.

Câteva observații de final.

  • Pe mașina de unde se rulează scriptul PS, trebuie să fie instalat modulul Active Directory pentru PowerShell (pentru asta este suficient să adăugați instrumentele de administrare AD în componentele Windows).
  • Majoritatea atributelor contului său, utilizatorul nu poate edita în mod implicit. Țineți cont de acest lucru dacă decideți să utilizați un atribut diferit de Info.
  • Informați toți colegii implicați despre ce atribut veți folosi. De exemplu, același Info se folosește pentru adăugarea interactivă de note la cutia utilizatorului în admin de Exchange Server și cineva îl poate șterge cu ușurință, sau poate fi supărat că informațiile pe care le-a adăugat sunt șterse de scriptul dvs.
  • Dacă aveți mai multe site-uri Active Directory, faceți ajustări pentru întârzierile de replicare. De exemplu, dacă doriți să obțineți informații actualizate despre utilizatori de la site-ul AD A, dar rulați scriptul de pe o mașină din site-ul AD B, atunci puteți proceda astfel:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Informații despre logonuri" -Wait

    DCfromSiteA — numele controlerului de domeniu de la site-ul A (în mod implicit, cmdlet-ul Get-AdUser se conectează la cel mai apropiat controler de domeniu)

Windows: aflăm cine este autentificat unde

Sursa imaginilor

Voi fi recunoscător dacă veți completa scurtul sondaj de mai jos.

Numai utilizatorii înregistrați pot participa la sondaj. Conectați-vă, vă rugăm.

Ce folosiți?

  • bginfo, Desktop info etc. (software gratuit)

  • analogi plătiți pentru bginfo

  • voi face așa cum este descris în articol

  • nu este relevant, deoarece folosesc VDI/RDS etc.

  • deocamdată nu folosesc nimic, dar mă gândesc

  • nu am nevoie să colectez astfel de date

  • altceva (împărtășiți în comentarii)

Au votat 112 utilizatori. S-au abținut 39 utilizatori.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster