Использование Terminal Services 'запрос' в пакетном файле

1910
IAbstract

У меня есть пакетный файл, который проверяет несколько наших серверов для пользователя. Из команды:

query user %userID% /server:ServerName 

Я хочу захватить вывод, прежде чем он выходит на экран. Есть ли способ перенаправить вывод в переменную?

Основная суть того, чего я хочу достичь, заключается в следующем: мы перебираем наши серверы:

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

Вместо вывода сообщения о том, что пользователь не может быть найден на определенном сервере, я хотел бы, чтобы оно уведомляло меня, только если оно находит пользователя на сервере.

1

2 ответа на вопрос

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

Если пользователь запроса выводит строки до той, которая содержит данные, которые вы хотите, вам нужно добавить, skip=nгде n - количество строк вывода перед той, которая вас интересует. Указание соответствующих разделителей для этого "delims="позволит вам проанализировать его.

Разве PowerShell не будет лучше?

Если выходные данные содержат более одной значимой строки выходных данных, вышеприведенное даст вам результаты только из последней строки. Добавление отложенной подстановки переменных и составных команд после «do» путем включения их в () может позволить вам справиться с этим.

Или вы можете перенаправить вывод в файл запроса пользователя% UserID% / user: ServerN> ServerN.txt, а затем проанализировать его с помощью for / f ...

@ Андрей: к сожалению, я застрял с тем, что они дают мне - я уверен, что PowerShell будет намного лучше. Поэтому, если я правильно понимаю, я буду реализовывать `for / F" ... / server: ... `для каждого сервера, который у меня есть. Я должен иметь возможность проанализировать возвращаемое значение в` ans`, чтобы проверить успешность поиска Я не уверен, что поместить в поле `delims`. IAbstract 14 лет назад 0
0

Лучший способ выяснить, что поместить разделители, - это передать вывод в файл и проверить вывод в редакторе. Пространство вероятно. поэтому просто убедитесь, что в опциях delims = является последним, если вы оставите пробел перед закрывающей кавычкой, то вы получите пробелы в качестве разделителя. Затем вы, вероятно, захотите указать токены. Например, если вы хотите, чтобы 1-е, 3-е и 4-е поля были разделены пробелом, параметры должны быть «tokens = 1,3,4 delims =». Для доступа к ним вы извлекаете их из %% i, %% j и %% k.

@Andrew: удалите этот ответ и отредактируйте его до конца вашего предыдущего ответа ...;) IAbstract 14 лет назад 0

Похожие вопросы