2010年7月8日木曜日

◆Bits転送2

PowerShell: ◆Bits転送(Start-Bitstransfer)では同期転送を試したが、今度は非同期転送を試してみる。
Start-BitstransferコマンドレットにAsynchronousスイッチをつけると非同期となりコマンドは即座にリターンする。
Get-BitstransferコマンドレットでJOBの進捗状況が判る。Transferredになれば終了だ。

ところが、終了はするのだが肝心の転送ファイルがローカルに見当たらない。
探してみると拡張子がTMPの隠しファイルとして存在していることが判った。
どうやらTransferredになったらComplete-Bitstransferコマンドレットを実行してやる必要があるみたい。

Get-BitsTransfer | ?{$_.JobState -eq "Transferred"} | Complete-BitsTransfer


転送中の中途半端なファイルを人目にさらさないという配慮なのだろう。

Complete-Bitstransferを実行するとTMPファイルがリネームされ隠しファイル属性が削除される。
また、Complete-BitstransferによりGet-Bitstransferで表示されていたJOB自体も削除される。

Complete-Bitstransferを実行する前にRemove-Bitstransferを実行するとTMPファイルもJOBも削除される。

実行中のJOB(Transferring)に対してSuspend-Bitstransferでサスペンド、サスペンドJOB(Suspended)に対してResume-Bitstransferで転送を再開することができる。

Start-BitstransferにはPriorityパラメータがあり、転送JOBのプライオリティを指定できる。
プライオリティは、Foreground、High、Normal、Lowの4種類。
High、Normal、Lowはバックグラウンドだ。

また、Foregroundジョブは並列に実行され、Backgroundジョブは優先度に応じた順番で一つずつ直列に実行される。

ローカルでDVD再生しながら試していたところ、やはりForegroundで複数の転送をしていると再生が途切れ途切れになった。
途中でPriorityを変更するには、

Get-Bitstransfer  |  Set-Bitstransfer  -Priority  Normal
とすると良い。

最後にもうひとつ、
一つのJOBで複数のファイルを指定することもできる。
後から追加するにはAdd-BitsFileコマンドを使う。

$job = Start-Bitstransfer  a.txt,b.txt  c:\,c:\  -Suspend
Add-BitsFile  -BitsJob $job  -Source c.txt  -Destination  c:\
Resume-Bitstransfer  -BitsJob  $job

0 件のコメント:

コメントを投稿