在批处理文件中使用终端服务'查询'


1

我有一个批处理文件,可以为用户检查我们的几个服务器。从命令:

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  

我希望它只是在服务器上找到用户时才通知我,而不是输出在特定服务器上找不到用户的消息。

Answers:


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

如果查询用户在具有所需数据的行之前输出行,则需要添加 skip=n 哪里 ñ 是您感兴趣的输出行数。为。指定适当的分隔符 "delims=" 将允许您解析它。

PowerShell不是更好的方式吗?

如果输出包含多个有意义的输出行,则上面只会给出最后一行的结果。在“do”之后添加延迟变量替换和复合命令,将它们包含在()中可以允许您处理它。

或者您可以将输出重定向到文件查询用户%UserID%/ user:ServerN> ServerN.txt然后使用for / f解析它...


@Andrew:不幸的是我坚持他们给我的东西 - 我相信PowerShell会好得多。所以,如果我理解正确,我会实施 for /F "... /server:... 对于我拥有的每台服务器。我应该能够解析返回值 ans 检查搜索是否成功。我不知道该放什么 delims 但是,领域。
IAbstract

0

找出将delim放入内容的最佳方法是将输出传递给文件并在编辑器中检查输出。可能是一个空间。所以只需要确保在选项delims =是last,如果你在结束引号之前留一个空格,那么你将获得空格作为分隔符。然后,您可能希望也可以指定令牌。例如,如果您希望由空格分隔的第1个第3个和第4个字段,则选项将为“tokens = 1,3,4 delims =”。要访问它们,请将它们从%% i,%% j和%% k中拉出。


@Andrew:删除此答案并将其编辑到上一个答案的底部...;)
IAbstract
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.