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

Move-Item on large files seem to be executed async

从我的 teamcity 服务器访问网络共享并从文件夹创建 msdeploy package/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 到达服务器需要一段时间。

但是我在 teamcity 端的代码在执行 Move-Item 后立即继续。

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

我该如何解决这个难题?

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

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

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

结论:如果在测试中,你发现 Move-Item 不阻塞,你总是可以使用带 -PassThru 的 Copy-Item 代替,这将总是阻塞。