No tiene que estar vigilando todas las copias de los archivos; las tareas programadas son una manera perfecta para automatizar este trabajo.
Copiar archivos de un lugar a otro es un trabajo trivial, sin importar cómo se haga. Hay varias maneras de hacer este trabajo como: arrastrar y soltar el archivo en Windows Explorer, Copy-Item con PowerShell o simplemente con el comando para copiar en el Sistema Operativo de Disco (DOS por sus siglas en inglés). Solamente hay que especificar la fuente y el camino para el destinatario y ajustar unos cuantos parámetros opcionales. Los problemas surgen cuando se copian muchos archivos frecuentemente.
Al automatizar la copia de archivos, especialmente en un ambiente de Windows, el lenguaje indicado será PowerShell de Windows. Si necesita copiar uno o más archivos rápidamente de una ubicación a otra, PowerShell es una manera muy buena de hacer esto. No solamente es fácil manualmente iniciar los scripts de PowerShell, sino también puede desencadenar transferencias por medio de los scripts de PowerShell al usar las tareas programadas de Windows.
En este artículo, revisaremos cómo realizar transferencias de archivos usando PowerShell escribiendo y creando tareas programadas para iniciar scripts de manera recurrente. Pero antes de que empiece, voy a dar por hecho que por lo menos tiene PowerShell v4 instalado en su computadora. De otra manera, puede que los trucos que le voy a enseñar no funcionen correctamente.
Cree su script
Primero necesitará crear un script para llevar a cabo la transferencia de archivos. Llamémoslo CopyFiles.ps1. Este script contendrá este código:
param(
[string]$SourcePath,
[string]$DestinationPath
)
Copy-Item –Path $SourcePath –Destination $DestinationPath -Recurse
Como lo puede notar, el script es simple, y deja mucho espacio para muchas personalizaciones específicas dependiendo en su ámbito.
La parte más complicada de este script es la sección de param(). Este es un bloque de dos parámetros: SourcePath y DestinationPath. Al crear estos dos valores, los parámetros nos permitirán pasar valores diferentes a nuestro script para poder usarlos. Si SourcePath y DestinationPath son caminos válidos, tendríamos que crear scripts separados para cada copia de cada archivo.
Iniciar el script manualmente se ve algo asi:
& .\CopyFiles.ps1 –SourcePath C:\Source –DestinationPath \\SERVER\Destination
Este ejemplo copiara todos los archivos y subfolders de C:\Source al folder compartido de \\SERVER\Destination.
Cree una tarea programada
Ahora que ya tiene su script de PowerShell CopyFiles.ps1, cámbiese a la computadora en la que desee iniciarlo. En este ejemplo, vamos a crear una tarea programada para que se ejecute una vez al día a las 3 de la mañana.
Podría crear tareas programadas usando el Task Scheduler GUI, pero nuestro objetivo principal es hacerlo automáticamente. Aprendamos cómo crear tareas programadas en PowerShell de una vez. Para hacerlo, necesita completar los cuatro pasos a continuación:
- Crear la acción de la tarea programada.
- Crear el gatillo (trigger).
- Crear la tarea programada en la memoria.
- Crear la tarea programada en la computadora.
Así es cómo se ve en práctica. Primero vamos a crear la acción de la tarea programada. Esto define el archivo ejecutable (EXE) para poder ejecutarlo con cualquier otro argumento. Aquí voy a asumir que su script está ubicado en C:\CopyFiles.ps1.
$Action = New-ScheduledTaskAction -Execute
'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' -Argument "-NonInteractive -NoLogo
-NoProfile -File 'C:\CopyFiles.ps1' –SourcePath 'C:\Source –DestinationPath '\\SERVER\Destination'"
Después, vamos a crear un gatillo para que se active a las tres de la mañana todos los días.
$Trigger = New-ScheduledTaskTrigger -Daily -At '3AM'
Después, vamos a crear la tarea programada en la memoria usando la acción y el gatillo que acabamos de crear.
$Task = New-ScheduledTask -Action $Action -Trigger $Trigger -Settings (New-ScheduledTaskSettingsSet)
Finalmente, vamos a crear la tarea programada en el sistema, y la llamaremos File Transfer Automation y la ejecutaremos en la cuenta del administrador local y la contraseña adecuada.
$Task | Register-ScheduledTask -TaskName 'File Transfer Automation' -User 'administrator' -Password 'supersecret'
Esto debería de registrar el script, y así copiar todos los archivos de la fuente al destino todos los días a las tres de la mañana.
Adam Bertram
Adam Bertram is a 20-year veteran of IT. He’s currently an automation engineer, blogger, independent consultant, freelance writer, author, and trainer. Adam focuses on DevOps, system management, and automation technologies as well as various cloud platforms. He is a Microsoft Cloud and Datacenter Management MVP and efficiency nerd that enjoys teaching others a better way to leverage automation.