次の方法で共有


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