PowerShellとBITSを使用して大容量ファイルを効率的に転送する方法

ネットワーク全体に負担をかけずに大きなファイルを送信またはダウンロードしたい場合は、Windows に組み込まれている BITS (バックグラウンド インテリジェント転送サービス) が非常に便利です。接続が完璧でない場合や、転送を一時停止して再開する必要がある場合でも、バックグラウンドで静かに動作し、大きなファイルをスムーズに処理するように設計されています。正直なところ、これは非常に信頼性が高いため、特にネットワーク管理者や大きなメディア ファイルや VM ファイルを扱う人にとっては特に役立つため、多くの人がこれを見落としているのは少し奇妙です。さて、このガイドでは、PowerShell を使用して BITS 転送を開始、管理、および監視する方法について説明します。少しマニアックですが、努力する価値はあります。なぜなら、セットアップによっては、特に低速または不安定なリンクを介して、BITS による転送は従来のコピーよりもはるかに安定しているからです。また、これを定期的に行う場合は、その多くが自動化やスクリプトに適合するため、知っておくと便利です。

PowerShell と BITS を使用して大容量ファイルを転送する方法

PowerShellのBitsTransferモジュールを使用してファイルをダウンロードする方法

これが基本的な方法です。PowerShellのBitsTransferモジュールを使ってファイルのダウンロードを開始します。通常のWebダウンロードと似ていますが、必要に応じて一時停止、再開、帯域幅の調整ができるため、より便利です。Start -BitsTransferコマンドが役立ちます。例えば、テストサーバーからISOファイルを取得するとします。

Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp

このコマンドはダウンロードを開始し、画面にはプログレスバーが表示されます。ただし、これは単純な同期転送であることにご注意ください。ダウンロード中に接続が切断された場合は、再開機能がないため、最初からやり直す必要があります。少し面倒ですが、簡単です。一部のシステムでは、UACまたはファイアウォール設定でBITSがブロックされている場合に問題が発生する場合がありますので、何も起こらない場合は、これらの設定を再度確認してください。

非同期転送と再開転送を有効にする方法

接続が不安定な場合や、巨大なファイルをダウンロードしている場合は、非同期モードが最適です。非同期モードではジョブがバックグラウンドで継続されるため、システムが再起動したりネットワークが切断されたりしても、すべてが復旧すればすぐに再開されます。-asynchronous を追加するだけです。

Start-BitsTransfer –source http://testsite.woshub.loc/netinst.iso -destination c:\temp -asynchronous

こうすることで、転送が他の処理をブロックすることがなくなり、接続が切れた場合でも中断したところから再開しようとします。不安定なネットワークで大きなファイルを転送する場合に便利です。また、BITSを他のネットワークトラフィックとうまく連携させたい場合は、「 – Priority low」を追加して優先度を下げてください。そうすれば、帯域幅を独占してブラウジングや作業の妨げになることがなくなります。

BITSジョブの管理と監視

転送が実行されたら、その様子を注意深く監視する必要があります。アクティブなBITSジョブをすべて表示するには、次のコマンドを実行します。

Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize

これにより、転送中のデータ、完了量、そして現在の状態(接続中、転送中、完了)を簡単に確認できます。転送が完了したら、忘れずに次のコマンドを実行して、正常に終了させて​​ください。

Get-BitsTransfer | where {$_. JobState -eq 'Transferred'} | Complete-BitsTransfer

このコマンドは転送を完了し、一時ファイル(.TMP)の名前を元のファイル名に戻してクリーンアップします。これを実行しないと、未完成のファイルが残ってしまい、使いにくくなる場合があります。

ファイルをネットワーク共有またはリモート PC にコピーする必要がある場合は、次のように UNC パスを指定します。

Start-BitsTransfer -Source C:\iso\win2022.iso -Destination \\man-srv01\c$\iso -Asynchronous -DisplayName CopyISOtoMan

また、転送が停止したり、一時停止したい場合は、以下を使用します。

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

後で再開するには、次を実行します。

Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -Asynchronous

PowerShell では、リモート サーバーで認証する必要がある場合、次の方法で資格情報を渡すこともできます。

Start-BitsTransfer -source http://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential (Get-Credential)

最後に、進行状況を執拗に追跡している場合は、小さなスクリプトで転送率をリアルタイムで表示できるので便利です。

Import-Module BitsTransfer $bitsjob = Start-BitsTransfer -Source http://10.1.1.18/erd65_32.iso -Destination c:\temp -Asynchronous while (($bitsjob. JobState. ToString() -eq 'Transferring') -or ($bitsjob. JobState. ToString() -eq 'Connecting')) { Write-Host $bitsjob. JobState. ToString() $Proc = ($bitsjob. BytesTransferred / $bitsjob. BytesTotal) * 100 Write-Host "$Proc %" Start-Sleep -Seconds 3 } Complete-BitsTransfer -BitsJob $bitsjob

非常に洗練された方法ではありませんが、継続的なステータスが必要な場合はこれで十分です。ただし、BITS は Windows Update や多くのバックグラウンドネットワーク処理に使用されているため、Windows 独自のメカニズムと同等の信頼性があります。つまり、他のネットワークアクティビティに干渉しないようにするため、WAN 経由の大規模ダウンロードや複数回のダウンロードに最適です。