2

UNC パスを使用して、サーバー間のネットワーク上で 2 つのディレクトリを同期しようとしています。ファイルは 20 GB 以上です。2 つのディレクトリを比較し、欠落しているファイルを別のディレクトリにコピーする 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 分間実行しましたが、終了しませんでした。ファイルが適切に処理されない理由を理解するのを手伝ってくれる人はいますか?

4

2 に答える 2

1

私はrobocopyそのようなタスクに使用します:

robocopy \\SERVER1\E$\vdisks \\SERVER2\E$\vdisks *.vhd *.pvp /z
于 2012-11-17T10:40:01.113 に答える
0

where-object のパイプライン出力は引き続き差分オブジェクトになります。したがって、代わりに:

$_.name

あなたの foreach では、次のことが必要です。

$_.InputObject.Name
于 2012-11-16T22:53:07.300 に答える