Powershell Copy-Item 静默失败

Powershell Copy-Item 静默失败

我有一个在 Windows Server 2008 R2 64 位上运行的 PowerShell 2.0 脚本,它将一些 Hyper-V .vhd 文件复制到另一台服务器作为“备份解决方案”。

该脚本获取要复制的 .vhd 列表,然后遍历该列表以使用 Copy-Item 复制它们。它还将一些日志信息写入文件。文件被复制到另一台服务器(Windows Server 2003 Sp2)中,并放入使用 NTFS 压缩的目录中。

其中一个文件未复制。它相对较大~68GB。其他文件为20GB或更小。奇怪的是,在复制过程中,文件出现在目标服务器上,并且由于日志文件条目的时间差异,生成的日志文件似乎表明文件已被复制。

我在日志文件中没有看到任何错误消息,在两台机器的事件日志中也没有看到任何消息。

这是执行复制的代码。

Get-ChildItem $VMSource *.vhd -Recurse | foreach-object {

    $time = Get-Date -format HH.mm.ss
    Add-Content $logFileName "$time : File Copy ($_) started" 

    $fullname = $_.FullName
    Add-Content $logFileName "$time : Copying $fullname to $VMDestination" 

    Copy-Item $fullname $VMDestination -Force -ErrorAction SilentlyContinue -ErrorVariable errors

    foreach($error in $errors)
    {
        if ($error.Exception -ne $null)
        {
            Add-Content $logFileName "'tERROR COPYING FILE : $($error.Exception)"
        }
    }

    $time = Get-Date -format HH.mm.ss
    Add-Content $logFileName "$time : File Copy ($_) finished"
}

我只能认为将这么大的文件复制到压缩目录可能会出现一些问题?有什么想法吗?

答案1

问题在于该文件的复制。我尝试在 Explorer 中复制该文件,大约一小时后失败,并出现错误,指出该文件的一部分已被另一个进程锁定。

我最终修改了脚本,在将文件移动到目标位置之前对其进行了压缩。脚本现在可以成功运行,尽管耗时更长。

对于任何答案,都表示感谢。

答案2

您需要检查 -errorvariable 选项。如果您使用 +errors 而不是 -errors,您可能会检索到其他错误。

相关内容