Condividi tramite


Uso di Windows PowerShell per creare processi di trasferimento di BITS

È possibile usare i cmdlet di PowerShell per creare processi di trasferimento bitS (Background Intelligent Transfer Service) sincroni e asincroni.

Tutti gli esempi in questo argomento usano il cmdlet Start-BitsTransfer . Per usare il cmdlet, assicurarsi di importare prima il modulo. Per installare il modulo, eseguire il comando seguente: Import-Module BitsTransfer. Per altre informazioni, digitare Get-Help Start-BitsTransfer al prompt di PowerShell.

Importante

Quando si usano i cmdlet *-BitsTransfer dall'interno di un processo eseguito in un contesto non interattivo, ad esempio un servizio Windows, potrebbe non essere possibile aggiungere file ai processi BITS, che possono comportare una sospensione. Affinché il processo proceda, è necessario eseguire l'accesso all'identità usata per creare un processo di trasferimento. Ad esempio, quando si crea un processo BITS in uno script di PowerShell eseguito come processo dell'utilità di pianificazione, il trasferimento BITS non verrà mai completato a meno che l'impostazione dell'attività dell'Utilità di pianificazione "Esegui solo quando l'utente è connesso" è abilitata.

 

Per creare un processo di trasferimento BITS sincrono

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

Nota

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

 

Nell'esempio precedente i nomi locali e remoti del file vengono specificati rispettivamente nei parametri Source e Destination . Il prompt dei comandi viene nuovamente visualizzato quando il trasferimento del file viene completato o entra in stato di errore.

Il tipo di trasferimento predefinito è Download. Quando si caricano file in un percorso HTTP, il parametro TransferType deve essere impostato su Upload.

Poiché la posizione del parametro viene applicata per il cmdlet Start-BitsTransfer , non è necessario specificare i nomi dei parametri per i parametri Source e Destination. Di conseguenza, questo comando può essere semplificato come indicato di seguito.

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

Per creare un processo di trasferimento BITS sincrono con più file

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

Nell'esempio precedente il comando Start-BitsTransfer crea un nuovo processo di trasferimento BITS. Tutti i file vengono aggiunti a questo processo e trasferiti in sequenza al client.

Nota

Nel percorso di destinazione non è possibile utilizzare caratteri jolly. Il percorso di destinazione supporta directory relative, percorsi radice o directory implicite, ovvero la directory corrente. Impossibile rinominare i file di destinazione utilizzando un carattere jolly. Inoltre, gli URL HTTP e HTTPS non funzionano con i caratteri jolly. I caratteri jolly sono validi solo per i percorsi UNC e le directory locali.

 

Per creare un processo di trasferimento BITS sincrono e specificare le credenziali per un server remoto

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)

Nell'esempio precedente un utente crea un processo di trasferimento BITS per scaricare un file da un server che richiede l'autenticazione. All'utente vengono richieste le credenziali e il parametro Credential passa un oggetto credenziale al cmdlet Start-BitsTransfer . L'utente imposta un proxy esplicito e il processo di trasferimento BITS usa solo i proxy definiti dal parametro ProxyList . Il parametro DisplayName fornisce al processo di trasferimento BITS un nome visualizzato univoco.

Per creare un processo di trasferimento BITS sincrono da un file CSV

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

Nota

Il carattere "|" è il carattere pipe.

 

Nell'esempio precedente un utente crea un processo di trasferimento BITS che carica più file da un client. Il cmdlet Import-CSV importa i percorsi dei file di origine e di destinazione e li invia tramite pipe al comando Start-BitsTransfer . Il comando Start-BitsTransfer crea un nuovo processo di trasferimento BITS per ogni file, aggiunge i file al processo e li trasferisce in sequenza al server.

Il contenuto del file Filelist.txt deve essere nel formato seguente:

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

Per creare un processo di trasferimento BITS asincrono

$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.
}

Nell'esempio precedente il processo di trasferimento BITS è stato assegnato alla variabile $Job. I file vengono scaricati in sequenza. Al termine del processo di trasferimento, i file sono immediatamente disponibili. Se $Job.JobState restituisce "Trasferito", l'oggetto $Job viene inviato al cmdlet Complete-BitsTransfer .

Se $Job.JobState restituisce "Error", l'oggetto $Job viene inviato al cmdlet Format-List per elencare gli errori.

Per gestire le sessioni remote di PowerShell

A partire da Windows 10, versione 1607, è possibile eseguire i cmdlet di PowerShell, BITS Amministrazione o altre applicazioni che usano le interfacce BITS da una riga di comando remota di PowerShell connessa a un altro computer (fisico o virtuale). Questa funzionalità non è disponibile quando si usa una riga di comando di PowerShell Direct per una macchina virtuale nello stesso computer fisico e non è disponibile quando si usano i cmdlet WinRM.

Un processo BITS creato da una sessione di PowerShell remota viene eseguito nel contesto dell'account utente di tale sessione e procederà solo quando è presente almeno una sessione di accesso locale attiva o una sessione remota di PowerShell associata a tale account utente. È possibile usare le sessioni PSSession persistenti di PowerShell per eseguire comandi remoti senza la necessità di mantenere aperta una finestra di PowerShell per ogni processo per continuare a progredire, come descritto in Amministrazione ister remote computers by using Windows PowerShell ( Windows PowerShell).

  • New-PSSession crea una sessione remota persistente di PowerShell. Una volta creati, gli oggetti PSSession vengono mantenuti nel computer remoto fino a quando non vengono eliminati in modo esplicito. Tutti i processi BITS avviati in una sessione attiva eseguiranno il trasferimento dei dati, anche dopo che il client è disconnesso dalla sessione.
  • Disconnect-PSSession disconnette il computer client da una sessione di PowerShell remota e lo stato della sessione continua a essere gestito dal computer remoto. Soprattutto, i processi della sessione remota continueranno a essere eseguiti e i processi BITS continueranno a progredire. Il computer client può anche riavviare e/o disattivare dopo aver chiamato Disconnect-PSSession.
  • Connessione-PSSession riconnete il computer client a una sessione di PowerShell remota attiva.
  • Remove-PSSession rimuove una sessione di PowerShell remota.

L'esempio seguente illustra come usare PowerShell Remote per lavorare con processi di trasferimento BITS asincroni in modo da consentire al processo di continuare a progredire anche quando non si è connessi attivamente alla sessione remota.

# 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