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.