Powershell无法等待curl完成上传

时间:2018-01-02 20:59:49

标签: powershell curl

我使用curl将文件上传到云端。问题是,脚本在卷曲操作完成之前立即删除本地文件。奇怪的是,当我将& curl.exeRemove-Item放在一个单独的ps1文件中并在那里进行测试时,它可以正常工作,并在上传后删除该文件。

以下代码来自main.ps1(从cmd启动时执行),它每隔5秒检查一次输入文件夹以获取新文件

while ($true) {
    Get-ChildItem -Path $inputFolder -Filter "*$extIn" | ForEach-Object {

        & ffmpeg.exe -i $inFile ...some operations $outFile

        if ($LASTEXITCODE -eq 0) {
            #credentials
            $lg = ...
            #curl upload operation
            & curl.exe -T "$outFile" -g -u $lg -k https://mycloud/
            Write-Host "Done uploading: $outFile"
            #removing item
            Remove-Item -LiteralPath $inFile -Force
            Write-Host "Removed input file!"
        } else {
            Write-Error "Conversion failed!"
        } 
    }
    sleep 5
}

我使用了curl.exe,因为当我只使用curl时我错了(我不知道这是否相关):

Invoke-WebRequest : Parameter cannot be processed because the parameter name 'T' is ambiguous. Possible matches include ...

旁注:我在ubuntu 16.04上运行的另一台PC上尝试了相同的脚本(但使用curl -T ...)。没有问题。该脚本最终将在ubuntu 16.04 / 17.10上使用,但与此同时它需要在我的Windows PC上运行。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

可以尝试

Start-Process <path to exe> -NoNewWindow -Wait

$proc = Start-Process <path to exe> -NoWindow
$proc.WaitForExit()

其中任何一个都应该等待该过程完成。您也可以尝试将其添加到行的末尾,调用curl,管道和Wait-Process

| Wait-Process

答案 1 :(得分:0)

至于: &#34;我使用了curl.exe,因为当我只使用curl时它给了我一个错误(我不知道这是否相关):&#34;

这是因为在像curl这样的PoSH命令中,wget是PoSH cmdlet的所有别名。您可以使用这些命令,但必须使用PoSH允许的命令。

Get-Alias -Name curl
CommandType     Name 
Alias           curl -> Invoke-WebRequest

(Get-Command -Name Invoke-WebRequest).Parameters
Get-Help -Name Invoke-WebRequest -Examples
Get-Help -Name Invoke-WebRequest -Full

PoSH有很多别名,正如您所发现的,您必须使用.exe来获取真实内容或删除别名。在对外部命令进行任何调用之前,PoSH将始终首先使用本机cmdlet,除非您告诉它。

显示所有别名

Get-Alias

考虑使用PoSH WorkFlow

Windows PowerShell工作流入门 https://technet.microsoft.com/en-us/library/jj134242(v=ws.11).aspx

工作流是一系列编程的连接步骤,用于执行长时间运行的任务或需要跨多个设备或受管节点协调多个步骤。 Windows PowerShell工作流允许IT专业人员和开发人员将多设备管理活动序列或工作流内的单个任务编写为工作流。通过设计,工作流可以长时间运行,可重复,频繁,可并行化,可中断,可停止和可重新启动。他们可以被暂停和恢复;它们也可以在意外中断后继续,例如网络中断或计算机重启。

Windows PowerShell:PowerShell脚本与PowerShell工作流程 https://technet.microsoft.com/en-us/library/dn151046.aspx

PowerShell工作流程:嵌套 https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/09/powershell-workflows-nesting