Share via


Windows PowerShell を使用した BITS 転送ジョブの作成

PowerShell コマンドレットを使用して、同期および非同期のバックグラウンド インテリジェント転送サービス (BITS) 転送ジョブを作成できます。

このトピックのすべての例では、Start-BitsTransfer コマンドレットを使用します。 コマンドレットを使用するには、必ず最初にモジュールをインポートしてください。 モジュールをインストールするには、Import-Module BitsTransfer コマンドを実行します。 詳細については、PowerShell プロンプトで「Get-Help Start-BitsTransfer」と入力します。

重要

Windows サービスなどの非対話型コンテキストで実行されるプロセス内から *-BitsTransfer*-BitsTransfer コマンドレットを使用すると、BITS ジョブにファイルを追加できない可能性があり、その結果、中断状態になる可能性があります。 ジョブを続行するには、転送ジョブの作成に使用された ID がログオンしている必要があります。 たとえば、タスク スケジューラ ジョブとして実行された PowerShell スクリプトで BITS ジョブを作成する場合、タスク スケジューラのタスク設定「ユーザーがログオンしているときのみ実行」が有効になっていない限り、BITS 転送は完了しません。

 

同期 BITS 転送ジョブを作成するには

Start-BitsTransfer -Source https://Server01/serverdir/testfile1.txt `
-Destination C:\clientdir\testfile1.txt

Note

アクセント記号文字 (`) は改行を示すために使用されます。

 

前の例では、ファイルのローカル名とリモート名をそれぞれ Source パラメーターと Destination パラメーターで指定しています。 ファイル転送が完了するかエラー状態になったときに、コマンド プロンプトに戻ります。

既定の転送の種類はダウンロードです。 ファイルを HTTP の場所にアップロードする場合は、TransferType パラメーターを [Upload] に設定する必要があります。

パラメーターの位置は Start-BitsTransfer コマンドレットに適用されるため、Source パラメーターと Destination パラメーターにパラメーター名を指定する必要はありません。 したがって、このコマンドは次のように簡略化できます。

Start-BitsTransfer https://Server01/serverdir/testfile1.txt C:\clientdir\testfile1.txt

複数のファイルを含む同期 BITS 転送ジョブを作成するには

Start-BitsTransfer -Source C:\clientsourcedir\*.txt `
-Destination c:\clientdir\ -TransferType Download

前の例では、Start-BitsTransfer コマンドによって新しい BITS 転送ジョブが作成されます。 すべてのファイルがこのジョブに追加され、クライアントに順次転送されます。

Note

転送先パスにはワイルドカード文字を使用できません。 宛先パスは、相対ディレクトリ、ルート パス、または暗黙的なディレクトリ (つまり、現在のディレクトリ) をサポートします。 ワイルドカード文字を使用して宛先ファイルの名前を変更することはできません。 さらに、HTTP URL と HTTPS URL は、ワイルドカードでは機能しません。 ワイルドカードは、UNC パスとローカル ディレクトリに対してのみ有効です。

 

同期 BITS 転送ジョブを作成してリモート サーバーの資格情報を指定するには

Start-BitsTransfer -DisplayName MyJob -Credential Username\Domain `
-Source https://server01/servertestdir/testfile1.txt -Destination c:\clienttestdir\testfile1.txt `
-ProxyUsage Override -ProxyList @(https://proxy1, 123.24.21.23, proxy3)

前述の例では、ユーザーは BITS 転送ジョブを作成して、認証が必要なサーバーからファイルをダウンロードします。 ユーザーに資格情報の入力を求めるメッセージが表示され、Credential パラメーターは資格情報オブジェクトを Start-BitsTransfer* コマンドレットに渡します。 ユーザーは明示的なプロキシを設定し、BITS 転送ジョブは ProxyList パラメーターで定義されているプロキシのみを使用します。 DisplayName パラメーターは、BITS 転送ジョブに一意の表示名を指定します。

CSV ファイルから同期 BITS 転送ジョブを作成するには

Import-CSV filelist.txt | Start-BitsTransfer -TransferType Upload

Note

「|」はパイプ文字です。

 

前の例では、ユーザーがクライアントから複数のファイルをアップロードする BITS 転送ジョブを作成します。 Import-CSV コマンドレットは、ソースファイルとコピー先ファイルの場所をインポートし、それらを Start-BitsTransfer コマンドにパイプします。 Start-BitsTransfer コマンドは、ファイルごとに新しい BITS 転送ジョブを作成し、そのファイルをジョブに追加してから、サーバーに順番に転送します。

Filelist.txt ファイルの内容は、次の形式にする必要があります。

Source, Destination
c:\clienttestdir\testfile1.txt, https://server01/servertestdir/testfile1.txt
c:\clienttestdir\testfile2.txt, https://server01/servertestdir/testfile2.txt
c:\clienttestdir\testfile3.txt, https://server01/servertestdir/testfile3.txt
c:\clienttestdir\testfile4.txt, https://server01/servertestdir/testfile4.txt

非同期 BITS 転送ジョブを作成するには

$Job = Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip `
       -Destination d:\temp\downloads\ -Asynchronous

while (($Job.JobState -eq "Transferring") -or ($Job.JobState -eq "Connecting")) `
       { sleep 5;} # Poll for status, sleep for 5 seconds, or perform an action.

Switch($Job.JobState)
{
    "Transferred" {Complete-BitsTransfer -BitsJob $Job}
    "Error" {$Job | Format-List } # List the errors.
    default {"Other action"} #  Perform corrective action.
}

前述の例では、BITS 転送ジョブが $Job 変数に割り当てられました。 ファイルは順番にダウンロードされます。 転送ジョブが完了すると、ファイルはすぐに使用可能になります。 $Job.JobState が "転送済み" を返す場合、$Job オブジェクトは Complete-BitsTransfer コマンドレットに送信されます。

$Job.JobState が "Error" を返す場合、$Job オブジェクトは Format-List コマンドレットに送信され、エラーが一覧表示されます。

PowerShell リモート セッションを管理するには

Windows 10 バージョン 1607 以降では、PowerShell コマンドレットを実行し、BITS管理または別のマシン (物理または仮想) に接続されている PowerShell リモート コマンド ラインから BITS インターフェイスを使用する他のアプリケーションを使用することもできます。 この機能は、同じ物理マシン上の仮想マシンに対して PowerShell Direct コマンド ラインを使用する場合は使用できません。また、WinRM コマンドレットを使用する場合は使用できません。

リモート PowerShell セッションから作成された BITS ジョブは、そのセッションのユーザー アカウント コンテキストで実行され、そのユーザー アカウントに関連付けられたアクティブなローカル ログオン セッション、またはリモート PowerShell セッションが少なくとも 1 つある場合にのみ進行します。 PowerShell の永続的な PSSessions を使用すると、Windows PowerShell を使用したリモート コンピューターの管理の説明に従って、各ジョブの PowerShell ウィンドウを開いたままにして進行を続ける必要なく、リモート コマンドを実行できます。

  • New-PSSession では、永続的なリモート PowerShell セッションが作成されます。 作成されると、PSSession オブジェクトは、明示的に削除されるまでリモート コンピューターに保持されます。 アクティブなセッションで開始された BITS ジョブは、クライアントがセッションから切断された後でも、データの転送を続行します。
  • Disconnect-PSSession では、リモート PowerShell セッションからクライアント コンピューターが切断され、セッションの状態は引き続きリモート コンピューターによって保持されます。 最も重要なことは、リモート セッションのプロセスは実行を継続し、BITS ジョブは進行し続けることです。 クライアント マシンは、Disconnect-PSSession を呼び出した後に再起動したり、オフにしたりすることもできます。
  • Connect-PSSession は、アクティブなリモート PowerShell セッションにクライアント コンピューターを再接続します。
  • Remove-PSSession はリモート PowerShell セッションを破棄します。

以下の例は、PowerShell リモートを使用して非同期 BITS 転送ジョブを処理し、リモート セッションにアクティブに接続していない場合でもジョブを続行できるようにする方法を示しています。

# Establish a PowerShell Remote session in Server01 with name 'MyRemoteSession'
New-PSSession -ComputerName Server01 -Name MyRemoteSession -Credential Domain01\User01

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# While running in the context of the PowerShell Remote session, start a new BITS transfer
Start-BitsTransfer -Source https://Server1.TrustedDomain.com/File1.zip -Destination c:\temp\downloads\ -Asynchronous

# Exit the PowerShell Remote session's context
Exit-PSSession

# Disconnect the 'MyRemoteSession' PowerShell Remote session from the current PowerShell window
# After this command, it is safe to close the current PowerShell window and turn off the local machine
Disconnect-PSSession -Name MyRemoteSession


# The commands below can be executed from a different PowerShell window, even after rebooting the local machine
# Connect the 'MyRemoteSession' PowerShell Remote session to the current PowerShell window
Connect-PSSession -ComputerName Server01 -Name MyRemoteSession

# Enter the previously-established session to execute commands
Enter-PSSession -Name MyRemoteSession

# Enumerate active BITS transfers on the remote machine
Get-BitsTransfer

# Manage BITS transfers on the remote machine via Complete-BitsTransfer, Remove-BitsTransfer, etc.

# Exit the PowerShell Remote session's context
Exit-PSSession

# Destroy the 'MyRemoteSession' PowerShell Remote session when no longer needed
Remove-PSSession -Name MyRemoteSession

Start-BitsTransfer

Complete-BitsTransfer