Compartir a través de


Utilizar Windows PowerShell para crear trabajos de transferencia de BITS

Puede usar cmdlets de PowerShell para crear trabajos de transferencia sincrónicos y asincrónicos del Servicio de transferencia inteligente en segundo plano (BITS).

Todos los ejemplos de este tema usan el cmdlet Start-BitsTransfer . Para usar el cmdlet , asegúrese de importar primero el módulo. Para instalar el módulo, ejecute el siguiente comando: Import-Module BitsTransfer. Para obtener más información, escriba Get-Help Start-BitsTransfer en el símbolo del sistema de PowerShell.

Importante

Cuando se usan cmdlets *-BitsTransfer desde un proceso que se ejecuta en un contexto no inactivo, como un servicio de Windows, es posible que no pueda agregar archivos a trabajos de BITS, lo que puede dar lugar a un estado suspendido. Para que el trabajo continúe, la identidad que se usó para crear un trabajo de transferencia debe iniciar sesión. Por ejemplo, al crear un trabajo de BITS en un script de PowerShell que se ejecutó como un trabajo del Programador de tareas, la transferencia de BITS nunca se completará a menos que la configuración de tarea del Programador de tareas "Ejecutar solo cuando el usuario haya iniciado sesión" esté habilitada.

 

Para crear un trabajo de transferencia de BITS sincrónico

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

Nota

El carácter de énfasis grave (') se utiliza para indicar un salto de línea.

 

En el ejemplo anterior, los nombres locales y remotos del archivo se especifican en los parámetros Source y Destination , respectivamente. El símbolo del sistema vuelve a aparecer cuando la transferencia del archivo se completa o bien entra en un estado de error.

El tipo de transferencia predeterminado es Download. Al cargar archivos en una ubicación HTTP, el parámetro TransferType debe establecerse en Upload.

Dado que la posición del parámetro se aplica para el cmdlet Start-BitsTransfer , no es necesario especificar los nombres de parámetro para los parámetros Source y Destination. Por lo tanto, este comando se puede simplificar de la siguiente manera.

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

Para crear un trabajo de transferencia de BITS sincrónico con varios archivos

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

En el ejemplo anterior, el comando Start-BitsTransfer crea un nuevo trabajo de transferencia de BITS. Todos los archivos se agregan a este trabajo y se transfieren secuencialmente al cliente.

Nota

La ruta de acceso de destino no puede usar caracteres comodín. La ruta de acceso de destino admite directorios relativos, rutas de acceso raíz o directorios implícitos (es decir, el directorio actual). No se puede cambiar el nombre de los archivos de destino mediante un carácter comodín. Además, las direcciones URL HTTP y HTTPS no funcionan con caracteres comodín. Los caracteres comodín solo son válidos para las rutas unc y los directorios locales.

 

Para crear un trabajo de transferencia de BITS sincrónico y especificar las credenciales de un servidor 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)

En el ejemplo anterior, un usuario crea un trabajo de transferencia de BITS para descargar un archivo de un servidor que requiere autenticación. Se solicita al usuario las credenciales y el parámetro Credential pasa un objeto de credencial al cmdlet Start-BitsTransfer . El usuario establece un proxy explícito y el trabajo de transferencia de BITS usa solo los servidores proxy definidos por el parámetro ProxyList . El parámetro DisplayName proporciona al trabajo de transferencia de BITS un nombre para mostrar único.

Para crear un trabajo de transferencia de BITS sincrónico desde un archivo CSV

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

Nota

"|" es el carácter de canalización.

 

En el ejemplo anterior, un usuario crea un trabajo de transferencia de BITS que carga varios archivos desde un cliente. El cmdlet Import-CSV importa las ubicaciones del archivo de origen y de destino y las canaliza al comando Start-BitsTransfer . El comando Start-BitsTransfer crea un nuevo trabajo de transferencia de BITS para cada archivo, agrega los archivos al trabajo y, a continuación, los transfiere secuencialmente al servidor.

El contenido del archivo Filelist.txt debe tener el siguiente formato:

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

Para crear un trabajo de transferencia asincrónica de BITS

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

En el ejemplo anterior, el trabajo de transferencia de BITS se asignó a la variable $Job. Los archivos se descargan secuencialmente. Una vez completado el trabajo de transferencia, los archivos están disponibles inmediatamente. Si $Job.JobState devuelve "Transfered", el objeto $Job se envía al cmdlet Complete-BitsTransfer .

Si $Job.JobState devuelve "Error", el objeto $Job se envía al cmdlet Format-List para enumerar los errores.

Para administrar sesiones remotas de PowerShell

A partir de Windows 10, versión 1607, puede ejecutar cmdlets de PowerShell, BITSAdmin u otras aplicaciones que usen las interfaces de BITS desde una línea de comandos remota de PowerShell conectada a otra máquina (física o virtual). Esta funcionalidad no está disponible cuando se usa una línea de comandos de PowerShell Direct en una máquina virtual en la misma máquina física y no está disponible cuando se usan cmdlets de WinRM.

Un trabajo de BITS creado a partir de una sesión de PowerShell remota se ejecuta en el contexto de la cuenta de usuario de esa sesión y solo avanzará cuando haya al menos una sesión de inicio de sesión local activa o una sesión de PowerShell remota asociada a esa cuenta de usuario. Puede usar pssessions persistentes de PowerShell para ejecutar comandos remotos sin necesidad de mantener abierta una ventana de PowerShell para cada trabajo para seguir progresando, como se describe en Conceptos básicos de PowerShell: Administración remota.

  • New-PSSession crea una sesión de PowerShell remota persistente. Una vez creados, los objetos PSSession persisten en la máquina remota hasta que se eliminan explícitamente. Los trabajos de BITS iniciados en una sesión activa realizarán el progreso de la transferencia de datos, incluso después de que el cliente se haya desconectado de la sesión.
  • Disconnect-PSSession desconecta la máquina cliente de una sesión de PowerShell remota y el estado de la sesión continúa siendo mantenido por el equipo remoto. Lo más importante es que los procesos de la sesión remota seguirán ejecutándose y los trabajos de BITS seguirán progresando. La máquina cliente puede incluso reiniciar o desactivar después de llamar a Disconnect-PSSession.
  • Connect-PSSession vuelve a conectar la máquina cliente a una sesión activa de PowerShell remoto.
  • Remove-PSSession desglosa una sesión de PowerShell remota.

En el ejemplo siguiente se muestra cómo usar PowerShell Remote para trabajar con trabajos de transferencia de BITS asincrónicos de forma que permita que el trabajo continúe progresando incluso cuando no esté conectado activamente a la sesión 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