2013/04/01

PowerShellでスマートにダウンロードする(BITS)・その3・バックグラウンド

バックグラウンドで実行するには、コマンドレットStart-BitsTransferに「-Asynchronous」オプションを与えて実行する。
PS C:\Download> Start-BitsTransfer http://ftp.nara.wide.ad.jp/pub/Linux/centos/6/isos/x86_64/CentOS-6.3-x86_64-LiveCD.iso CentOS-6.3-x86_64-LiveCD.iso -Asynchronous

JobId                      DisplayName                TransferType               JobState                   OwnerAccount
-----                      -----------                ------------               --------                   ------------
90341cf3-6ba2-4a68-b1a8... BITS Transfer              Download                   Connecting                 ホスト名\ユーザ名..


PS C:\Download>
登録されたBITSジョブの詳細が表示された後、プロンプトが表示され、制御が戻る。現在の状況は「Connecting」、つまり接続中であることが判る。

バックグラウンドの場合、進行状況がフォアグラウンドには表示されない。また、ダウンロードが完了するまで、ファイルは作成されない。
PS C:\Download> dir
PS C:\Download>
進行状況を確認するには、コマンドレットGet-BitsTransferを使う。
PS C:\Download> Get-BitsTransfer

JobId                      DisplayName                TransferType               JobState                   OwnerAccount
-----                      -----------                ------------               --------                   ------------
90341cf3-6ba2-4a68-b1a8... BITS Transfer              Download                   Transferring               ホスト名\ユーザ名..


PS C:\Download>
現在「Transferring」中、すなわち転送中であることが解る。

ダウンロードが完了した状態になると、次のように表示される。
PS C:\Download> Get-BitsTransfer

JobId                      DisplayName                TransferType               JobState                   OwnerAccount
-----                      -----------                ------------               --------                   ------------
90341cf3-6ba2-4a68-b1a8... BITS Transfer              Download                   Transferred                ホスト名\ユーザ名..


PS C:\Download>
この時点ではまだ、ファイルは存在していない。
PS C:\Download> dir
PS C:\Download>
コマンドレットComplete-BitsTransferでBITSジョブを完了させる。
PS C:\Download> Complete-BitsTransfer (Get-BitsTransfer)
PS C:\Download> Get-BitsTransfer
PS C:\Download>
BITSジョブを完了させると、BITSジョブは削除される。

BITSジョブを完了させた時点で、ファイルが作成される。
PS C:\Download> dir


    ディレクトリ: C:\Download


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2012/07/08      2:26  725614592 CentOS-6.3-x86_64-LiveCD.iso


PS C:\Download>


その1・BITSとは
その2・フォアグラウンド
その3・バックグラウンド

PowerShellでスマートにダウンロードする(BITS)・その2・フォアグラウンド

フォアグラウンドでダウンロードする場合、コマンドレットStart-BitsTransferを以下の通り使用する。
PS C:\ISO> Start-BitsTransfer http://ftp.nara.wide.ad.jp/pub/Linux/centos/6/isos/x86_64/CentOS-6.3-x86_64-LiveCD.iso CentOS-6.3-x86_64-LiveCD.iso
フォアグラウンドの場合、進行状況が表示される。終了すると、プロンプトが表示される。確認してみよう。
PS C:\ISO> Start-BitsTransfer http://ftp.nara.wide.ad.jp/pub/Linux/centos/6/isos/x86_64/CentOS-6.3-x86_64-LiveCD.iso CentOS-6.3-x86_64-LiveCD.iso
PS C:\ISO> dir


    ディレクトリ: C:\ISO


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2012/07/08      2:26  725614592 CentOS-6.3-x86_64-LiveCD.iso


PS C:\ISO>


その1・BITSとは
その2・フォアグラウンド
その3・バックグラウンド

PowerShellでスマートにダウンロードする(BITS)・その1・BITSとは

WindowsでHTTPやFTPでダウンロードする必要がある場合、どういう方法で行うだろうか? もちろん、ダウンロード専用のソフトウェアを別途導入可能であれば、そうするのが簡単だ。
そうでない場合、例えば、自由にソフトウェアを導入できない環境であれば、通常IEを利用するだろう。
今回は、別途ソフトウェアも導入せず、IEも使わない方法を紹介したい。それは、PowerShellからBackground Intelligent Transfer Service (BIS)を利用する方法だ。
Background Intelligent Transfer Service (BITS, バックグラウンド インテリジェント転送サービス)は、アイドル中のネットワーク回線の帯域幅を使用し、非同期にマシン間のファイル転送を行うMicrosoft Windows オペレーティングシステムの構成の一部である。Windows Update、Windows Server Update Services、System Management Serverやその他のアプリケーションやWindows サービスで利用されている。
BITSを使えば、ユーザサービスに与える影響を最小化してダウンロードを実行可能だ。また、ダウンロードを一時休止・再開することもできる。
PowerShellでは、BITSを操作するコマンドとして、以下のものが準備されている。
PS C:\> Get-Command -Noun BITS*

CommandType     Name                                               ModuleName
-----------     ----                                               ----------
Cmdlet          Add-BitsFile                                       BitsTransfer
Cmdlet          Complete-BitsTransfer                              BitsTransfer
Cmdlet          Get-BitsTransfer                                   BitsTransfer
Cmdlet          Remove-BitsTransfer                                BitsTransfer
Cmdlet          Resume-BitsTransfer                                BitsTransfer
Cmdlet          Set-BitsTransfer                                   BitsTransfer
Cmdlet          Start-BitsTransfer                                 BitsTransfer
Cmdlet          Suspend-BitsTransfer                               BitsTransfer


PS C:\>

その1・BITSとは
その2・フォアグラウンド
その3・バックグラウンド