Condividi tramite


Uso dei cmdlet di Windows PowerShell winRM per gestire i processi di trasferimento BITS

I cmdlet di PowerShell di Gestione remota Windows possono gestire i processi di trasferimento bitS (Background Intelligent Transfer Service). Per altre informazioni sulla gestione remota BITS, vedere Classi del provider BITS e del provider BITS.

Gli esempi seguenti richiedono il provider BITS. Il provider BITS è disponibile dopo l'installazione del server BITS Compact. Per informazioni sull'installazione del server Compact, vedere la documentazione del server BITS Compact.

  1. Creare un processo di trasferimento 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
    

    Il cmdlet Get-Credential richiede le credenziali dell'utente per connettersi al computer remoto e assegna le credenziali all'oggetto $cred.

    Il cmdlet Invoke-WsmanAction crea il processo di trasferimento BITS in Client1 creando un'istanza della classe BitsClientJob e usando le informazioni nella tabella hash definita nel parametro Valueset . Il parametro Valueset specifica le informazioni necessarie per popolare i parametri del metodo CreateJob . Nell'esempio precedente, l'utente imposta il parametro Type su 0 (download). L'utente specifica anche il nome dei file remoti e locali per il processo di download. Per altre informazioni sulla creazione di processi di trasferimento BITS e per informazioni dettagliate sui parametri, vedere Metodo CreateJob .

    Il cmdlet Invoke-WsmanAction assegna il risultato alla variabile $result.

    Nota

    Il carattere accentato grave (') viene utilizzato per indicare un'interruzione di riga.

     

  2. Impostare priorità del processo di trasferimento BITS.

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

    Il cmdlet Set-WsmanInstance modifica la priorità del nuovo processo di trasferimento BITS su 0 (BG_JOB_PRIORITY_FOREGROUND). Per altre informazioni sui livelli di priorità, vedere l'enumerazione BG_JOB_PRIORITY .

  3. Riprendere il processo di trasferimento BITS.

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

    Il cmdlet Invoke-WsmanAction chiama il metodo SetJobState , che imposta lo stato del processo su 2 (Resume the Job).

  4. Gestire il processo di trasferimento 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
    }
    

    L'esempio precedente è uno script per eseguire il polling dello stato del processo ed eseguire un'azione in base allo stato. Sono possibili le azioni seguenti:

    Per altre informazioni sugli stati del processo, vedere l'enumerazione BG_JOB_STATE .

Get-Credential

Invoke-WsmanAction

Set-WsmanInstance