WinRM Windows PowerShell コマンドレットを使った BITS 転送ジョブの管理

Windows リモート管理 PowerShell コマンドレットは、バックグラウンド インテリジェント転送サービス (BITS) 転送ジョブを管理できます。 BITS リモート管理の詳細については、BITS プロバイダーおよび BITS プロバイダー クラスに関するページを参照してください。

次の例では、BITS プロバイダーが必要です。 BITS プロバイダーは、BITS Compact サーバーのインストール後に使用できます。 コンパクトサーバーのインストールの詳細については、「BITS コンパクトサーバー」のドキュメントを参照してください。

  1. BITS 転送ジョブを作成します。

    # Get the credentials to connect to the remote client computer
    $cred = Get-Credential
    $result = Invoke-WsmanAction -Action CreateJob –Resourceuri wmi/root/microsoft/bits/BitsClientJob `
    –Valueset @{DisplayName="TestJob"; RemoteUrl="https://Server01/servertestdir/testfile1.txt"; LocalFile="C:\clienttestdir\testfile1.txt";Type=0} `
    –ComputerName Client1  -Credential $cred
    

    Get-Credential コマンドレットは、リモート コンピューターに接続するようにユーザーの資格情報を要求し、その資格情報を $cred オブジェクトに割り当てます。

    Invoke-WsmanAction コマンドレットは、BitsClientJob クラスのインスタンスを作成し、Valueset パラメーターで定義されているハッシュ テーブルの情報を使用して、Client1 で BITS 転送ジョブを作成します。 Valueset パラメーターは CreateJob メソッドのパラメーターを設定するために必要な情報を指定します。 前の例では、ユーザーは Type パラメーターを 0 (ダウンロード) に設定しています。 ユーザーは、ダウンロード ジョブのリモート ファイルとローカル ファイルの両方の名前も指定します。 BITS 転送ジョブの作成の詳細およびパラメーターの詳細については、CreateJob メソッドを参照してください。

    Invoke-WsmanAction コマンドレットは、結果を $result 変数に割り当てます。

    Note

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

     

  2. BITS 転送ジョブの優先順位を設定します。

    Set-WsmanInstance  -ResourceURI  wmi/root/microsoft/bits/BitsClientJob -SelectorSet @{JobId=$result.JobId} `
    -ValueSet @{Priority=0} –ComputerName Client1  -Credential $cred
    

    Set-WsmanInstance コマンドレットは、新しい BITS 転送ジョブの優先順位を 0 (BG_JOB_PRIORITY_FOREGROUND) に変更します。 優先度レベルの詳細については、BG_JOB_PRIORITY 列挙型を参照してください。

  3. BITS 転送ジョブを再開します。

    Invoke-WsmanAction -Action SetJobState -ResourceUri wmi/root/microsoft/bits/BitsClientJob  -selectorset @{JobId=$result.JobId}  `
    -valueset @{JobState= 2} –ComputerName Client1  -Credential $cred
    

    Invoke-WsmanAction コマンドレットは SetJobState メソッドを呼び出し、ジョブの状態を 2 (ジョブの再開) に設定します。

  4. BITS 転送ジョブを管理します。

    $IsPprocessing = $TRUE
    while ($IsPprocessing)
    {
        $result = Get-WsmanInstance  -ResourceURI  wmi/root/microsoft/bits/BitsClientJob -selectorset @{JobId = $result.JobId} `
               –ComputerName Client1  -Credential $cred
        if ($result.State -eq 6)
        {
    
    #Complete the job           
            Invoke-WsmanAction -action SetJobState -resourceuri wmi/root/microsoft/bits/BitsClientJob  -selectorset @{JobId=$result.JobId}  `
                          -valueset @{JobState= 1} –ComputerName Client1  -Credential $cred
            "Job Successfully Transferred"
            $IsPprocessing = $FALSE;
        }
        elseif (($result.State -eq 4) -or ($result.State -eq 5))
        {
    
    #Cancel the job
            "Job is in Error " 
            Invoke-WsmanAction -action SetJobState -resourceuri wmi/root/microsoft/bits/BitsClientJob  -selectorset @{JobId=$result.JobId}  `
                         -valueset @{JobState= 0} –ComputerName Client1  -Credential $cred
            # You can troubleshoot or delete the job
            $IsPprocessing = $FALSE;
        }
        else
        {
        "Job is processing\n" 
        }
    
    # Perform other action or poll in a tight loop. This example sleeps for 5 seconds
    sleep 5
    }
    

    前の例は、ジョブの状態をポーリングし、状態に基づいてアクションを実行するスクリプトです。 次のアクションを実行できます。

    • $result の状態が 4 (BG_JOB_STATE_ERROR) の場合、Invoke-WsmanAction コマンドレットは SetJobState メソッドを呼び出してジョブを取り消します。
    • $result の状態が 5 (BG_JOB_STATE_ERROR) の場合、Invoke-WsmanAction コマンドレットは SetJobState メソッドを呼び出して、ジョブを取り消します。
    • $result の状態が 6 (BG_JOB_STATE_TRANSFERRED) の場合、Invoke-WsmanAction コマンドレットは SetJobState メソッドを呼び出し、完了するように状態を設定します。

    ジョブの状態の詳細については、BG_JOB_STATE 列挙型を参照してください。

Get-Credential

Invoke-WsmanAction

Set-WsmanInstance