1. ホーム
  2. powershell

大容量ファイルコピー時の進行状況(Copy-Item & Write-Progress?)

2023-09-22 08:42:28

質問

PowerShell で非常に大きなファイル (あるサーバーから別のサーバーへ) をコピーし、その進捗状況を表示する方法はありますか?

ループと組み合わせて Write-Progress を使用し、多くのファイルをコピーして進行状況を表示するソリューションがあります。 しかし、単一のファイルの進行状況を表示するものを見つけることができません。

何か考えがありますか?

どのように解決するのですか?

の進捗について聞いていないのですが。 Copy-Item . もし、外部ツールを使いたくないのであれば、ストリームで実験することができます。バッファのサイズは様々で、異なる値(2kbから64kbまで)を試すことができます。

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
        [long]$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 ([long]($total * 100 / $ffile.Length))
            }
        } while ($count -gt 0)
    }
    finally {
        $ffile.Dispose()
        $tofile.Dispose()
        Write-Progress -Activity "Copying file" -Status "Ready" -Completed
    }
}