Windows: ta reda på vem som är inloggad var

Windows: ta reda på vem som är inloggad var
– Åh, ingenting fungerar för mig, hjälp!
- Oroa dig inte, vi fixar allt nu. Ge din dator namn...
(klassiker av genren från samtal till teknisk support)

Det är bra om du har ett verktyg a la BgInfo eller om dina användare känner till genvägen Windows+Paus/Paus och vet hur man trycker på den. Det finns till och med sällsynta exemplar som har lyckats lära sig namnet på sin bil. Men ofta, förutom sitt huvudproblem, har den som ringer ett andra problem: att ta reda på namnet/IP-adressen på datorn. Och ofta tar det mycket mer tid att lösa det här andra problemet än det första (och du behövde bara ändra tapeten eller returnera den saknade genvägen :).
Men det är mycket trevligare att höra något som:
- Tatyana Sergeevna, oroa dig inte, jag ansluter redan ...


Och du behöver inte mycket för detta.
En teknisk supportspecialist behöver bara memorera namnen på maskinerna och komma ihåg vem som arbetar för vilka.
Innan jag beskriver den lösning vi använder för närvarande, kommer jag kort att titta på andra alternativ så att jag kan kritisera dem till ända och förklara mitt val.

  1. BgInfo, Skrivbordsinformation och liknande. Finns det mycket pengar så finns det betalda. Poängen är att teknisk information visas på skrivbordet: maskinnamn, IP-adress, inloggning osv. I Desktop Info kan du till och med pressa prestandagrafer på halva skärmen.
    Vad jag inte gillar är att för samma Bginfo, till exempel, måste användaren minimera fönster för att se nödvändig data. Jag och mina kollegor har också observerat mer än en gång på BgInfo karakteristisk artefakt, när ny text visas ovanpå den gamla.
    Vissa användare är irriterade över det faktum att administratörer ritar ett skrämmande 192.168.0.123 i ansiktet på en katt utsträckt på skrivbordet, vilket förstör bakgrundsbildens estetik, och det är naturligtvis fruktansvärt demotiverande och dödar arbetsandan helt. .
  2. En etikett a la "Vem är jag" (försök inte lägga till ett frågetecken i slutet :). En klassisk genväg på skrivbordet, bakom vilken döljer sig ett snyggt eller inte så snyggt skript som visar nödvändig information i form av en dialogruta. Ibland, istället för en genväg, lägger de själva skriptet på skrivbordet, vilket IMHO är dåligt uppförande.
    Nackdelen är att för att starta genvägen, som i det första fallet, måste du minimera alla öppna fönster (vi tar inte hänsyn till de älsklingar av lycka som har det enda patiensfönstret öppet på sin arbetsmaskin). Förresten, vet dina användare var de ska klicka för att minimera alla fönster? Just det, ett finger i administratörens öga.

Locket antyder också att båda metoderna som beskrivs ovan har den största nackdelen att användaren är involverad i att få information, som kan vara blind, dum eller till och med ljuga.
Jag kommer inte att överväga alternativet att öka datorkunskapen, när alla vet var i Windows de ska slå upp namnet på sin maskin: det är en ädel sak, men mycket svårt. Och om företaget har personalomsättning så är det helt förstört. Vad kan jag säga, i de flesta fall kommer de inte ens ihåg sin inloggning.

Jag hällde ut min själ, och nu till saken.
Idén om en invånare i Khabrov togs som grund medium av den här artikeln.
Kärnan i idén är att när en användare loggar in på Windows anger inloggningsskriptet den nödvändiga informationen (tid och maskinnamn) i ett visst attribut för användarkontot. Och när du loggar ut från systemet körs ett liknande utloggningsskript.

Jag gillade själva idén, men det fanns några saker som jag inte var nöjd med i implementeringen.

  1. Grupppolicy, som anger inloggnings- och utloggningsskript för användare, gäller för hela domänen, så skripten kommer att köras på alla datorer som användare loggar in på. Om du använder terminallösningar tillsammans med arbetsstationer (till exempel Microsoft RDS eller Citrix-produkter) kommer detta tillvägagångssätt att vara obekvämt.
  2. Uppgifterna läggs in i avdelningsattributet för användarkontot, som den genomsnittliga användaren har skrivskyddad åtkomst till. Utöver användarkontoattributet gör skriptet även ändringar i avdelningsattributet för datorkontot, som användarna som standard inte heller kan ändra. Därför, för att lösningen ska fungera, föreslår författaren att du ändrar säkerhetsinställningarna för AD-objekt.
  3. Datumformatet beror på lokaliseringsinställningarna på måldatorn, så från en maskin kan vi få 10 november 2018 14:53 och från en annan 11/10/18 2:53

För att eliminera dessa brister gjordes följande.

  1. GPO är inte kopplat till en domän, utan till en organisationsenhet med maskiner (jag separerar användare och maskiner i olika organisationsenheter och ger råd till andra). Dessutom för bearbetningsläge för återkopplingspolicy läge är inställt sammanfoga.
  2. Skriptet kommer endast att skriva data till användarkontot i attributet Info, som användaren kan ändra självständigt för sitt konto.
  3. Ändrade kodbiten som genererar attributvärdet

Nu ser skripten ut så här:
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

Den som är den första att hitta alla skillnader mellan Logon- och Logoff-skript kommer att få ett plus för karma. 🙂
För att få visuell information skapades även följande lilla PS-skript:
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

Totalt är allt konfigurerat ett-två-tre:

  1. skapa en GPO med nödvändiga inställningar och länka den till avdelningen med användararbetsstationer:
    Windows: ta reda på vem som är inloggad var
  2. låt oss dricka te (om AD har ett stort antal användare behöver du mycket te :)
  3. kör PS-skriptet och få resultatet:
    Windows: ta reda på vem som är inloggad var
    Överst i fönstret finns ett bekvämt filter där du kan välja data baserat på värdena i ett eller flera fält. Genom att klicka på tabellkolumner sorteras poster efter värdena i motsvarande fält.

Vi kan vackert "paketera" vår lösning.
Windows: ta reda på vem som är inloggad var
För att göra detta lägger vi till en genväg för att starta skriptet för teknisk supportspecialister, som kommer att ha något sånt här i "objekt"-fältet:
powershell.exe -NoLogo -ExecutionPolicy Bypass -File "servershareScriptsGet-UsersByPCsInfo.ps1"

Om det finns många tekniska supportanställda kan du distribuera en genväg med hjälp av GPP.

Några sista kommentarer.

  • Active Directory-modulen för PowerShell måste installeras på maskinen från vilken PS-skriptet startas (för att göra detta, lägg bara till AD-administrationsverktyg i Windows-komponenter).
  • Som standard kan användaren inte redigera de flesta av attributen för sitt konto. Tänk på detta om du väljer att använda ett annat attribut än Info.
  • Informera alla inblandade kollegor vilket attribut du kommer att använda. Till exempel samma sak Info används för att interaktivt lägga till anteckningar till en användares brevlåda i Exchange Servers adminpanel och någon kan enkelt skriva över den, eller bli ledsen när informationen de lagt till skrivs över av ditt skript.
  • Om du har flera Active Directory-webbplatser, ta då hänsyn till replikeringsförseningar. Om du till exempel vill få uppdaterad information om användare från AD-webbplats A och köra skriptet från en maskin från AD-webbplats B, kan du göra så här:
    Get-ADUser -Server DCfromSiteA -SearchBase $OU -Properties * -Filter * | Select-Object DisplayName, SamAccountName, info | Sort DisplayName | Out-GridView -Title "Информация по логонам" -Wait

    DCfromSiteA — namnet på domänkontrollanten för webbplats A (som standard ansluter Get-AdUser cmdlet till närmaste domänkontrollant)

Windows: ta reda på vem som är inloggad var

Bildkälla

Jag skulle vara tacksam om du kunde svara på den korta enkäten nedan.

Endast registrerade användare kan delta i undersökningen. Logga in, Snälla du.

Vad använder du?

  • bginfo, skrivbordsinformation etc. (gratisprogram)

  • betalda analoger av bginfo

  • Jag gör som i artikeln

  • inte relevant, eftersom Jag använder VDI/RDS etc.

  • Jag använder ingenting än, men jag funderar på det

  • Jag behöver inte samla in sådana uppgifter

  • annat (dela i kommentarerna)

112 användare röstade. 39 användare avstod från att rösta.

Källa: will.com

Lägg en kommentar