115122
Goto Top

Os.system erkennt den Befehl query user nicht

Hallo,

ich würde gern mit Python an RemoteClients abfragen, welcher Benutzer gerade dort eingeloggt ist (oder garkeiner).
Dazu habe ich den Befehl 'query user' gefunden, welcher in meiner Console auch super funktioniert. Sobald ich den Befehl aber mittels 'os.system()' in Python abschicken möchte, wird mir folgendes gemeldet:

"Der Befehl "query" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

Die query.exe liegt brav unter C:\Windows\System32\ und funktioniert auch mit der Console, aber nicht mit Python und dem System-Befehl. Kann mir das jemand erklären bzw. kennt dieses Phänomen ? Ping, tracert, ipconfig funktioniert alles mit Python, nur der query user macht nicht das, was er soll.

Testcode:

import os

test = os.system("query user")  

Wahlweise auch:

import os

test = os.system("C:\\Windows\\System32\\query.exe user")  


Grüße,
lordzwieback

Content-Key: 303997

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

Printed on: April 25, 2024 at 17:04 o'clock

Member: MrCount
MrCount May 09, 2016 at 08:09:43 (UTC)
Goto Top
Moin,

versuchs mal hiermit (ungetestet):

import subprocess

args = ['C:\\Windows\\system32\\query.exe', 'user']  
process = subprocess.Popen(args, stdout=subprocess.PIPE)
output, err = process.communicate()

users = [line[1:].split('  ') for line in output.strip().split('\n')[1:]]  
print(users)
Mitglied: 115122
115122 May 09, 2016 at 08:22:13 (UTC)
Goto Top
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden.

Findet wohl die query.exe genauso wenig. Ähnlichen Code hatte ich auch schon gefunden und getestet, gleiches Spiel.
Member: MrCount
Solution MrCount May 09, 2016 at 08:32:12 (UTC)
Goto Top
habe das auch mal irgendwo gefunden...
Hier mal der Link: http://stackoverflow.com/questions/30378740/run-query-session-from-pyth ...

In einer weiteren Antwort dort steht:
For 32-bit Python running on 64-bit Windows, use args = [r'C:\Windows\Sysnative\query.exe', 'user']. There's no 32-bit build of query.exe.
Mitglied: 129148
129148 May 09, 2016 at 08:34:13 (UTC)
Goto Top
Stichwort 32/64bit ... 32bit Executables liegen auf einem 64Bit Windows unter C:\windows\syswow64
Btw. qwinsta macht das selbe wie query.
Mitglied: 115122
115122 May 09, 2016 updated at 08:51:25 (UTC)
Goto Top
Das funktioniert ! :D

Habe es jetzt mit meiner ursprünglichen Version getestet:

import os

test = os.system(r"c:\windows\sysnative\query.exe user /server:PCXXX")  
print(test)

Raus bekomme ich dann folgendes:

BENUTZERNAME SITZUNGSNAME ID STATUS LEERLAUF ANMELDEZEIT
XXXXXXXX console 1 Aktiv 4+19:40 09.05.2016 07:19

EDIT: In der Variable Test befindet sich nur eine "1". Weiß jemand, wie ich den Benutzernamen rausfiltern kann ?