Powershell脚本 - 如何捕获被调用的子进程退出代码

时间:2012-09-04 08:24:11

标签: powershell

我正在尝试编写一个调用.ftp文件(www.scriptftp.com)的powershell脚本。当Powershell调用.ftp脚本文件时,用于将zip文件上传到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$?,但两者都没有显示正确的结果。 有没有其他方法来获取子进程的退出代码请建议我。

2 个答案:

答案 0 :(得分:4)

尝试使用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退出之前返回。

答案 1 :(得分:0)

使用

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

而不是

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