Scriptino in python o in vbs

Salve a tutte,

premettendo che non sono un dev e di scripting ne capisco pochissimo, mi servirebbe un semplice script in python o in vbs che, quando invocato come LOCAL SYSTEM, dia come output l'utente loggato (es: "dominio\user").
Il dominio e' opzionale, va bene anche il nomemacchina oppure anche solo lo username.

Stavo provando con
import getpass
print getpass.getuser()

Ma non va bene.
Funziona se lo invochi con l'utente loggato, ma chiaramente se lo invochi come Local System ti risponde che l'utente e' Local System.

Qualcosa che mi puo' dare una mano?

Grazie
così?


import os

usr = ['{}{}'.format(os.environ['userdomain'], l.split(' ')[0][1:]) for l in os.popen('query user').read().strip().split('\n')[1:]]
print(usr)


(ti restituisce una lista con tutti gli utenti loggati)

edit: ops dimenticavo il dominio
Mica mi funziona, sto testando con python 3.7 32 bit.

Lo import os va, il resto no.

>>> import os
>>>
>>> usr = ['{}{}'.format(os.environ['userdomain'], l.split(' ')[0][1:]) for l in os.popen('query user').read().strip().split('\n')[1:]]
'query' is not recognized as an internal or external command,
operable program or batch file.
>>> print(usr)
[]



Dimenticato un dettaglio, dovrebbe girare su Win10.
prova a metterlo in un file ed eseguirlo con python file.py

pare non ti stia trovando il comando "query" che è ciò che ho usato per tirare fuori gli utenti loggati, che versione di windows hai?
Windows10

Anche python file.py da lo stesso errore:

C:\Users\apadovani\AppData\Local\Programs\Python\Python37-32>python.exe asd.py
'query' is not recognized as an internal or external command,
operable program or batch file.
[]
prova dal cmd dentro windows/system32
Mica lo tengo il python dentro system32
non fa niente, python l'importante è che sia dentro una directory che sta in PATH, ti ho detto di usare cmd dentro system32 solo perché quella versione cmd ha il comando query che tira fuori gli utenti loggati

il concetto è che con getpass.getuser() non tirerai mai fuori nulla se non lanciando dall'utente loggato, devi usare qualcosa di global tipo appunto query
Questo lo immaginavo, ma purtroppo a parte speculare non riesco a fare altro, non essendo un developer faccio fatica :/

Da solo in cmd, in powershell o in python sono riuscito ad avere l'utente, ma solo se invoco lo script con l'utente stesso.

Il problema che non riesco a risolvere e' tirare fuori l'utente invocando lo script come Local System, che e' condizione per me obbligatoria, perche' questo script verra' invocato da un applicativo che appunto logga come local system.
Private Sub Workbook_Open()

Dim ObjWshNw As Object
Set ObjWshNw = CreateObject("WScript.Network")
'All'apertura del workbook scrive l'username attivo al momento
Worksheets("Integration").Range("AC3").Value = ObjWshNw.UserName

End Sub



per l'username in caso ti servisse su excel


lo script che ti ho dato sopra ti tira fuori l'utente anche se ad eseguirlo è local system (ho provato lanciando un terminale come local system e lanciandolo)

ovviamente poi è difficile capire nel dettaglio non sapendo qual è l'ambiente in cui viene eseguito (ovvero se nell'env dell'applicativo esiste il comando query o meno)




comunque probabilmente ci sarà un modo più intelligente di farlo, è che di windows non capisco assolutamente nulla quindi il mio apporto si ferma qui, sorry
Ma figurati, ci mancherebbe che ti devi pure scusare, ti ringrazio del tentativo e del tempo che ci hai dedicato
Windows 10 quindi puoi usare PowerShell, dovrebbe bastare un

Get-WMIObject -class Win32_ComputerSystem | select username


prova un po'
Che scarso il Fas...



Dammi un tcpdump e con Wireshark ti troubleshooto tutto il gesucristo, ma di scripting non ne capisco una minchia bollita.



Non funziona.
Nel senso che funziona se apro powershell con l'utente, non funziona se apro powershell come Local System (psexec -s -i powershell con i SysInternals)

Mh, è la stessa prova (ho usato anche io psexec) che ho fatto e funziona. Ho anche provato a creare un'operazione pianificata, che gira via LOCAL SYSTEM, con powershell.exe "Get-WMIObject -class Win32_ComputerSystem | select username" >> C:\test\test.txt ed il file contiene in effetti il mio utente loggato.

Ma non funziona in che senso? Da errore lo scrive COMPUTER\LOCAL SYSTEM?

Spoiler





Sono su una VM nel mio lab con un Win 10 Enterprise.
Loggato in RDP con un admin di dominio (APLAB\Administrator)

Apro cmd, lancio powershell come local system, lancio il comando e risponde con uno username vuoto.




a questo punto prova col comando "query user", occhio che sia quello prima che questo danno come risultati tutti gli utenti loggati, quindi c'è da filtrare
A te e' una macchina fisica o virtuale? Che versione di Win10 hai sul client?
Quel CBS e' un dominio o un workgroup?
Fisica, dominio



Hai provato anche con "query user"?