2012-09-28 67 views
1

我有一个powershell脚本,我执行上传,然后我必须对刚刚上传的文件执行RESTful请求。现在,它作为一个非异步方法的伟大工程执行异步BITS传输,然后执行RESTful请求

Start-BitsTransfer -Source $fullPath -Destination "https://www.example.com/bitsupload/$Guid.$SourceFile" -Credential $Credential -TransferType Upload 

$web = New-Object Net.WebClient 
$web.DownloadString("https://www.example.com/newbitspost/?filename=$Guid.$SourceFile&filedescription=$Description&Friendlyname=$SourceFile") 

但是我想在后台运行,这使最终用户可以关闭该窗口(更重要的是,我的最终目标,注销),它会仍在转移。

我知道我可以添加-AsynchronousStart-BitsTransfer,但我无法弄清楚如何获得转让完成后执行的GET请求。


由于假阳性重复的问题链接(另一个问题的答案从来没有真正解决它只是说明如何手动执行一些事后的问题)我的问题归结为:如何复制的/SetNotifyCmdLine功能从deprecated BitsAdmin program

+0

的可能重复[如何在BITS运行脚本下载完成(http://stackoverflow.com/questions/11585231/how-to-run-script-on-bits-download-completion) – Goyuix

+0

@Goyuix这是不是重复的,在你对另一个问题的回答中,你将展示如何手动***调用'Complete-BitsTransfer',但你从未真正显示如何在传输完成后自动调用附加命令***自动***即使用户已注销。与过时的BitsAdmin中的旧'/ SETNOTIFYCMDLINE'选项类似。 –

回答

2

答案是:你不行。

至少在PowerShell v2中不使用BITS cmdlets/BitsTransfer模块。您唯一的选择是使用弃用的功能,或者推出与BITS API接口的自定义解决方案。有一个名为SharpBITS.NET的项目可能会有所帮助。

有关您希望完成的更多细节可能会帮助其他人提供替代方案。我也很好奇你已经考虑了哪些替代方案 - 就像你可以在上传文件之前做你的RESTful GET?或甚至作为上传的一部分,或许在查询字符串中嵌入参数?我还会考虑在没有用户登录的情况下在后台执行上传的意味着什么 - 或者其他用户已登录,或者如果他们关闭计算机(或以其他方式中断传输)会发生什么情况。例如,让登录脚本检查BITS传输作业的状态并采取措施可能更有意义。对于没有注销的情况,您也可以隐藏该窗口并定期轮询BITS作业以检查是否完成。

我知道这些并不理想 - 甚至不值得接受已接受的答案。虽然我希望他们帮助。