大文件上的Move-Item似乎是异步执行的

时间:2015-10-28 16:14:34

标签: teamcity msdeploy webdeploy teamcity-9.0

从我的teamcity服务器访问网络共享并从文件夹创建msdeploy包/ zip。

完成此操作后,我创建了一个Powershell驱动器,该驱动器映射到另一个服务器的共享文件夹。这个服务器在这里被称为GATE。

<# CREATE DRIVE FOR GATE #>
$password = ConvertTo-SecureString "MyPassword" -AsPlainText -force
$credential = new-object -TypeName System.Management.Automation.PSCredential -ArgumentList "MyUsername", $password 
New-PSDrive -Credential $credential -Name GATE -PSProvider FileSystem -Root \\NetworkShare\sharedfolder


<# DEPLOY SOURCE FILE #>
Move-Item -Path $zipPath -Destination GATE:\data.zip


<# READ STATUS FILE #>
$statusContent = Get-Content GATE:\data.status.txt

部署的data.zip是1.5 GB压缩。

当我运行Move-Item时,需要一段时间,直到1.5 GB到达服务器。

但是,在执行Move-Item之后,我在teamcity方面的代码仍在继续。

这就是我假设的问题,因为data.status.txt仅在文件真正移动时才在GATE服务器上创建。当我开始移动文件时,data.status.txt不存在,就在它被真正移动之后。

我该如何解决这个困境?

1 个答案:

答案 0 :(得分:0)

改为使用Copy-Item,然后删除源文件。

Copy-Item将阻止脚本执行,而Move-Item则不会。

编辑:实际上,从PowerShell v 5.0开始,两个cmdlet都会阻止进一步的脚本执行。以前不确定是否是这种情况。

结论:如果在测试中,您发现Move-Item没有阻止,您可以随时使用带有-PassThru的Copy-Item,这将始终阻止。