ADSI bprde vara svaret. Huruvida man kan hämta vilka som är inloggade dock, det låter jag vara osagt.
Hämta alla inloggade användare
8 svar · 352 visningar · startad av Qimen
En på min skola har gjort ett program som listar alla som är inloggade, vilken dator samt namn på den inloggade. Jag hade tänkt försöka ordna en liknande funktion till mitt program. Men det kanske inte går att göra i vb?
Men det kanske inte går att göra i vb?
Jo, går det att göra i Windows så går det väl att göra i VB. Fast det är fortfarande inte riktigt glasklart vad "inloggad" exakt betyder:
En person går fram till en dator. Han trycker ctrl-alt-del och loggar in som "Pelle". Inloggad som Pelle dubbleklickar han sen på en nätverksresurs. Inloggingsrutan kommer upp. Där loggar han in som "Kalle". Därefter drar han igång en Telnet-session mot en server och loggar in som "Nisse". Är nu "Pelle", "Kalle" och "Nisse" alla inloggade på domänen?
Eller för att göra det enkelt: Vad är det du vill lista? Alla som är interaktivt inloggade (dvs äger en desktop)? Eller alla som på nåt sätt verifierat sig mot DC:en?
Alla elver, lärare osv har ju ett eget användarkonto. Man loggar in på domänen med det och får sin mapp ansluten till en enhet osv. Men som i det programmet jag tittat på så syns det även om en användare är inloggad på flera datorer. Så jag är väl ute efter vilka som är interaktivt inloggade?
If you specify a user name instead of a computer, PsLoggedOn searches the computers in the network neighborhood and tells you if the user is currently logged on. Full source code is included.
En lista med alla "user names" i domänen kan man sen lätt få fram med ADSI: http://www.serverwatch.com/tutorials/article.php/1476791
Det enda kruxet är att källkoden till PsLoggedOn är i C++ så antingen får du porta eller på nåt sätt köra själva exe:n inifrån ditt VB-program.
/red:
Lite fulhackad vbs-kod som bygger på att psloggedon.exe finns i pathen eller samma katalog som vbs-scriptet:
sDomain = "dittdomännamn"
Set oDomain = GetObject("WinNT://" & sDomain)
oDomain.Filter = Array("User")
Set WshShell = CreateObject("WScript.Shell")
For Each oADobject In oDomain
Set oExec = WshShell.Exec("cmd /C psloggedon.exe " & oADobject.Name)
sOut = ""
Do While True
If Not oExec.StdOut.AtEndOfStream Then
sOut = sOut & oExec.StdOut.Read(1)
Else
Exit Do
End If
Loop
sOut=split(sOut, "...")
sResult = sResult & sOut(2)
Next
WScript.Echo sResult
Tack niko.
Ska titta mer på detta. :)
OK.
Min kod var nog lite buggig. Du kan ändra till:
'sOut=split(sOut, "...")
sResult = sResult & sOut
För att få all data rått till att börja med.
Sitter du sen på en domän (vilket jag inte gör just nu) så kan du nog göra det enklare för dig och skippa hela den yttre loopen och använda d-switchen i psloggedon:
Usage: psloggedon [-l] [-d domain] [-x] [\\computername]
or psloggedon [username]
-l Show only local logons
-d Search the specified domain
-x Don't show logon times
