webForumDet fria alternativet

Hämta alla inloggade användare

.NET

8 svar · 352 visningar · startad av Qimen

Medlem sedan juni 20015 009 inlägg
Frågan#1

Hej

Kan man hämta alla inloggade användare på domänen/viss grupp och loopa ut dem i vb?

Medlem sedan feb. 200112 078 inlägg
#2

ADSI bprde vara svaret. Huruvida man kan hämta vilka som är inloggade dock, det låter jag vara osagt.

Medlem sedan juni 20022 599 inlägg
#3

Den här koden listar alla som är interaktivt inloggade på en viss maskin. Att lista alla som är påloggade på domänen i ett givet ögonblick är nog värre eftersom jag misstänker att det inte är helt entydigt vad det betyder. (Men jag kan ha fel.)

Medlem sedan juni 20015 009 inlägg
#4

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?

Medlem sedan juni 20022 599 inlägg
#5

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?

Medlem sedan juni 20015 009 inlägg
#6

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?

Medlem sedan juni 20022 599 inlägg
#7

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.

PsLoggedOn

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
Medlem sedan juni 20015 009 inlägg
#8

Tack niko.
Ska titta mer på detta. :)

Medlem sedan juni 20022 599 inlägg
#9

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

259 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)