【问题标题】:Learn error with wget command using PowerShell & Batch File使用 PowerShell 和批处理文件了解 wget 命令的错误
【发布时间】:2013-10-07 23:03:47
【问题描述】:

我有一个调用 .cmd 文件的 power shell 脚本。这里的架构看起来像

-PowerShell 文件代码

$arguments='/savecred /profile /user:myDomain\myuser "cmd /c C:\Users\myuser\code.cmd"' Start-Process cmd.exe $arguments -Wait

  • .cmd代码文件

这里的代码调用 wget 请求来下载文件

wget .....(这里的命令)

我的目标是在 PowerShell 命令提示符下(完成 Start-Process 命令后)了解 wget 命令是否成功执行,或者在执行过程中出现 401、404 等错误。这里我对错误的类型特别不感兴趣,只需要知道是否发生了错误。

【问题讨论】:

    标签: powershell batch-file wget


    【解决方案1】:

    不确定这是否是您所要求的,但您可以使用 $ 测试最后一个命令的非零返回码?变量,如果返回码不为零,则为 $false。

    假设您有一个 test.cmd 文件,它只返回 5:

    exit 5
    

    如果在 PowerShell 中运行,可以查看 $?的结果?

    if ($?) {"No error"} else {"some error"}
    

    这里是更多信息的链接:http://blogs.technet.com/b/heyscriptingguy/archive/2011/05/12/powershell-error-handling-and-why-you-should-care.aspx

    【讨论】:

      【解决方案2】:

      $? 与 Start-Process 一起使用是行不通的:

      C:\PS> Start-Process cmd.exe -arg '/c exit 5'
      C:\PS> $?
      True
      

      如果你想使用 Start-Process,你可以走这条路线:

      C:\PS> $p = Start-Process cmd.exe -arg '/c exit 5' -PassThru -Wait
      C:\PS> $p.ExitCode
      5
      

      或者你可以直接调用 cmd.exe:

      C:\PS> cmd /c exit 5
      C:\PS> $LASTEXITCODE
      5
      

      在最后一个示例中,您可以使用$?,但我更喜欢$LastExitCode,因为一些大脑受损的控制台应用程序成功返回非零值。关于调用 cmd.exe 和使用 $LASTEXITCODE 参见ScriptingGuy blog post

      如需方便的CheckLastExitCode 函数,请查看this blog post 以获得该函数的实现。

      【讨论】:

      • 是的,对于 start-process 来说是这样,但两者都是 $?并且 $lastexitcode 与 cmd /c exit 5 一起使用
      • 我正在尝试使用 $?它返回 true,即使我在 code.cmd 文件中的 wget 命令失败。如果 wget 命令失败,有没有办法将非零退出代码返回给 PowerShell。
      • @VarunGupta 是的。如果您想继续使用 Start-Procss,请使用上面的中间示例,该示例捕获 $p 中的进程对象,然后使用其 ExitCode property。如果您消除 Start-Process 并直接调用 cmd.exe,请使用上面使用 $LastExitCode 的最后一个示例。
      • @AdilH。这是否“有效”取决于您返回值 5 的语义。如果这意味着失败,即 $?应该是假的,是的,它有效。但是,我见过 EXE,其中 5 是成功的价值,所以 $?返回 false 将不起作用。
      猜你喜欢
      • 2020-08-13
      • 2019-11-15
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多