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.
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.
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. []
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.
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
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
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?
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