我正在尝试编写一个调用.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
和$?
,但两者都没有显示正确的结果。
有没有其他方法来获取子进程的退出代码请建议我。
答案 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"