Använda Windows PowerShell för att skapa BITS-överföringsjobb

Du kan använda PowerShell-cmdletar för att skapa synkrona och asynkrona BITS-överföringsjobb (Background Intelligent Transfer Service).

Alla exempel i det här avsnittet använder cmdleten Start-BitsTransfer. Om du vill använda cmdleten måste du importera modulen först. Installera modulen genom att köra följande kommando: Import-Module BitsTransfer. Om du vill ha mer information skriver du Get-Help Start-BitsTransfer i PowerShell-prompten.

Viktig

När du använder *-BitsTransfer-cmdletar inifrån en process som körs i en icke-interaktiv kontext, till exempel en Windows-tjänst, kanske du inte kan lägga till filer i BITS-jobb, vilket kan leda till ett suspenderat tillstånd. För att jobbet ska kunna fortsätta måste identiteten som användes för att skapa ett överföringsjobb loggas in. När du till exempel skapar ett BITS-jobb i ett PowerShell-skript som kördes som ett schemaläggarjobb slutförs BITS-överföringen aldrig om inte aktivitetsschemaläggarens aktivitetsinställning "Kör endast när användaren är inloggad" är aktiverad.

 

Skapa ett synkront BITS-överföringsjobb

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

Anteckning

Gravaccentertecknet (') används för att indikera en radbrytning.

 

I föregående exempel anges de lokala namnen och fjärrnamnen för filen i parametrarna Source respektive Destination. Kommandotolken returnerar när filöverföringen är klar eller när den anger ett feltillstånd.

Standardöverföringstypen är Ladda ned. När du laddar upp filer till en HTTP-plats måste parametern TransferType anges till Ladda upp.

Eftersom parameterpositionen tillämpas för cmdleten Start-BitsTransfer behöver parameternamnen inte anges för parametrarna Källa och Mål. Därför kan det här kommandot förenklas på följande sätt.

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

Skapa ett synkront BITS-överföringsjobb med flera filer

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

I föregående exempel skapar kommandot Start-BitsTransfer ett nytt BITS-överföringsjobb. Alla filer läggs till i det här jobbet och överförs sekventiellt till klienten.

Notera

Målsökväg kan inte använda jokertecken. Målsökvägen stöder relativa kataloger, rotsökvägar eller implicita kataloger (dvs. den aktuella katalogen). Destinationsfiler kan inte byta namn genom att använda jokertecken. Dessutom fungerar inte HTTP- och HTTPS-URL:er med jokertecken. Jokertecken är endast giltiga för UNC-sökvägar och lokala kataloger.

 

Skapa ett synkront BITS-överföringsjobb och ange autentiseringsuppgifter för en fjärrserver

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)

I föregående exempel skapar en användare ett BITS-överföringsjobb för att ladda ned en fil från en server som kräver autentisering. Användaren uppmanas att ange autentiseringsuppgifter, och parametern Credential skickar ett autentiseringsobjekt till cmdleten Start-BitsTransfer. Användaren anger en explicit proxy och BITS-överföringsjobbet använder endast de proxyservrar som definieras av parametern ProxyList. Parametern DisplayName ger BITS-överföringsjobbet ett unikt visningsnamn.

Så här skapar du ett synkront BITS-överföringsjobb från en CSV-fil

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

Not

Tecknet "|" är pipe-tecknet.

 

I föregående exempel skapar en användare ett BITS-överföringsjobb som laddar upp flera filer från en klient. Cmdleten Import-CSV importerar käll- och målfilplatserna och dirigerar dem till kommandot Start-BitsTransfer. Kommandot Start-BitsTransfer skapar ett nytt BITS-överföringsjobb för varje fil, lägger till filerna i jobbet och överför dem sedan sekventiellt till servern.

Innehållet i Filelist.txt-filen ska vara i följande format:

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

Skapa ett asynkront BITS-överföringsjobb

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

I föregående exempel tilldelades BITS-överföringsjobbet till variabeln $Job. Filerna laddas ned sekventiellt. När överföringsjobbet är klart är filerna omedelbart tillgängliga. Om $Job.JobState returnerar "Överförd" skickas $Job-objektet till cmdleten Complete-BitsTransfer.

Om $Job.JobState returnerar "Error" skickas $Job-objektet till cmdleten Format-List för att visa felen.

Hantera PowerShell-fjärrsessioner

Från och med Windows 10 version 1607 kan du köra PowerShell-cmdletar, BITSAdmin eller andra program som använder BITS -gränssnitt från en PowerShell Remote-kommandorad som är ansluten till en annan dator (fysisk eller virtuell). Den här funktionen är inte tillgänglig när du använder en PowerShell Direct-kommandorad till en virtuell dator på samma fysiska dator, och den är inte tillgänglig när du använder WinRM-cmdlets.

Ett BITS-jobb som skapats från en PowerShell-fjärrsession körs under sessionens användarkontokontext och kommer endast att göra framsteg när det finns minst en aktiv lokal inloggningssession eller fjärr-PowerShell-session som är associerad med användarkontot. Du kan använda PowerShells beständiga PSSessioner för att köra fjärrkommandon utan att behöva ha ett PowerShell-fönster öppet för varje jobb för att fortsätta att göra framsteg, enligt beskrivningen i Administrera fjärrdatorer med hjälp av Windows PowerShell.

  • New-PSSession skapar en beständig Fjärr-PowerShell-session. När PSSession-objekten har skapats finns de kvar på fjärrdatorn tills de uttryckligen tas bort. Alla BITS-jobb som initieras i en aktiv session fortsätter att överföra data, även efter att klienten har kopplats bort från sessionen.
  • Disconnect-PSSession kopplar från klientdatorn från en PowerShell-fjärrsession och sessionens tillstånd fortsätter att underhållas av fjärrdatorn. Det viktigaste av allt är att fjärrsessionens processer fortsätter att köras och att BITS-jobben fortsätter att göra framsteg. Klientdatorn kan till och med starta om och/eller stänga av efter att ha anropat Disconnect-PSSession.
  • Connect-PSSession återansluter klientdatorn till en aktiv PowerShell-fjärrsession.
  • Remove-PSSession avslutar en PowerShell-fjärrsession.

Exemplet nedan visar hur du använder PowerShell Remote för att arbeta med asynkrona BITS-överföringsjobb på ett sätt som gör att jobbet kan fortsätta att göra framsteg även när du inte är aktivt ansluten till fjärrsessionen.

# 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