*.vbs gibt auf manchen PCs fehler aus

Moin zusammen.
Ich führe folgendes Script aus:

Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = „.“
Set objRegistry=GetObject(„winmgmts:\“ & strComputer & „\root\default:StdRegProv“)
strKeyPath = „SOFTWARE\Microsoft\Windows NT\CurrentVersion\WinLogon“
strValueName = „DefaultUserName“
objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue
Wscript.StdOut.Write strValue & „^“
strValueName = „DefaultDomainName“
objRegistry.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue
Wscript.StdOut.Write strValue

Auf manchen Clients funktioniert es und gibt den angemeldeten User und Domäne aus. Auf anderen wiederrum wird folgende Fehlermeld. ausgegeben (obwohl ein User angemeldet ist):
C:\windows_logged_on_user.vbs(3, 1) (null): 0x80041002

Wer kann mir weiterhelfen? Was ist das Problem und was kann ich machen?

Danke im Vorraus
Vitali

Hi Vitali,
woran das liegt kann ich so nicht beurteilen… koennte auch an berechtigungen liegen…

hier ist sonst ein kleine script womit du domain, rechner und user ermitteln kannst…

Option Explicit  
Dim objNet  
Set objNet = CreateObject("WScript.NetWork")   
MsgBox "Angemeldete user: " & objNet.UserName & vbcrlf & \_  
 "Rechner name: " & objNet.ComputerName & vbcrlf & \_  
 "Domain: " & objNet.UserDomain  
Set objNet = Nothing   

cheers
Woolli

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für die Antwort. Ich denke auch, dass es an Berechtigungen liegt oder etwas nicht registriert wurde.

Dein Script hilft mir nicht weiter weil:

  • ich noch andere Scripts nabe die diese Fehlermeld. ausgeben
  • wenn ich das Script Remote (z.B. per psexec) ausführe, wird der User mit dem ich Remote angemeldet bin ausgegeben. Bei meinem Script wird der tatsächlich angemeldete (davorsitzende) User ausgegeben.

Hi Vitali,
woran das liegt kann ich so nicht beurteilen… koennte auch
an berechtigungen liegen…

hier ist sonst ein kleine script womit du domain, rechner und
user ermitteln kannst…

Option Explicit  
> Dim objNet  
> Set objNet = CreateObject("WScript.NetWork")  
> MsgBox "Angemeldete user: " & objNet.UserName & vbcrlf & \_  
> "Rechner name: " & objNet.ComputerName & vbcrlf & \_  
> "Domain: " & objNet.UserDomain  
> Set objNet = Nothing  

cheers
Woolli

Ok bei ein Remote computer muss wmi verwendet werden.
wie sieht es bei diesem script aus?

strComputer = "." 'jetzt ist es localhost   
Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
Set colSessions = objWMI.ExecQuery ("Select \* from Win32\_LogonSession Where LogonType = 2")   
If colSessions.Count = 0 Then   
 MsgBox "Kein User gefunden"   
Else   
 For Each objSession in colSessions   
 Set colList = objWMI.ExecQuery("Associators of {Win32\_LogonSession.LogonId=" & objSession.LogonId & "} Where AssocClass=Win32\_LoggedOnUser Role=Dependent" )   
 For Each objItem in colList   
 Msgbox "User: " & objItem.Name & vbcrlf & \_  
 "Domain: " & objItem.Domain   
 Next   
 Next   
End If   

ansonsten hier gibts einiges zum nachschlagen:
http://www.microsoft.com/technet/scriptcenter/resour…

cheers
woolli.

Danke für die Antwort. Ich denke auch, dass es an
Berechtigungen liegt oder etwas nicht registriert wurde.

Dein Script hilft mir nicht weiter weil:

  • ich noch andere Scripts nabe die diese Fehlermeld. ausgeben
  • wenn ich das Script Remote (z.B. per psexec) ausführe, wird
    der User mit dem ich Remote angemeldet bin ausgegeben. Bei
    meinem Script wird der tatsächlich angemeldete (davorsitzende)
    User ausgegeben.

Dieses Script gibt ebenfalls die obige Fehlermeldung aus.

Was fehlt dieser Kiste?

Hi kannst du das einbinden und die error nummer und beschreibung posten.

On Error Resume Next
strComputer = „.“ 'jetzt ist es localhost
Set objWMI = GetObject(„winmgmts:{impersonationLevel=impersonate}!\“ & strComputer & „\root\cimv2“)
If Err.Number > 0 Then
msgbox err.number & vbcrlf & err.Description
err.clear
end if
Set colSessions = objWMI.ExecQuery („Select * from Win32_LogonSession Where LogonType = 2“)
If Err.Number > 0 Then
msgbox err.number & vbcrlf & err.Description
err.clear
end if
If colSessions.Count = 0 Then
MsgBox „Kein User gefunden“
Else
For Each objSession in colSessions
Set colList = objWMI.ExecQuery(„Associators of {Win32_LogonSession.LogonId=“ & objSession.LogonId & „} Where AssocClass=Win32_LoggedOnUser Role=Dependent“ )
For Each objItem in colList
Msgbox "User: " & objItem.Name & vbcrlf & _
"Domain: " & objItem.Domain
Next
Next
End If

Woolli.

1 Like

Dieses Script gibt ebenfalls die obige Fehlermeldung aus.

Was fehlt dieser Kiste?

vielleicht laesst sich das herausfinden wenn du das wmi logging einschaltest:
http://www.microsoft.com/resources/documentation/win…

Als ich die WMI-Sicherheitseinst. überprüfen wollte (Comp.verwaltung --> Dienste und Anw. --> WMI-Steuerung --> Eigenschaften) stand gleich auf der ersten Registerkarte, dass keine Verb. zum WMI (ähnlich) hergestellt werden kann.
Habe daraufhin im Internet gestöbert und bin auf die WMIDiag.vbs von Microsoft gestoßen. Diese ausgeführt: c:\WMIDiag.vbs CheckConsistency. Die logdatei besagt, dass das Repository inkonsistent war und „re-builded“ wurde. Die scheint etwas bewirkt zu habe, denn jetzt funktioniert dieses Script.
Zum Abschluß habe ich noch rundll32 wbemupgd, UpgradeRepository ausgeführt. Dieses läuft aber schon 20 Minuten. Vielleicht war das überflüssig.
Werde das Ganze noch auf weiteren Maschinen testen.

@woolli: Danke für deine Mühe.