Powershell 脚本:无法读取已执行程序的返回值

Powershell script: Can't read return value of executed program

提问人:Pekka 提问时间:1/12/2010 最后编辑:CommunityPekka 更新时间:1/12/2010 访问量:4891

问:

我正在使用 PowerShell 运行一个脚本,该脚本执行以获取网页(一个简单的数据库导入脚本)并分析其输出(错误消息或“确定”)。wget

我正在使用我上一个问题的答案中的代码。

$a = c:\path_to_wget\wget.exe --quiet -O - "http://www.example.com/import_db"
$rc = $a.CompareTo("OK")
exit $rc

当 wget 操作的结果是 404 时 - 并且 wget 可能返回错误级别 1 或 127 - 我从 PowerShell 收到以下错误消息:

You cannot call a method on a null-valued expression.

这显然是指我调用该函数。CompareTo()

但是,wget 被执行并输出一些东西。

我怀疑在这种情况下 wget 输出到错误控制台,这不会被我的$a操作捕获。

如何重定向错误输出,以便它被我的脚本捕获?

男孩,我肯定会成为本月PowerShell标签中的疑问之王!:)

Windows PowerShell的

评论

1赞 Joey 1/12/2010
撇开简短的问题不谈:如果你仍然在使用 PowerShell,为什么还要费心呢?wget$wc = New-Object Net.WebClient; $rc = ($wc.DownloadString("http://www.example.com/import_db")).CompareTo("OK")
0赞 Pekka 1/12/2010
我查看了您在上一个问题中给我的提示的 WebClient 文档,并回避了复杂性,希望有一个善良的灵魂能给我一个例子。非常感谢,我可以和这个一起工作!:)

答:

4赞 Amirshk 1/12/2010 #1

首先

# This will hold the last executed EXE return code
$LastExitCode
# For console apps, where 0 is true, else is false, this will hold either True or False
$?

至于读取 STDERR,我想最快的方法是使用流重定向运行脚本

$a = c:\path_to_wget\wget.exe --quiet -O - "http://www.example.com/import_db" 2>&1

评论

0赞 Pekka 1/12/2010
如果在这种情况下有效,我想我已经没事了。非常感谢!2>&1
0赞 Keith Hill 1/12/2010
我会避免使用 $?使用控制台应用。我见过太多不遵守 0 == 成功的惯例。查看这篇文章中的 CheckLastExitCode 函数(我在很多构建脚本中使用它):keithhill.spaces.live.com/Blog/......