提问人:Pekka 提问时间:1/12/2010 最后编辑:CommunityPekka 更新时间:1/12/2010 访问量:4891
Powershell 脚本:无法读取已执行程序的返回值
Powershell script: Can't read return value of executed program
问:
我正在使用 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标签中的疑问之王!:)
答:
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/......
评论
wget
$wc = New-Object Net.WebClient; $rc = ($wc.DownloadString("http://www.example.com/import_db")).CompareTo("OK")