vbscript读取命令行的值

时间:2014-02-26 15:42:47

标签: vbscript cmd

我是vbscript的新手。

我通过vbscript运行psloggedon.exe,共计25台计算机。我需要查看“本地用户登录”的行,看看是否显示“用户本地登录”或“没有人在本地登录”。

如果它说用户已登录,我需要将其写入文本文件以及计算机名称。如果没有人登录,我需要将计算机名称写入同一文本文件并说“可用”。我循环并列出了所有25台机器。我似乎无法弄清楚如何去那一行并验证它的内容。

PsLoggedon v1.34 - See who's logged on
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

Users logged on locally:
     2/19/2014 8:56:35 AM       DOMAIN\John.Smith

Users logged on via resource shares:
     2/26/2014 10:09:07 AM      DOMAIN\John.Smith

代码摘录:

    Dim ObjExec
    Dim strFromProc
    Dim MachineNum


    MachineNum = 1

    Set objShell = CreateObject("WScript.Shell")
    Set ObjExec = objShell.Exec("cmd /K CD F:\QA & LabQwinsta")

    Do

        strFromProc = ObjExec.Stdout.Readall()
        msgbox strFromProc

        document.write(strFromProc)

到目前为止我已经得到了。此时只显示文本文件中的每一行。

2 个答案:

答案 0 :(得分:0)

您可以将输出拆分为数组,然后逐行查看,查找所需的文本。

lines = Split(strFromProc, vbCrLf)
For i = 0 To UBound(lines, 1)
  If lines(i) = "Users logged on locally" Then
    ' Do your stuff
  End If
Next

答案 1 :(得分:0)

您可以使用RegExp对象来解析PSLOGGEDON的输出,但更容易测试已知的字符串。您可以使用InStr()或者,如下例所示,您可以只测试前几个字符。

另外,既然我们需要一个Network对象来获取PC名称(它不包含在命令的输出中),我们也可以使用它来返回用户名,而不是尝试从PSLOGGEDON的输出中解析它。

With CreateObject("WScript.Network")
    strPC   = .ComputerName
    strUser = .UserName
End With

If StrComp(Left(strFromProc, 15), "Users logged on") = 0 Then
    MsgBox strUser & " is logged into " & strPC
Else
    MsgBox strPC & " is available"
End If