mayho33
Goto Top

LoggedIn User herausfinden

Hallo @ All

Ich möchte im System-Kontext per VBSCRIPT den angemeldeten Benutzer herausfinden (LogonType 2). Das brauche ich, weil ich im Setup ein paar Dateien in UserProfil kopieren muss. Nun habe ich das Problem, dass ich im System-Kontext immer nur SYSTEM als LogedOn-User zurückbekomme.

Wie mache ich das?

  • in einem GetProperty CA Type 51 hole ich [LogonUser];[INSTALLDIR];[SUPPORTDIR]
ca1
  • Dann lese ich in einer VBSCRIPT CA Type 3110 CustomActionData aus...
PropArray = Split(Session.Property("CustomActionData"), ";")  
Dim CurrentUser : CurrentUser = PropArray(0)
Dim InstallDir  : InstallDir = PropArray(1)
dim SupportDir  : SupportDir = PropArray(2)

  • ...und arbeite mit diesen Daten weiter


Das funktioniert super solange die MSI im USER-Kontext installiert wird, also...
1) Rechtsklick => Installieren oder...
2) Cmd als Admin ausführen => Msiexec /i <pfad zur msi> /qn

Wird die MSI aber im SYSTEM-Kontext ausgeführt (etwa via SCCM oder lokal zum Testen via psexec) ist "CurrentUser" immer SYSTEM

Ich habe nun auch schon folgendes versucht. Jeweils in der VBSCRIPT CA in Deferred Execution in SystemContext:

a) meldet SYSTEM zurück:
Dim CurrentUser : CurrentUser = GetLoggedOnUser

Function GetLoggedOnUserA()
	Set oNetwork = CreateObject("Wscript.Network")  
	GetLoggedOnUserA= oNetwork.UserName
End Function

b) meldet "NICHTS" zurück:
Dim CurrentUser : CurrentUser = GetLoggedOnUser(2)

Function GetLoggedOnUser(Logon_Type)
	Dim SessionIDs, LoggedOnUsers, objWMIService
	On Error Resume Next
	Set SessionIDs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery( _  
								"Select * from Win32_LogonSession WHERE LogonType = '" & Logon_Type & "' AND AuthenticationPackage = 'Negotiate'")  
	For Each Item in SessionIDs
		Set LoggedOnUsers = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Associators of {Win32_LogonSession.LogonId=" & item.LogonId & "} " _   
										& "Where AssocClass=Win32_LoggedOnUser Role=Dependent" )   
			
		For Each user In LoggedOnUsers
			GetLoggedOnUser = user.name
		Next
	Next
End Function


c) funkt auch nicht:

Weitere VBSCRIPT CA Type 38
wie aus a) und b) den Wert ermitteln in un ein Property schreiben ("REALLOGEDONUSER") (funktioniert! mit msgbox ausgegeben ist das Property befüllt!)

Das Property dann von CustomActionData auslesen und weiter verwenden.
ca
Da ist das Value für das entsprechende Property aber leer (??)

Ende der Weisheit! face-sad

Hat jemand Ideen ??

Danke für eure Unterstützung!

Grüße Mayho

Content-Key: 491035

Url: https://administrator.de/contentid/491035

Printed on: April 24, 2024 at 22:04 o'clock

Member: DerWoWusste
DerWoWusste Sep 02, 2019 at 13:28:19 (UTC)
Goto Top
Moin.

kannst Du in VBscript nicht auch die qwinsta.exe nutzen? In Batch ist das ein Einzeiler:
for /f "tokens=2" %a in ('qwinsta ^|findstr Aktiv') do echo %a  
Member: mayho33
mayho33 Sep 02, 2019 at 13:49:39 (UTC)
Goto Top
Hi,

die kannte ich noch nicht. Danke!

Habs nun anders gelöst. Mir ist eingefallen, dass ich was ähnliches schon mal machen musste.

Damit:

Dim currentUsers: currentUsers 	= Split(GetRegKey("HKLM", "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList", "ProfileImagePath"), "|")  

For Each currentUser In currentUsers
 ...
 ...
Next

Private Function GetRegKey(Hive, KeyPath, ValueName) 
	Dim RegHIVE, arrValues
	Const HKEY_CLASSES_ROOT 		= &H80000000
	Const HKEY_CURRENT_USER 		= &H80000001
	Const HKEY_LOCAL_MACHINE 	= &H80000002
	Const HKEY_USERS 				= &H80000003
	Const HKEY_CURRENT_CONFIG 	= &H80000005
	If (Hive = "HKLM") Then RegHIVE 	= HKEY_LOCAL_MACHINE  
	If (Hive = "HKCU") Then RegHIVE 	= HKEY_CURRENT_USER  
	If (Hive = "HKCR") Then RegHIVE 	= HKEY_CLASSES_ROOT  
	If (Hive = "HKU") Then RegHIVE 	= HKEY_USERS  
	If (Hive = "HKCC") Then RegHIVE 	= HKEY_CURRENT_CONFIG  

	Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
	 
	strKeyPath 		= KeyPath 'RegPath  
	strValueName 	= ValueName 'ValueName  
	oReg.EnumKey RegHIVE, strKeyPath, arrSubKeys
	For Each item In arrSubKeys
		oReg.GetStringValue RegHIVE,strKeyPath & "\" & item,strValueName,dwValue  
		If (InStr(1, UCase(dwvalue), "C:\USERS", 1 )) Then  
			arrValues = arrValues & dwValue & "|"   
		End If 
	next
	GetRegKey = arrValues 
End Function

Aber auf jeden Fall Danke für deine Unterstützung!

Grüße, Mayho
Mitglied: 140913
140913 Sep 02, 2019 at 14:46:43 (UTC)
Goto Top
Aktueller User steht auch in win32_Computersystem Property Username