Verwenden der Terminaldienste-Abfrage in der Stapeldatei

2067
IAbstract

Ich habe eine Batchdatei, die mehrere unserer Server auf einen Benutzer überprüft. Aus dem Befehl:

query user %userID% /server:ServerName 

Ich möchte die Ausgabe erfassen, bevor sie auf dem Bildschirm angezeigt wird. Gibt es eine Möglichkeit, die Ausgabe auf eine Variable umzuleiten?

Das Grundsätzliche an dem, was ich erreichen möchte, ist Folgendes - wir durchlaufen unsere Server:

query user %userID% /server:Server1  query user %userID% /server:Server2  query user %userID% /server:Server3  query user %userID% /server:Server4  

Anstatt eine Meldung auszugeben, dass der Benutzer auf einem bestimmten Server nicht gefunden wurde, möchte ich, dass er mich nur benachrichtigt, wenn er den Benutzer auf einem Server findet.

1

2 Antworten auf die Frage

2
3498DB
for /F "tokens=1 delims=" %%i in ('query user %userID% /server:ServerName') do set ans=%%i 

If the query user outputs lines before the one that has the data you want, you need to add skip=n where n is the number of lines of output before the one that is interesting to you. Specifying appropriate delimiters for the "delims=" will allow you to have it parsed.

Wouldn't PowerShell be a better way go though?

If the output contains more than one meaningful lines of output the above will only give you the results from the last line. Adding delayed variable substitution and compound commands after the "do" by enclosing them in () could allow you handle that.

Or you could redirect the output to a file query user %UserID% /user:ServerN >ServerN.txt and then parse that with a for /f ...

@Andrew: Leider bleibe ich bei dem, was sie mir geben - ich bin sicher, PowerShell wäre viel besser. Wenn ich es richtig verstehe, werde ich das `for / F" ... / server implementieren: ... `für jeden Server, den ich habe. Ich sollte in der Lage sein, den Rückgabewert in` ans` zu analysieren, um nach einer erfolgreichen Suche zu suchen Ich bin mir jedoch nicht sicher, was ich im Bereich "delims" platzieren soll. IAbstract vor 14 Jahren 0
0

Der beste Weg, um herauszufinden, was die Begrenzungen sein sollen, ist, die Ausgabe in eine Datei zu leiten und die Ausgabe in einem Editor zu überprüfen. Ein Leerzeichen ist wahrscheinlich. Stellen Sie also sicher, dass in den Optionen delims = der letzte ist. Wenn Sie vor dem abschließenden Anführungszeichen ein Leerzeichen angeben, erhalten Sie Leerzeichen als Trennzeichen. Sie sollten dann wahrscheinlich auch die Token angeben. Wenn Sie beispielsweise möchten, dass das 1., 3. und 4. Feld durch ein Leerzeichen begrenzt wird, lauten die Optionen "token = 1,3,4 delims =". Um auf diese Felder zuzugreifen, ziehen Sie sie aus %% i, %% j und %% k.

@Andrew: Lösche diese Antwort und bearbeite sie am Ende deiner vorherigen Antwort ...;) IAbstract vor 14 Jahren 0