Windows: ontdek wie waar is ingelogd

Windows: ontdek wie waar is ingelogd
- Oh, niets werkt voor mij, help!
- Maak je geen zorgen, we zullen alles nu oplossen. Geef uw computernaam...
(klassiekers van het genre, van oproepen tot technische ondersteuning)

Het is goed als u een tool a la BgInfo heeft of als uw gebruikers de Windows+Pauze/Break-snelkoppeling kennen en weten hoe ze erop moeten drukken. Er zijn zelfs zeldzame exemplaren die de naam van hun auto hebben weten te achterhalen. Maar vaak heeft de beller, naast zijn hoofdprobleem, nog een tweede: het achterhalen van de naam/IP-adres van de computer. En vaak kost het veel meer tijd om dit tweede probleem op te lossen dan het eerste (en je hoefde alleen maar de achtergrond te veranderen of de ontbrekende snelkoppeling terug te sturen :).
Maar het is veel leuker om zoiets te horen als:
- Tatjana Sergejevna, maak je geen zorgen, ik ben al verbinding aan het maken...


En je hebt er niet veel voor nodig.
Een technische ondersteuningsspecialist hoeft alleen maar de namen van de machines uit zijn hoofd te leren en te onthouden wie waarvoor werkt.
Voordat ik de oplossing beschrijf die we momenteel gebruiken, zal ik kort naar andere opties kijken, zodat ik ze tot het uiterste kan bekritiseren en mijn keuze kan toelichten.

  1. BgInfo, Desktopinfo en dergelijke. Als er veel geld is, zijn er betaalde. Het punt is dat technische informatie op het bureaublad wordt weergegeven: machinenaam, IP-adres, login, enz. In Desktop Info kunt u zelfs prestatiegrafieken op de helft van het scherm persen.
    Wat ik niet leuk vind, is dat de gebruiker voor dezelfde Bginfo bijvoorbeeld vensters moet minimaliseren om de benodigde gegevens te zien. Mijn collega's en ik hebben ook meer dan eens geobserveerd bij BgInfo karakteristiek artefact, wanneer nieuwe tekst bovenop de oude wordt weergegeven.
    Sommige gebruikers zijn geïrriteerd door het feit dat beheerders een angstaanjagende 192.168.0.123 tekenen op het gezicht van een kat die uitgestrekt op het bureaublad ligt, waardoor de esthetiek van de achtergrondafbeelding wordt aangetast, en dit is natuurlijk vreselijk demotiverend en doodt de werkgeest volledig .
  2. Een label a la “Wie ben ik” (probeer er op het einde geen vraagteken aan toe te voegen :). Een klassieke snelkoppeling op het bureaublad, waarachter een netjes of niet zo netjes script schuilgaat dat de nodige informatie weergeeft in de vorm van een dialoogvenster. Soms plaatsen ze, in plaats van een snelkoppeling, het script zelf op het bureaublad, wat volgens mij slechte manieren is.
    Het nadeel is dat je, om de snelkoppeling te starten, net als in het eerste geval, alle geopende vensters moet minimaliseren (we houden geen rekening met de geluksvogels die het enige solitaire-venster open hebben op hun werkmachine). Weten uw gebruikers trouwens waar ze moeten klikken om alle vensters te minimaliseren? Dat klopt, een vinger in het oog van de beheerder.

De limiet suggereert ook dat beide hierboven beschreven methoden het belangrijkste nadeel hebben dat de gebruiker betrokken is bij het verkrijgen van informatie, die mogelijk blind, dom of zelfs liegt.
Ik zal de optie om de computerkennis te vergroten niet overwegen, als iedereen weet waar hij in Windows de naam van zijn machine moet opzoeken: het is een nobele zaak, maar erg moeilijk. En als het bedrijf personeelsverloop heeft, is het volkomen rampzalig. Wat kan ik zeggen, in de meeste gevallen herinneren ze zich niet eens hun login.

Ik stortte mijn ziel uit, en nu to the point.
Het idee van een Khabrov-inwoner werd als basis genomen medium van dit artikel.
De essentie van het idee is dat wanneer een gebruiker inlogt op Windows, het aanmeldingsscript de benodigde informatie (tijd en machinenaam) invoert in een bepaald attribuut van het gebruikersaccount. En wanneer u zich afmeldt bij het systeem, wordt een soortgelijk afmeldingsscript uitgevoerd.

Het idee zelf vond ik leuk, maar er waren een aantal dingen waar ik bij de uitvoering niet blij mee was.

  1. Groepsbeleid, dat aanmeldings- en afmeldingsscripts voor gebruikers specificeert, is van toepassing op het hele domein, zodat de scripts kunnen worden uitgevoerd op elke machine waarop gebruikers inloggen. Als u terminaloplossingen naast werkstations gebruikt (bijvoorbeeld Microsoft RDS- of Citrix-producten), zal deze aanpak lastig zijn.
  2. De gegevens worden ingevoerd in het afdelingsattribuut van het gebruikersaccount, waartoe de gemiddelde gebruiker alleen-lezen toegang heeft. Naast het gebruikersaccountkenmerk brengt het script ook wijzigingen aan in het Afdelingskenmerk van het computeraccount, die gebruikers standaard ook niet kunnen wijzigen. Om de oplossing te laten werken, stelt de auteur voor om de beveiligingsinstellingen voor AD-objecten te wijzigen.
  3. Het datumformaat is afhankelijk van de lokalisatie-instellingen op de doelmachine, dus van de ene machine kunnen we 10 november 2018 14:53 halen, en van een andere 11/10/18 2:53 uur

Om deze tekortkomingen te elimineren, werd het volgende gedaan.

  1. GPO is niet gekoppeld aan een domein, maar aan een OE met machines (ik verdeel gebruikers en machines in verschillende OU's en adviseer anderen). Bovendien, voor loopback-beleidsverwerkingsmodus modus is ingesteld samensmelten.
  2. Het script schrijft alleen gegevens naar het gebruikersaccount in het attribuut Info, die de gebruiker zelfstandig kan wijzigen voor zijn account.
  3. Het stukje code gewijzigd dat de attribuutwaarde genereert

Nu zien de scripts er als volgt uit:
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 & " <logon>" & " @ " & 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 & " <logoff>" & " @ " & strComputerName
oUser.Setinfo

Wie als eerste alle verschillen tussen Logon- en Logoff-scripts vindt, krijgt een plusje voor karma. 🙂
Om visuele informatie te verkrijgen, is het volgende kleine PS-script gemaakt:
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

In totaal is alles één-twee-drie geconfigureerd:

  1. maak een GPO aan met de benodigde instellingen en koppel deze aan de afdeling met gebruikerswerkplekken:
    Windows: ontdek wie waar is ingelogd
  2. laten we thee gaan drinken (als AD een groot aantal gebruikers heeft, dan heb je veel thee nodig :)
  3. voer het PS-script uit en krijg het resultaat:
    Windows: ontdek wie waar is ingelogd
    Bovenaan het venster bevindt zich een handig filter waarin u gegevens kunt selecteren op basis van de waarden van één of meerdere velden. Als u op tabelkolommen klikt, worden records gesorteerd op de waarden van de overeenkomstige velden.

Wij kunnen onze oplossing prachtig ‘verpakken’.
Windows: ontdek wie waar is ingelogd
Om dit te doen, voegen we een snelkoppeling toe om het script te starten voor technische ondersteuningsspecialisten, die zoiets als dit in het veld ‘object’ zullen hebben:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Als er veel technische ondersteuningsmedewerkers zijn, kunt u een snelkoppeling distribueren met behulp van GPP.

Een paar laatste opmerkingen.

  • De Active Directory-module voor PowerShell moet worden geïnstalleerd op de machine waarop het PS-script wordt gestart (hiervoor hoeft u alleen maar AD-beheertools toe te voegen aan de Windows-componenten).
  • Standaard kan de gebruiker de meeste kenmerken van zijn account niet bewerken. Houd hier rekening mee als u besluit een ander attribuut dan te gebruiken Info.
  • Informeer alle betrokken collega’s welk attribuut je gaat gebruiken. Hetzelfde bijvoorbeeld Info wordt gebruikt om interactief notities toe te voegen aan de mailbox van een gebruiker in het Exchange Server-beheerderspaneel en iemand kan het gemakkelijk overschrijven, of verdrietig worden als de informatie die ze hebben toegevoegd, wordt overschreven door uw script.
  • Als u meerdere Active Directory-sites heeft, houd dan rekening met replicatievertragingen. Als u bijvoorbeeld actuele informatie over gebruikers van AD-site A wilt ophalen en het script wilt uitvoeren vanaf een machine vanaf AD-site B, kunt u dit doen:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

    DCvanSiteA — de naam van de domeincontroller van site A (standaard maakt de Get-AdUser-cmdlet verbinding met de dichtstbijzijnde domeincontroller)

Windows: ontdek wie waar is ingelogd

Afbeeldingsbron

Ik zou het op prijs stellen als u onderstaande korte enquête zou willen invullen.

Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.

Wat gebruik je?

  • bginfo, bureaubladinfo enz. (gratis)

  • betaalde analogen van bginfo

  • Ik zal het doen zoals in het artikel

  • niet relevant, want Ik gebruik VDI/RDS enz.

  • Ik gebruik nog niets, maar ik denk erover na

  • Ik hoef dergelijke gegevens niet te verzamelen

  • anders (deel in de reacties)

112 gebruikers hebben gestemd. 39 gebruikers onthielden zich van stemming.

Bron: www.habr.com

Voeg een reactie