我编写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的输出。
答案 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