Powershell. Копирование и Progress-bar (Write-Progress)

Вот содрал функцию с недр инета, которая копирует файл и рисует шкалу прогресса копирования  :

function Copy-File {
param( [string]$from, [string]$to)
$ffile = [io.file]::OpenRead($from)
$tofile = [io.file]::OpenWrite($to)
Write-Progress -Activity «Copying file» -status «$from -> $to» -PercentComplete 0
try {
[byte[]]$buff = new-object byte[] 4096
[int]$total = [int]$count = 0
do {
$count = $ffile.Read($buff, 0, $buff.Length)
$tofile.Write($buff, 0, $count)
$total += $count
if ($total % 1mb -eq 0) {
Write-Progress -Activity «Copying file» -status «$from -> $to» `
-PercentComplete ([int]($total/$ffile.Length* 100))
}
} while ($count -gt 0)
}
finally {
$ffile.Close()
$tofile.Close()
}
}
Но по моему у него есть недостаток. Так как он пишет потоком, открывая файлы на чтение и запись, скорость копирования уменьшается. Соотношений не знаю, но на глаз 3Гб копировались около 10 мин по 1Гб по сравнению с Copy-Item, который прокопировал за 1,5-3 мин

Об авторе Alex

Работаю Администратором. В основном Windows. Специализируюсь на Hyper-V, поддержке продуктивных сред и во всём помогает POSH. Малость Sharepoint. Чуть чуть работаю с железом
Запись опубликована в рубрике Powershell с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий