Robocopy не имеет переключателя проверки, хотя несколько похожих приложений имеют.XXCopy является популярным.
Вы можете использовать / r и / w, чтобы повторить определенное количество раз и подождать определенное количество секунд между каждой повторной попыткой, что помогает при проблемах с сетью.
Выможет также выполнить сравнение с Get-FileHash после завершения копирования.
Вот очень простой пример.
$source = 'C:\temp'
$destination = 'C:\temp2'
#copy files
robocopy $source $destination /z /e /r:1 /w:1
#get all files, hash them, select just the path and file hash
#group by the hash, and finally get the ones that only have 1 item
#anything successfully copied will have 2 hashes that match
Get-ChildItem $source,$destination | Get-FileHash | Select-Object Path, Hash | Group-Object Hash | Where-Object Count -eq 1
Для случайной выборки 25 ГБ файлов, которая была у меня под рукой, проверкаэто заняло всего ~ 1 минуту.
РЕДАКТИРОВАТЬ: Если вы работаете в v3, вы можете использовать следующий Get-FileHash, но это не является быстрой функцией, которая не была полностью протестирована для всех сред или пограничных случаев.
function Get-TestFileHash
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true,
ValueFromPipeline = $true,
Position=0)]
[String]
$FileName,
[Parameter(Position=1)]
[System.Security.Cryptography.HashAlgorithmName]
$Algorithm = [System.Security.Cryptography.HashAlgorithmName]::SHA256
)
Process
{
Foreach($File in $FileName){
$FilePath = Get-Item $File
If($FilePath -is [System.IO.FileInfo]){
$Stream = New-Object System.IO.FileStream($FilePath,[System.IO.FileMode]::Open)
$StringBuilder = New-Object System.Text.StringBuilder
[System.Security.Cryptography.HashAlgorithm]::Create($Algorithm).ComputeHash($Stream)|%{[Void]$StringBuilder.Append($_.ToString("x2"))}
$stream.Close()
$stream.Dispose()
[PSCustomObject]@{
Algorithm=$Algorithm
Hash=$StringBuilder.ToString().ToUpper()
Path=$FilePath
}
}
}
}
}
Пример этой команды:
PS > dir | Get-TestFileHash
Algorithm Hash Path
--------- ---- ----
SHA256 CB0363573C31B7E4684A3D620C125DF0CC7C9335379A8C3D08710EA5B65EA014 C:\Users\Bob\documents\afile1.txt
SHA256 E2F6395909A0FF358A3A5ACBEC5B60A2212FE6511D3E593E0940BA0A51D1DD66 C:\Users\Bob\documents\afile2.txt
SHA256 88EB168DD68C484226E5B3E0626AF30B1364DA0D6B53EA168649AB472C5F9FB7 C:\Users\Bob\documents\afile3.txt
SHA256 52A20D3072E8AA919746176C222B355CE7E7E3FA704E81561E366A8934C37509 C:\Users\Bob\documents\afile4.txt
SHA256 DD61CEFC783E581F1A5D490E5A04CE6B7E892201221ABB0E651AD7C272B4B279 C:\Users\Bob\documents\afile5.txt
SHA256 954B7CC9846F800FA5BE5AD14EB8CA9FAA38FBE936E93DA9599B1026EEEF7C06 C:\Users\Bob\documents\afile6.txt
SHA256 0F63AC1AD9A0D51362667B108DFFAED26E283B547F1694DF7DFF8A74357AA68F C:\Users\Bob\documents\afile7.txt