
我有一個在 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
問題一般出在該文件的副本上。我嘗試在資源管理器中複製該文件,大約一個小時後失敗,並出現錯誤,指出該文件的一部分已被另一個進程鎖定。
我最終修改了腳本以在將文件移動到目的地之前對其進行壓縮。該腳本現在可以成功運行,儘管需要更長的時間。
為任何答案乾杯。
答案2
您需要檢查 -errorvariable 選項。如果您使用 +errors 而不是 -errors,您可能會檢索到其他錯誤。