Come utilizzare il modulo BITS per trasferire file utilizzando PowerShell

Contenuti

Logo Powershell

Una caratteristica meno conosciuta di Windows è il servizio di trasferimento intelligente in background (BIT). Questo è un servizio, principalmente per programmatori e amministratori di sistema, che funziona per trasferire file da e verso server HTTP e SMB.

Queste sono alcune delle funzioni incredibilmente utili di questo servizio:

  • Gestire le interruzioni di rete
  • Metti in pausa e riprendi, anche da un riavvio
  • Considera il costo della rete

In questo post, Esploriamo come utilizzare BITS in PowerShell per eseguire e controllare le operazioni di trasferimento di file.

Introduzione a BITS

il Cmdlet BITS sono effettivamente integrati come comandi PowerShell predefiniti. Possiamo vedere quali sono questi comandi eseguendo Get-Command | Where-Object Source -EQ 'BitsTransfer'.

Anche se PowerShell 7 è multipiattaforma, si basa su un servizio Windows specifico, quindi questa funzionalità non sarà disponibile in altri sistemi operativi.

Inizia trasferimento bit

Per creare un nuovo lavoro di trasferimento BITS, a cui in seguito puoi aggiungere o eliminare file, usa el Start-BitsTransfer cmdlet. Per trasferire semplicemente file tra due posizioni, puoi impostare una sorgente e una destinazione come mostrato di seguito.

$Params = @{
	"Source"      = 'Server01C$TestFile.txt'
	"Destination" = 'Server02C$TestFile.txt'
}

Start-BitsTransfer @Params

Per sfruttare gli altri cmdlet BITS, è meglio dare il lavoro di trasferimento BITS a DisplayName a cui si potrà poi fare riferimento in seguito. Usando lo stesso @Params dichiarazione, possiamo aggiungere un nome visualizzato, in questa circostanza TestTransfer.

Start-BitsTransfer @Params -DisplayName 'TestTransfer'

Per impostazione predefinita, il trasferimento BITS sarà eseguito a Foreground priorità, che implica la massima velocità di trasferimento disponibile. Questo può essere facilmente modificato utilizzando una delle priorità disponibili elencate di seguito.

  • Primo piano (predeterminato): i trasferimenti funzionano con la massima priorità e competono per le risorse di rete con altre applicazioni.
  • Alto: Trasferimento con priorità più alta del normale, ma dipende ancora dall'utilizzo della larghezza di banda inattiva della rete del computer client.
  • Normale: Uguale a priorità alta ma con priorità inferiore.
  • Basso: Uguale alla priorità normale ma con la priorità più bassa possibile. Start-BitsTransfer @Params -DisplayName ‘TestTransfer’ -Priorità "Normale"’

Come accennato all'inizio, BITS ha la capacità unica di prestare attenzione al costo della rete. Per fare questo, noi usiamo il TransferPolicy parametro.

$Params = @{
	"Source"         = 'Server01C$TestFile.txt'
	"Destination"    = 'Server02C$TestFile.txt'
	"DisplayName"    = 'TestTransfer'
	"Priority"       = 'Normal'
	"TransferPolicy" = 'Capped'
}

Start-BitsTransfer @Params

In questo esempio, Capped implica che esiste un limite superiore per il traffico di rete e rispettare tale limite.

Finire, per avviare questo lavoro in background e restituire la nostra console per l'uso, passando il Asynchronous Il parametro ci permette di mettere il lavoro in secondo piano.

Start-BitsTransfer @Params -Asynchronous

Get-BitTransfer

E se volessimo controllare tutti i lavori BITS in esecuzione?? Get-BitsTransfer cmdlet.

Dato che abbiamo chiamato il nostro trasferimento con TestTransfer prima, è facile da trovare. Di fretta Get-BitsTransfer da solo mostrerà un elenco di tutti i lavori in esecuzione.

Aggiungi-BitFile

Ora che abbiamo il nostro trasferimento indietro, possiamo aggiungere file aggiuntivi a questo trasferimento semplicemente chiamando Add-BitsFile.

$Job = Get-BitsTransfer -Name 'TestTransfer'

$Params = @{
	"Source"      = 'Server01C$TestFile2.txt'
	"Destination" = 'Server02C$TestFile2.txt'
}

$Job | Add-BitsFile @Params

Sospendi-Trasferimento bit

Con tutti questi file in trasferimento, a volte è necessario mettere in pausa un trasferimento. Questo può accadere per molte ragioni. Spesso, è dovuto a una rete congestionata o un sistema deve essere riavviato nel mezzo di un trasferimento. Questo è semplice con BITS, usando il Suspend-BitsTransfer funzionalità.

$Job | Suspend-BitsTransfer

Riprendi trasferimento bit

Naturalmente, prima o poi dovremo ricominciare a lavorare, e di nuovo è semplice come passare il lavoro a Resume-BitsTransfer.

$Job | Resume-BitsTransfer

Trasferimento bit

Se un lavoro è ancora attivo, è possibile aggiornare il lavoro con una nuova configurazione utilizzando il pulsante Set-BitsTransfer cmdlet. Nel seguente esempio, stiamo configurando il lavoro con la massima priorità di rete possibile. Inizialmente abbiamo configurato il lavoro per Normal, ma prima dobbiamo fare il lavoro, quindi usiamo Foreground.

$Job | Set-BitsTransfer -Priority 'Foreground'

Trasferimento bit completo

Potremmo aver sospeso un lavoro e siamo pronti per finalizzare la consegna. Usando il Complete-BitsTransfer cmdlet, possiamo dire a BITS di completare tutti i lavori di trasferimento attivi.

Get-BitsTransfer | Complete-BitsTransfer

Trasferimento bit

Finire, se abbiamo solo bisogno di eliminare un lavoro, correre o no, possiamo usare il Remove-BitsTransfer cmdlet.

Get-BitsTransfer -Name "JobToBeRemoved" | Remove-BitsTransfer -Confirm:$False

Usando -Confirm:$False, significa che i lavori verranno cancellati senza una richiesta di conferma.

Funzionalità BITS aggiuntive

Gli esempi mostrati nei processi di cui sopra si sono concentrati sul download di un file da un server a un altro. BITS ha anche la possibilità di caricare un file, anche con autenticazione.

$Params = @{
	"Source"       = 'Server01C$TestFile.txt'
	"Destination"  = '<http://server02/uploaddir/testfile.txt>'
	"TransferType" = 'Upload'
}

Start-BitsTransfer @Params

È essenziale prestare attenzione al fatto che il comportamento predefinito di BITS è scaricare automaticamente più file. Questo non è lo stesso comportamento con il caricamento e, per evitare questa limitazione, può reindirizzare più file a Start-BitsTransfer cmdlet.

Se il server di destinazione è protetto da autenticazione, puoi specificare il tipo, Che cosa Basic, Digest, NTLM, Negotiate, oh Passport usando il Authentication parametro. Certo, quando si utilizza l'autenticazione, dovrai passare una credenziale che può essere facilmente eseguita con il Credential parametro. Questo ha bisogno di standard PSCredential oggetti e funziona bene per mantenere i tuoi segreti al sicuro e crittografati all'interno dei tuoi script.

conclusione

BITS è un ottimo modo per controllare il trasferimento di file tra server e tra server web.. Con la possibilità di sospendere e riprendere, facile controllare il trasferimento di file sui collegamenti di rete, compresi quelli che devono essere moderati a causa di potenziali costi.

Anche se funziona solo su Windows, BITS è un potente strumento da integrare nei tuoi script e controllare con precisione i trasferimenti di file, anche tra i riavvii. Sostituendo potenzialmente le tradizionali utilità di Windows come Robocopy, BITS aderisce alla metodologia PowerShell e, con la possibilità di eseguire trasferimenti in background come lavori, si integra perfettamente nell'automazione e negli script esistenti.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.