Erstellen von BITS-Übertragungsaufträgen mithilfe von Windows PowerShell

Sie können PowerShell-Cmdlets verwenden, um synchrone und asynchrone BITS-Übertragungsaufträge (Background Intelligent Transfer Service) zu erstellen.

In allen Beispielen in diesem Thema wird das Cmdlet Start-BitsTransfer verwendet. Um das Cmdlet zu verwenden, müssen Sie zuerst das Modul importieren. Führen Sie zum Installieren des Moduls den folgenden Befehl aus: Import-Module BitsTransfer. Weitere Informationen finden Sie unter Get-Help Start-BitsTransfer an der PowerShell-Eingabeaufforderung.

Wichtig

Wenn Sie *-BitsTransfer-Cmdlets in einem Prozess verwenden, der in einem nicht interaktiven Kontext ausgeführt wird, z. B. einem Windows-Dienst, können Sie möglicherweise keine Dateien zu BITS-Aufträgen hinzufügen, was zu einem angehaltenen Zustand führen kann. Damit der Auftrag fortgesetzt werden kann, muss die Identität, die zum Erstellen eines Übertragungsauftrags verwendet wurde, angemeldet sein. Wenn Sie beispielsweise einen BITS-Auftrag in einem PowerShell-Skript erstellen, das als Aufgabenplanerauftrag ausgeführt wurde, wird die BITS-Übertragung nie abgeschlossen, es sei denn, die Aufgabeneinstellung "Nur ausführen, wenn Benutzer angemeldet ist" aktiviert ist.

 

So erstellen Sie einen synchronen BITS-Übertragungsauftrag

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

Hinweis

Das Grave-Accent-Zeichen (') wird verwendet, um einen Zeilenumbruch anzugeben.

 

Im vorherigen Beispiel werden die lokalen Namen und die Remotenamen der Datei im Parameter Quelle bzw . Ziel angegeben. Die Eingabeaufforderung kehrt zurück, nachdem die Dateiübertragung abgeschlossen wurde oder wenn ein Fehler aufgetreten ist.

Der Standardübertragungstyp ist Download. Wenn Sie Dateien an einen HTTP-Speicherort hochladen, muss der TransferType-Parameter auf Upload festgelegt werden.

Da die Parameterposition für das Cmdlet Start-BitsTransfer erzwungen wird, müssen die Parameternamen nicht für die Parameter "Quelle" und "Ziel" angegeben werden. Daher kann dieser Befehl wie folgt vereinfacht werden.

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

So erstellen Sie einen synchronen BITS-Übertragungsauftrag mit mehreren Dateien

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

Im vorherigen Beispiel erstellt der Befehl Start-BitsTransfer einen neuen BITS-Übertragungsauftrag. Alle Dateien werden diesem Auftrag hinzugefügt und sequenziell an den Client übertragen.

Hinweis

Im Zielpfad dürfen keine Platzhalterzeichen verwendet werden. Der Zielpfad unterstützt relative Verzeichnisse, Stammpfade oder implizite Verzeichnisse (das aktuelle Verzeichnis). Zieldateien können nicht mithilfe eines Feldhalterzeichens umbenannt werden. Darüber hinaus funktionieren HTTP- und HTTPS-URLs nicht mit Feldhaltern. Wildcards sind nur für UNC-Pfade und lokale Verzeichnisse gültig.

 

So erstellen Sie einen synchronen BITS-Übertragungsauftrag und geben Anmeldeinformationen für einen Remoteserver an

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)

Im vorherigen Beispiel erstellt ein Benutzer einen BITS-Übertragungsauftrag, um eine Datei von einem Server herunterzuladen, der eine Authentifizierung erfordert. Der Benutzer wird zur Eingabe von Anmeldeinformationen aufgefordert, und der Credential-Parameter übergibt ein Anmeldeinformationsobjekt an das Cmdlet Start-BitsTransfer . Der Benutzer legt einen expliziten Proxy fest, und der BITS-Übertragungsauftrag verwendet nur die Proxys, die durch den ProxyList-Parameter definiert sind. Der DisplayName-Parameter gibt dem BITS-Übertragungsauftrag einen eindeutigen Anzeigenamen.

So erstellen Sie einen synchronen BITS-Übertragungsauftrag aus einer CSV-Datei

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

Hinweis

Das "|" ist das Pipezeichen.

 

Im vorherigen Beispiel erstellt ein Benutzer einen BITS-Übertragungsauftrag, der mehrere Dateien von einem Client hochlädt. Das Cmdlet Import-CSV importiert die Quell- und Zieldateispeicherorte und leitet sie an den Befehl Start-BitsTransfer weiter. Der Start-BitsTransfer-Befehl erstellt einen neuen BITS-Übertragungsauftrag für jede Datei, fügt die Dateien dem Auftrag hinzu und überträgt sie dann sequenziell an den Server.

Der Inhalt der Filelist.txt-Datei sollte das folgende Format aufweisen:

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

So erstellen Sie einen asynchronen BITS-Übertragungsauftrag

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

Im vorherigen Beispiel wurde der BITS-Übertragungsauftrag der variablen $Job zugewiesen. Die Dateien werden sequenziell heruntergeladen. Nach Abschluss des Übertragungsauftrags sind die Dateien sofort verfügbar. Wenn $Job.JobState "Transfer" zurückgibt, wird das $Job-Objekt an das Cmdlet Complete-BitsTransfer gesendet.

Wenn $Job.JobState "Error" zurückgibt, wird das $Job-Objekt an das Cmdlet Format-List gesendet, um die Fehler aufzulisten.

So verwalten Sie PowerShell Remote-Sitzungen

Ab Windows 10 Version 1607 können Sie PowerShell-Cmdlets, BITSAdmin oder andere Anwendungen ausführen, die die BITS-Schnittstellen über eine PowerShell-Remote-Befehlszeile verwenden, die mit einem anderen Computer (physisch oder virtuell) verbunden ist. Diese Funktion ist nicht verfügbar, wenn Sie eine PowerShell Direct-Befehlszeile für einen virtuellen Computer auf demselben physischen Computer verwenden, und sie ist nicht verfügbar, wenn WinRM-Cmdlets verwendet werden.

Ein BITS-Auftrag, der aus einer Remote PowerShell-Sitzung erstellt wurde, wird unter dem Benutzerkontokontext dieser Sitzung ausgeführt und macht nur Dann Fortschritte, wenn mindestens eine aktive lokale Anmeldesitzung oder Remote PowerShell-Sitzung diesem Benutzerkonto zugeordnet ist. Sie können die persistenten PSSessions von PowerShell verwenden, um Remotebefehle auszuführen, ohne dass für jeden Auftrag ein PowerShell-Fenster geöffnet bleiben muss, um den Fortschritt fortzusetzen, wie unter PowerShell-Grundlagen: Remoteverwaltung beschrieben.

  • New-PSSession erstellt eine persistente Remote-PowerShell-Sitzung. Nach der Erstellung bleiben die PSSession-Objekte auf dem Remotecomputer erhalten, bis sie explizit gelöscht werden. Alle BITS-Aufträge, die in einer aktiven Sitzung initiiert werden, führen den Fortschritt der Datenübertragung aus, auch wenn der Client die Verbindung mit der Sitzung getrennt hat.
  • Disconnect-PSSession trennt den Clientcomputer von einer Remote-PowerShell-Sitzung, und der Zustand der Sitzung wird weiterhin vom Remotecomputer verwaltet. Am wichtigsten ist, dass die Prozesse der Remotesitzung weiterhin ausgeführt werden und BITS-Aufträge weiterhin Fortschritte machen. Der Clientcomputer kann sogar neu gestartet und/oder deaktiviert werden, nachdem Disconnect-PSSession aufgerufen wurde.
  • Connect-PSSession stellt eine erneute Verbindung zwischen dem Clientcomputer und einer aktiven Remote-PowerShell-Sitzung her.
  • Remove-PSSession reißt eine Remote-PowerShell-Sitzung ab.

Das folgende Beispiel zeigt, wie Sie PowerShell Remote verwenden, um mit asynchronen BITS-Übertragungsaufträgen zu arbeiten, sodass der Auftrag weiterhin Fortschritte macht, auch wenn Sie nicht aktiv mit der Remotesitzung verbunden sind.

# 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