Compartir a través de


Uso de los cmdlets de Windows PowerShell para WinRM para administrar trabajos de transferencia de BITS

Los cmdlets de PowerShell de administración remota de Windows pueden administrar trabajos de transferencia inteligente en segundo plano (BITS). Para obtener más información sobre la administración remota de BITS, consulte Clases de proveedor de BITS y proveedor de BITS.

En los ejemplos siguientes se requiere el proveedor BITS. El proveedor BITS está disponible después de instalar el servidor DE BITS Compact. Para obtener información sobre cómo instalar el servidor Compact, consulte la documentación de BITS Compact Server .

  1. Cree un trabajo de transferencia de 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
    

    El cmdlet Get-Credential solicita las credenciales del usuario para conectarse al equipo remoto y asigna las credenciales al objeto $cred.

    El cmdlet Invoke-WsmanAction crea el trabajo de transferencia de BITS en Client1 mediante la creación de una instancia de la clase BitsClientJob y el uso de la información de la tabla hash definida en el parámetro Valueset . El parámetro Valueset especifica la información necesaria para rellenar los parámetros del método CreateJob . En el ejemplo anterior, el usuario establece el parámetro Type en 0 (descargar). El usuario también especifica el nombre de los archivos remotos y locales del trabajo de descarga. Para obtener más información sobre cómo crear trabajos de transferencia de BITS y obtener información detallada sobre los parámetros, vea Método CreateJob .

    El cmdlet Invoke-WsmanAction asigna el resultado a la variable $result.

    Nota

    El carácter de énfasis grave (') se utiliza para indicar un salto de línea.

     

  2. Establezca la prioridad del trabajo de transferencia de BITS.

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

    El cmdlet Set-WsmanInstance cambia la nueva prioridad del trabajo de transferencia de BITS a 0 (BG_JOB_PRIORITY_FOREGROUND). Para obtener más información sobre los niveles de prioridad, consulte la enumeración BG_JOB_PRIORITY .

  3. Reanude el trabajo de transferencia de BITS.

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

    El cmdlet Invoke-WsmanAction llama al método SetJobState , que establece el estado del trabajo en 2 (Reanudar el trabajo).

  4. Administrar el trabajo de transferencia de 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
    }
    

    El ejemplo anterior es un script para sondear el estado del trabajo y realizar una acción basada en el estado. Se pueden realizar las siguientes acciones:

    Para obtener más información sobre los estados de trabajo, consulte la enumeración BG_JOB_STATE .

Get-Credential

Invoke-WsmanAction

Set-WsmanInstance