如何从PowerShell脚本中捕获外部程序中的StdOut?

时间:2017-04-27 21:57:48

标签: powershell

我编写VBScript脚本,经常需要运行命令行程序并捕获写入std的信息,以便可以删除输出。所有这些都是对执行VBScript的人隐藏的。

这是一个快速而愚蠢的例子:

cmd = "ping google.com"
Set objWSH = CreateObject( "WScript.Shell" ) 
Set Ret = objWSH.exec(cmd)
StdOut = Ret.StdOut.ReadAll()
myarray = Split(StdOut,vbcrlf)

For each line in myarray
  If Instr(line,"Average") then avg = Right(line,Len(line) - InStrRev(line," "))
Next

wscript.echo "Google.com = " & avg

我的问题不是"我如何ping"正如我在我的示例代码中显示的那样。

我需要知道如何在PowerShell脚本中运行命令行程序,以便不会看到它们,但我可以抓住写入std-out的输出。

2 个答案:

答案 0 :(得分:1)

将结果存储在变量中。

$result = Invoke-Expression 'ping www.google.com'

$result = iex 'ping www.google.com'

答案 1 :(得分:0)

接近你的vbscript,但使用RegEx:

foreach ($line in (ping.exe google.com)){
  if ($line -match 'Average = (\d+)ms'){
    "Google.com = $($matches[1])"
  }
}

示例输出:

Google.com = 12

更多PowerShell方式:

$Avg = (test-connection google.com).responsetime|measure -average|select -expandproperty Average
"Google.com = $Avg"

示例输出:

Google.com = 25.25