Powershell Copy-item不适用于unc路径

时间:2012-11-16 22:11:36

标签: powershell powershell-v3.0

我正在尝试使用UNC路径在服务器之间通过网络同步两个目录。文件大小超过20 GB。我写了一个Powershell脚本来比较两个目录,然后将任何缺少的文件复制到另一个目录。然而,这似乎不起作用。 一旦脚本运行,它就会正确地找到文件,但是当它尝试复制它们时,似乎会立即复制文件(这是不可能的)。即使文件在硬盘驱动器上占用20 GB以上的空间,它们也不包含任何数据。

$SERVER1 = "SERVER1"
$SERVER2 = "SERVER2"
$VDISKPATH = "e$\vdisks"

#Automatically get vDisks and pvp files in VDISKPATH folder
$FILES1 = Get-ChildItem -Path \\$SERVER1\$VDISKPATH\* -Include *.vhd,*.pvp
$FILES2 = Get-ChildItem -Path \\$SERVER2\$VDISKPATH\* -Include *.vhd,*.pvp

if ( $FILES1 -and $FILES2 ) {
    $DIFF = Compare-Object -ReferenceObject $FILES1 -DifferenceObject $FILES2 -Property name, length
}

# Copy all of the missing files from 
if ($DIFF) {
    $DIFF | Where-Object { $PSItem.SideIndicator -eq "<="} | ForEach-Object {
    Copy-Item "\\$SERVER1\$VDISKPATH\$($_.name)" -Destination \\$SERVER2\$VDISKPATH
    }
    $DIFF | Where-Object { $PSItem.SideIndicator -eq "=>"} | ForEach-Object { Write-Host "Copying $($_.name) to $SERVER1" |
    Copy-Item "\\$SERVER2\$VDISKPATH\$($_.name)" -Destination \\$SERVER1\$VDISKPATH
    }
Write-Host "All file copies have finished!"
}
else {
    Write-Host "All files are equal"
    Compare-Object -ReferenceObject $FILES1.name -DifferenceObject $FILES2.name -IncludeEqual
}

通常,文件副本(如果手动完成)大约需要15分钟。我让脚本运行了90分钟,它从未完成。有人可以帮我弄清楚文件为什么没有正确处理?

2 个答案:

答案 0 :(得分:1)

我会将robocopy用于这样的任务:

robocopy \\SERVER1\E$\vdisks \\SERVER2\E$\vdisks *.vhd *.pvp /z

答案 1 :(得分:0)

where-object的管道输出仍然是差异对象。所以而不是:

$_.name
在你的foreach中,你想要:

$_.InputObject.Name