Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

原則として、ローカルおよびグローバルネットワークでは、ファイルはSMB、FTP、またはHTTPプロトコルを使用してデバイス間で転送されます。これらすべてのプロトコルの問題は、大きなファイルのダウンロードを再開する際の問題です。これは、ネットワークの速度が遅い場合や信頼性が低い場合にさらに悪化する可能性があります。さらに、これらのプロトコルを使用してファイルをコピーする場合、サーバーと受信者の間で使用可能なすべての帯域幅が使用されるため、ネットワークパフォーマンスや他のネットワークアプリの動作に悪影響を与える可能性があります(ネットワークで正しいQoSポリシーを構成できるとは限りません)。装置)。この記事では、BITSプロトコルとPowerShellの使用方法について検討します。 低速または不安定なネットワークを介して大きなファイルをコピーします。

BITSプロトコル

BITS(バックグラウンドインテリジェント転送サービス) システム間でファイルを転送するために使用されるWindowsサービスです。 BITSプロトコルを使用してファイルをダウンロードおよびアップロードできます。このプロトコルは、Windowsの自動更新を実行するとき(WSUSサーバーから更新をダウンロードする場合を含む)、SCCM配布ポイントからプログラムを受信するときなど、サーバーからファイルを受信するときにコンピューターによって使用されます。

BITSプロトコルの利点

  • BITSは、通信チャネルの使用帯域幅を制御でき、他のネットワークアプリやサービスの動作に影響を与えないインテリジェントなプロトコルです。 BITSは、空き(未割り当て)帯域幅のみを使用し、転送中にデータレートを動的に変更できます(他のアプリケーションがネットワーク使用量を増やす場合、BITSクライアントはネットワークを介したデータ転送レートを下げることができます)。
  • ファイルのダウンロードは、ユーザーに対して透過的なバックグラウンドモードで続行できます。
  • 再開モードのBITSジョブは、コンピューターとクライアント間の通信チャネルが切断された場合、またはコンピューターが再起動された後でも、自動的に続行されます。
  • データを失うことなく、BITSによるダウンロードを一時停止または再開できます。 。ネットワーク経由でファイルのコピーを再開する機能は、robocopy.exeユーティリティでも利用できます。これにより、接続が失われた場合にファイルのダウンロードを再開できます。
  • BITSを使用すると、ダウンロードジョブの優先順位を管理できます。
  • コンピューター間のファイル転送はポート80(HTTP)または443(HTTPS)で行われるため、ファイアウォールで追加のポートを開く必要はありません。たとえば、SMBプロトコルを介してファイルをコピーするときに使用されるポート445(古いバージョンのSMB 1.0プロトコルには多くの脆弱性があることを忘れないでください)。
  • 展開されたIISサーバーは、BITS受信者およびサーバー側で必ずしも必要ではありません。

したがって、BITSは、低速で不安定なネットワーク(衛星チャネル、GPRS接続など)を介して大きなファイルを転送するための推奨プロトコルです。

ビット:OSとPowerShellのバージョン要件

BITSプロトコルはWindowsXPに登場し、 bitsadmin.exe ユーティリティを使用して、BITSタスクを管理できます。このユーティリティは引き続きサポートされていますが、非推奨です。 BITSジョブを管理するには、特別なPowerShellコマンドレットを使用することをお勧めします。

このシナリオで動作するには、WindowsVistaまたはWindowsServer2008およびPowerShell2.0以降以上のOSが必要です。最新バージョンのWindows10およびWindowsServer2016/2012 R2は、BITSを完全にサポートしています。

ヒント 。 WindowsServer2003も使用できます。この場合、KB923845更新プログラムとPowerShell2.0をインストールする必要があります。

クライアントとサーバーの両方の側でBITSサポートが必要です。

PowerShellを使用してBITSプロトコルを介してファイルをダウンロードする方法

IIS HTTPサーバー( https://10.1.1.18/erd65_32.iso )に保存されている大きなISOファイルをダウンロードするとします。 )。このURLへの匿名アクセスが許可されていると想定されます(後で、認証を使用したURLへのアクセスを検討します)。

まず、PowerShellセッションにBITSモジュールをインポートします。

Import-Module BitsTransfer

モジュールがインポートされると、使用可能なすべてのコマンドのリストが次のように表示されます。

get-command *-BITS*

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

ご覧のとおり、8つのコマンドレットが利用可能です:

  • Add-BitsFile
  • Complete-BitsTransfer
  • Get-BitsTransfer
  • Remove-BitsTransfer
  • Resume-BitsTransfer
  • Set-BitsTransfer
  • Start-BitsTransfer
  • Suspend-BitsTransfer
BITSを使用したコンピューター間の同期ファイル転送

Start-BitsTransfe rコマンドレットを使用すると、HTTP(Invoke-WebRequestコマンドレットなど)およびネットワーク共有フォルダー(SMB経由)を介してファイルをダウンロードできます。 BITSプロトコルを使用して指定されたURLからファイルをダウンロードし、ローカルディレクトリC:\ Tempに保存するには、次のコマンドを使用します。

Start-BitsTransfer –source https://10.1.1.18/erd65_32.iso -destination c:\temp
BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

これはバックグラウンドインテリジェント転送サービス(BITS)を使用するファイル転送です」というメッセージ 指定されたファイルがBITSを使用してダウンロードされていることを意味します。

この場合、コマンドレットは同期モードでISOファイルのダウンロードを開始しました。ダウンロードは、ファイルエクスプローラーまたはCopy-Itemコマンドレットを使用したファイルコピーの通常のプロセスに似ています。画面にプログレスバーが表示され、ダウンロードステータスが示されます。コンピューターを再起動しても、ダウンロードは再開されません(ファイル全体を再度ダウンロードする必要があります)。

非同期モードのBITSを使用してネットワーク経由で大きなファイルを転送する

BITSのダウンロードは、非同期モードでも開始できます。これを行うには、 –非同期を追加します 上記のコマンドのパラメータ。このモードでは、何かが発生した場合(サーバーまたはクライアントの再起動、通信チャネルの中断など)、ソースが復元された後、BITSジョブが自動的に再開され、接続が中断された瞬間からファイルのダウンロードが続行されます。 / P>

Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

重要 。デフォルトでは、Start-BitsTransferはフォアグラウンド優先度(可能な限り最高の優先度)で実行されます。このモードで開始されたダウンロードは、チャネル帯域幅に関して他のプロセスと競合すると想定されています。これを回避するには、コマンドの引数として他の優先度を明示的に設定する必要があります。例:-優先度が低い:

Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low

非同期BITSタスクはバックグラウンドで実行され、ファイルのダウンロードプロセスは画面に表示されません。 BITSジョブのステータスは、PowerShellコンソールから Get-BitsTransferを使用して取得できます。 コマンド:

Get-BitsTransfer | fl

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

このコマンドは、転送ステータス(この場合、転送は終了しました:転送済み)、転送されたバイト数、合計ファイルサイズ、ファイルが作成された時間、およびタスクが完了した時間に関する情報を返します。

>

コンピューターで実行されているすべてのBITSタスクのステータスを表形式で表示できます。

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

非同期転送モードを使用する場合、 TMPを含む一時ファイル 拡張機能が作成されます(デフォルトでは、Windowsエクスプローラーでは非表示になっています)。ソースファイル(ソースサーバーに保存されている)に変換するには、コマンド Complete-BitsTransferを実行します。 :

Get-BitsTransfer | Complete-BitsTransfer

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

その後、BITSダウンロードタスクは完了したと見なされ、ジョブのリストから削除されます。

ローカルファイルをリモートWindowsファイルサーバー上のネットワーク共有フォルダーにアップロードできます。これを行うには、次のコマンドを使用します(便宜上、コピージョブの名前を指定できます):

Start-BitsTransfer -Source C:\iso\w10_1809.iso -Destination \\manch-fs1\iso -Asynchronous -DisplayName CopyISOtoMan

BITSタスクを一時的に一時停止するには、次のコマンドを実行します。

Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer

BITSジョブを再開するには、Resume-BitsTransferコマンドレットを使用します。

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

Add-BitsFileコマンドレットを使用して、BITSタスクにファイルを追加できます。

Get-BitsTransfer -Name CopyISOtoMan | Add-BitsFile -Source C:\iso\w10msu\* -Destination \\manch-fs1\iso -Asynchronous

コンピューター上のすべてのBITSダウンロードタスク(他のユーザーによって開始されたタスクを含む)を削除するには、次のコマンドを実行します。

Get-BitsTransfer -Allusers|Remove-BitsTransfer

システムアカウントで実行されているBITSジョブをキャンセルすることはできません(エラー0x80070005「ジョブをキャンセルできません」)。このようなタスクをキャンセルするには、SYSTEMでRemove-BitsTransferコマンドを実行する必要があります。

ファイルが保存されているサーバーでユーザー認証が必要な場合、次のコマンドを使用すると、リソースにアクセスするための資格情報を指定するためのウィンドウを表示できます。

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

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

BITSタスクの結果を追跡しやすくするために、単純なスクリプトを使用できます。これにより、タスクの進行状況を追跡でき、数秒に1回、画面にダウンロードの割合が表示されます。ダウンロードが完了すると、スクリプトはTMPファイルをソース形式に自動的に変換します。

Import-Module BitsTransfer
$bitsjob = Start-BitsTransfer -Source https://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 “%”
Sleep 3
}
Complete-BitsTransfer -BitsJob $bitsjob

BITSを使用してディレクトリの内容をコピーするにはどうすればよいですか?

すでに述べたように、BITSはWebサーバーを必要とせず、他のWindowsコンピューターまたはネットワーク共有フォルダーからファイルを直接コピーできることを意味します。

Start-BitsTransfer -Source \\lon-rep01\os\RHEL4.8-x86_64-AS-DVD.iso -Destination c:\temp -Asynchronous

BitsTransferは、特定のフォルダまたは他のプログラムで使用されているファイルからすべてのファイルとフォルダを再帰的にコピーすることはできません。指定したネットワーク共有フォルダからすべてのファイルとサブディレクトリをコピーするには、次のスクリプトを使用します(最初にターゲットディレクトリが存在するかどうかを確認して作成できます):

Import-Module BitsTransfer
$Source="\\lond-rep01\share\"
$Destination="c:\tmp\"
if ( -Not (Test-Path $Destination))
{
$null = New-Item -Path $Destination -ItemType Directory
}
$folders = Get-ChildItem -Name -Path $source -Directory -Recurse
$bitsjob = Start-BitsTransfer -Source $Source\*.* -Destination $Destination -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
foreach ($i in $folders)
{
$exists = Test-Path $Destination\$i
if ($exists -eq $false) {New-Item $Destination\$i -ItemType Directory}
$bitsjob = Start-BitsTransfer -Source $Source\$i\*.* -Destination $Destination\$i -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
}

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

PowerShellとBITSを使用してHTTPサーバーにファイルをアップロードする方法

BITSを使用すると、HTTPサーバーからファイルをダウンロードできるだけでなく、リモートWebサーバーにファイルをアップロードすることもできます。これを行うには、ビットサーバー拡張機能を備えたIISWebサーバー コンポーネントはターゲットサーバーにインストールする必要があります。 ビットアップロードのIIS仮想ディレクトリの設定 セクションでは、「クライアントにファイルのアップロードを許可する」を有効にする必要があります 」オプション。

BITSとPowerShellを使用して信頼性の低いネットワーク経由で大きなファイルをコピーする

匿名認証を使用する場合は、匿名ユーザーがNTFSアクセス許可レベルでディレクトリに書き込むことを許可する必要があります。許可されたユーザーの下でファイルのアップロードを実行する場合は、アップロードフォルダーにRWアクセス許可を付与する必要があります。

BITSプロトコルを使用してファイルをHTTPサーバーにアップロードするには、次のコマンドを実行します。

Start-bits –source c:\iso\winsrv2016.iso -destination https://10.1.1.18/MEDVImages/winsrv2016.iso –Transfertype Upload

デフォルトでは、IISでは最大30MBのファイルをアップロードできることに注意してください。大きなファイルのアップロードを許可するには、web.configファイルのmaxAllowContentLengthパラメーターの値を変更する必要があります。

したがって、BITS機能を使用することは、SMBプロトコルを使用してネットワーク経由でコピーする一般的なファイルの優れた代替手段です。 BITSファイル転送タスクは、接続の中断やコンピューターの再起動にもかかわらず実行され、他のアプリに干渉することなく帯域幅をあまり占有しません。 BITSプロトコルは、WANネットワークを介して大きなISOイメージと仮想マシンファイル(vmdk、vhdx)を転送するための最適なソリューションになります。


  1. Mac で大きなファイルを見つけて削除する方法

    スペースをきれいにするために、Mac 上のファイルを削除することをお勧めします。特に定期的に大きいもの。これを忘れると、Mac は簡単に散らかり、最終的にはパフォーマンスの問題を引き起こします。 Mac のストレージが不足している場合、どのファイルが最も多くのスペースを占めているかを知る必要があります。そのため、それらのファイルを削除して Macintosh HD のスペースを効率的に解放できます。 ここでは、Mac 上の大きなファイルを見つける 4 つの異なる方法について説明します。これにより、それらを削除して Mac を高速化できます。 Mac で大きなファイルを見つける方法のガイド:

  2. PowerShell を使用してファイルとフォルダーを削除する方法

    すべてのファイルとフォルダーを手動で削除するのは面倒です。ただし、PowerShell の使い方を知っていれば、その必要はありません。この記事では、PowerShell を使用して Windows のファイルとフォルダーを削除するさまざまな方法を紹介します。 PowerShell を使用してファイルとフォルダーを削除する PowerShell は、Windows が提供する無料のコマンド自動化ツールです。簡単に言えば、コマンド プロンプト ウィンドウ内で起動するシェルの助けを借りて、オペレーティング システムをより詳細に制御するのに役立ちます。 コマンドレットとも呼ばれるコマンドレットを利