WMI-Abfrage, lokale Informationen vom Remote-Server abrufen (für BgInfo)

577
root

Ich verwende BgInfo auf einem Windows-Server, zu dem Benutzer remote über RDP eine Verbindung herstellen. Mit BgInfo können Sie benutzerdefinierte Elemente basierend auf WMI-Abfragen erstellen. Ich möchte den lokalen Hostnamen oder die IP-Adresse des Benutzers anzeigen. Gibt es eine WMI-Klasse, die den lokalen Hostnamen des remote verbundenen Benutzers enthält? Gibt es ansonsten in BgInfo eine andere Möglichkeit, um diese Informationen zu erhalten?

2
Wie folgt: `wmic.exe / node:" IP-oder-Hostname "ComputerSystem Get UserName`? harrymc vor 6 Jahren 0
Das Ergebnis ist nur eine Spaltenüberschrift mit der Aufschrift "UserName". Die beabsichtigte Abfrage wird von dem Server ausgeführt, mit dem der Benutzer remote verbunden ist, und sollte den lokalen Hostnamen des Benutzers zurückgeben. root vor 6 Jahren 0
Sie fragen also grundsätzlich nach dem Hostnamen des Benutzers auf seinem eigenen Computer, tun dies aber von seiner RDP-Sitzung auf dem Server-Computer aus. Ist das korrekt? harrymc vor 6 Jahren 0
Das ist richtig. root vor 6 Jahren 0
@PimpJuiceIT IP ist anstelle des Hostnamens zulässig. WMI ist die bevorzugte Lösung, da es eine der wenigen Quellen für benutzerdefinierte Werte ist, die BgInfo anbietet. BgInfo hat andere Quellenoptionen, wie "Inhalt einer Datei", aber ich möchte möglichst nicht mehrere Schritte benötigen, um diese Lösung zu erreichen (z. B. Powershell wird extern ausgeführt und die Ergebnisse werden in einer Datei gespeichert). root vor 6 Jahren 0

2 Antworten auf die Frage

2
Alex

Keine WMI-Lösung, aber einfacher: Wenn Sie das folgende Skript auf dem Server ausführen, während Sie über RDP verbunden sind, erhalten Sie den Hostnamen des über RDP verbundenen Remotecomputers

@echo off  echo %CLIENTNAME%  exit 

Sie benötigen eigentlich kein Skript, da Sie bginfobenutzerdefinierte Felder verwenden können. Gehen Sie zu benutzerdefinierten Feldern -> Neues Feld hinzufügen, und wählen Environment variableSie Variable = ausCLIENTNAME

0
harrymc

Soweit ich weiß, kann WMI das nicht. Sie müssen Win32 - API verwenden, in Powershell zum Beispiel, und rufen Sie direkt die WTSQuerySessionInformation Funktion innerhalb gefunden wtsapi32.dll, die Parameter:

hServer = WTS_CURRENT_SERVER_HANDLE (null or 0) SessionId = WTS_CURRENT_SESSION (-1) 

WTSQuerySessionInformation In dieser Serverfault-Antwort finden Sie ein funktionierendes PowerShell-Beispiel für den Aufruf, mit dem Sie beginnen können.

Das Element, das Sie abrufen möchten, stammt WTSClientNameaus der _WTS_INFO_CLASS-Enumeration und enthält "Eine nullterminierte Zeichenfolge, die den Namen des Clients enthält", dh den Namen des Clientcomputers. Wie man es bekommt, zeigt auch das obige Beispiel.