【问题标题】:Powershell script - how to catch called child process exit codePowershell脚本 - 如何捕获被调用的子进程退出代码
【发布时间】:2017-02-25 09:12:10
【问题描述】:

我正在尝试编写一个调用 .ftp 文件 (www.scriptftp.com) 的 powershell 脚本。当 Powershell 调用用于将 zip 文件上传到 ftp 服务器的 .ftp 脚本文件时

这是我的upload.ftp文件代码

OPENHOST("www.abcd.in","sdfdsfs","pwd")
CHDIR("/dirctory/from/user/")

$result=PUTFILE("D:\MyZipTest.zip")

IF($result!="OK")
    PRINT("ERROR in GetFile, exiting")
    # Exit with error code 1
    EXIT(1)
ELSE
    EXIT()
    PRINT("File uploaded successfuly")
END IF

CLOSEHOST

在上面的代码中,我将EXIT(1)EXIT(0) 返回给调用方法,即powershell 脚本文件

我的powershell脚本文件代码:

Invoke-Item "D:\USER\Raj\BLACKswastik DEV\FTPScript\Upload1.ftp"

Start-Sleep -Second 15

echo $lastexitcode

echo $?

在这里我想获取由 .ftp 文件脚本返回的退出代码,所以我使用 $lastexitcode$? 但它们都没有显示正确的结果。 有没有其他方法可以获取子进程的退出代码,请建议我。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    尝试使用Start-Process。您可以取回 Process 对象,您可以稍后查询退出代码,例如:

    $ftpPath = "D:\USER\Raj\BLACKswastik DEV\FTPScript\Upload1.ftp"
    $p = Start-Process <path_to_scriptftp.exe> -Wait -PassThru -ArgumentList $ftpPath
    $p.ExitCode
    

    使用 Invoke-Expression(或直接启动 exe)的问题在于您正在启动 Windows 子系统 EXE,并且与控制台子系统 exe 不同,Invoke-Expression 将在 exe 启动后立即返回(并且在它退出之前) )。 Invoke-Item 也会在 Windows EXE 退出之前返回。

    【讨论】:

      【解决方案2】:

      使用

      Invoke-Expression -Command "D:\User\...\Upload1.ftp"
      

      而不是

      Invoke-Item "D:\User\...\Upload1.ftp"
      

      【讨论】:

        猜你喜欢
        • 2020-08-12
        • 2020-06-20
        • 2021-08-16
        • 1970-01-01
        • 2011-07-15
        • 2013-08-28
        • 1970-01-01
        • 2010-11-27
        • 1970-01-01
        相关资源
        最近更新 更多