WMI Username auslesen

Xaero1982

Well-Known Member
#1
Folgendes:

Ich habe ein klitzekleines tool *hust* mit dem ich Daten vom Remote-PC auslese.

Nun, das Problem ist, dass er mir auf Windows 2000 RemotePCs den derzeitigen User nicht ausliest.
Das geht irgendwie nur lokal auf meinem (w2000) und auf XP Maschinen.

Alternativen?

Verwendeter Code:

Code:
'=======================================================


Const WbemAuthenticationLevelPktPrivacy = 6
strNamespace = "root\cimv2"
'=======================================================

'Verbindung zum WMI Namespace herstellen================
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
    objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================

Function GetWMIServices()
	Set GetWMIServices = GetObject("winmgmts:" _
	    & "{impersonationLevel=impersonate}!\\" & strComputer & strNamespace)
End Function

	On Error Resume Next
	Set objWMIService = GetWMIServices()
	Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", ,wbemFlagReturnImmediately + wbemFlagForwardOnly)
	str = str & "<H2>Computer systems - Win32_ComputerSystem</H2>" & vbCRLF
	For Each objComputer in colSettings
	    str = str & GetTableHeader()
	    str = str & GetRow("System Name", objComputer.Name)
	    str = str & GetRow("Benutzername", objComputer.UserName)
	    str = str & GetRow("System Manufacturer", objComputer.Manufacturer)
	    str = str & GetRow("System Model", objComputer.Model)
	    str = str & GetRow("Total Physical Memory", objComputer.TotalPhysicalMemory)
		str = str & GetRow("IdentifyingNumber ", objItem.IdentifyingNumber)
		str = str & GetTableFooter()
	Next
Selbiges Problem gibt es scheinbar bei:

Code:
	Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_SystemNetworkConnections")
	str = str & "<H2>Networkconnections - Win32_SystemNetworkConnections</H2>" & vbCRLF
    For Each objItem In colItems
        str = str & GetTableHeader()
        str = str & GetRow("PartComponent: ", objItem.PartComponent)
        str = str & GetTableFooter()
    Next
 
Zuletzt bearbeitet:

Xaero1982

Well-Known Member
#2
Rotz, ich will meinen Eintrag ändern!!!

So noch mal von vorne: Eingangspost kann überlesen werden, da ich den nicht ändern kann:

Hallo, ich bin dabei ein Netzwerktool zu schreiben mit WMI und VBScript

Folgendes Problem:

Ich sitz in einer Domäne und kann von keinem einzigen Windows 2000 PC den aktuell eingeloggten User ermitteln.
Bei Windows XP Maschinen und auf meiner lokalen geht es einwandfrei.

Alle PC's sind in der Domäne.

Nehme ich einen PC, der nicht in der Domäne ist mit W2000 geht es ebenfalls mit dem Auslesen.

Der Code dazu ist der folgende: Achtung Auszug:

Code:
'=======================================================
Const WbemAuthenticationLevelPktPrivacy = 6
strNamespace = "root\cimv2"
'=======================================================

'Verbindung zum WMI Namespace herstellen================
    Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
    objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================

	Set colSettings = objWMIService.ExecQuery("Select * from Win32_ComputerSystem", ,wbemFlagReturnImmediately + wbemFlagForwardOnly)
	str = str & "<H2>Computer systems - Win32_ComputerSystem</H2>" & vbCRLF
	For Each objComputer in colSettings
	    str = str & GetTableHeader()
	    str = str & GetRow("System Name", objComputer.Name)
	    str = str & GetRow("Benutzername", objComputer.UserName)
	    str = str & GetRow("System Manufacturer", objComputer.Manufacturer)
	    str = str & GetRow("System Model", objComputer.Model)
	    str = str & GetRow("Total Physical Memory", objComputer.TotalPhysicalMemory)
	    str = str & GetTableFooter()
	Next
Also der Code geht problemlos mit Ausnahme des nicht-auslesens des Usernamens.

Gibt es alternativen zum auslesen?
Kein Tool!!!
Ich brauch das sozusagen manuell!

edit:

Ok, ich habe rausgefunden woran es liegt: MICROSOFT
Ich habe einen Rechner genommen und dort einen Gastaccount bzw Benutzeraccount eingerichtet. Angemeldet und dann von meinem PC aus die Daten auslesen wollen und siehe da? Ich kann den Benutzer nicht auslesen. Ich melde mich wieder als Administrator an und siehe da? Es geht.
Desweiteren habe ich festgestellt, dass die Variable UserName nicht leer ist, aber ausgegeben wird dennoch nichts.

Ich würde sagen Danke Microsoft!
Im moment blieb mir nichts übrig als PSloggedon.exe von den sysinternals zu nutzen:

Code:
            Set objShell = CreateObject("WScript.Shell")
                strCommand = "c:\script\iframe\psloggedon.exe \\" & strComputer & " -l"
            Set objExecObject = objShell.Exec(strCommand)
            Do While Not objExecObject.StdOut.AtEndOfStream
                strText = objExecObject.StdOut.ReadAll()
            loop
        strText = split(strText,":")
        msgbox  strText(1)
Hier splittet er dann die "Werbung" von sysinternals ab und das Ergebnis sieht so aus: Domäne\Username

...i love ms...

edit2: haha die sind der brüller von MS

habe gerade einen Fehler entdeckt: Die Verwaltung auf meinem pc überschüttet mich mit DCOM Fehlern, dass sie vom Remotepc die daten nicht empfangen konnte.
Woran liegts?
Die Zeile

strNamespace müsste:
strNamespace = "\root\cimv2" heißen

Wenn ich das mache sind die Fehler zwar weg, aber ich bekomme kein Infos mehr vom pc was ja im obigen 1. Fall geht :)
w2000 stinkt :eek:) <- Fehler gefunden und beseitigt
Lag daran:
Code:
Function GetWMIServices()
	Set GetWMIServices = GetObject("winmgmts:" _
	    & "{impersonationLevel=impersonate}!\\" & strComputer & strNamespace)
End Function

	Set objWMIService = GetWMIServices()
....
strNamespace = "root\cimv2" <-ist korrekt

Das mit dem Namen auslesen geht noch nicht :( nur über die alternative via pstools

Edit3: Habe mich mit MS in Verbindung gesetzt und ein Hotfix erhalten -> Keine Änderung ...

Nun habe ich es in diversen anderen Foren gepostet und einen weiteren Programmierer von WMI angeschrieben. Mal sehen ...

Hier noch mal ein "funktionsfähiger" Code zum selber probieren:

Code:
Const WbemAuthenticationLevelPktPrivacy = 6

strComputer = "PCX" 
strNamespace = "root\cimv2"
strUser = "ADMINISTRATOR'
strPassword = "ADMINPW"

Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer _
    (strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy

Set colItems = objWMIService.ExecQuery _
    ("Select * From Win32_ComputerSystem")
For Each objItem in ColItems
    Wscript.Echo strComputer & ": " & objItem.UserName
Stand: es geht nicht!
 
Oben