Cómo copiar un archivo en PowerShell con Copy-Item

Podemos usar PowerShell para copiar un archivo de una ubicación a otra con el cmdlet Copy-Item.

La ubicación puede ser otra carpeta local o una computadora remota.

Además de archivos, también podemos copiar carpetas completas con subcarpetas y contenido. E incluso es posible filtrar los archivos que copiamos.

En este artículo vamos a ver diferentes ejemplos de cómo copiar un archivo con PowerShell.

Copiar un archivo con PowerShell

Comencemos con lo básico cuando se trata de copiar archivos con PowerShell.

Cuando desee copiar un solo archivo, deberá especificar la ruta de origen y la carpeta de destino:

Copy-Item -Path "C:\temp\files\la-ams-ad01-log-1.txt" -Destination "d:\temp\"

# Copy is a shorthand for Copy-Item:
Copy "C:\temp\files\la-ams-ad01-log-1.txt" "d:\temp\"

Tenga en cuenta que deberá terminar el nombre de la carpeta de destino con \; de lo contrario, cambiará el nombre del archivo. Esta es también una de las características útiles de la Copy-Item cmdlet, podemos especificar un nuevo nombre para el archivo en el destino:

# Copy and rename the file:
Copy-Item -Path "C:\temp\files\la-ams-ad01-log-2.txt" -Destination "d:\temp\logfile.txt"

Carpeta de copia de PowerShell

También podemos usar el cmdlet Copy-Item para copiar una carpeta completa en una nueva ubicación.

Pero cuando se trata de copiar carpetas, es importante usar el final correcto en las rutas de origen y destino:

Fuente Destino Resultados
c:\temp d:\temp Crea solo la carpeta temporal
c:\temp\ d:\temp\ Crea solo la carpeta temporal
c:\temp\* d:\temp Cree la carpeta temporal y copie solo los archivos de c:\temp
c:\temp\ d:\temp -Recurso Copia la carpeta, incluidas las subcarpetas y todo el contenido.
Copiar carpetas con PowerShell

En los ejemplos a continuación, usaré la siguiente estructura de carpetas con una subcarpeta como fuente:

C:\TEMP\FILES
│   11022022-app.log
│   11032021-app.log
│   11032022-app.log
│   11102021-app.log
│   15032022-app.log
│   la-ams-ad01-log-1.txt
│   la-ams-ad01-log-2.txt
│   la-ams-ad01-log-3.txt
│   la-ams-ad01-log-4.txt
│   la-ams-file02-log-1.txt
│   la-ams-file02-log-2.txt
│
└───subfolder
        la-osl-ad01-log-1.txt
        la-osl-file01-log-1.txt
        LT3452-process-errors.log
        LT3452-process.log
        readme.txt

Para copiar solo los archivos y las subcarpetas vacías de c:\temp\files necesitaremos usar un comodín para la ruta de origen:

Copy-Item -Path "C:\temp\files\*"  -Destination "d:\temp\"

# Result
D:\TEMP
│   11022022-app.log
│   11032021-app.log
│   11032022-app.log
│   11102021-app.log
│   15032022-app.log
│   la-ams-ad01-log-1.txt
│   la-ams-ad01-log-2.txt
│   la-ams-ad01-log-3.txt
│   la-ams-ad01-log-4.txt
│   la-ams-file02-log-1.txt
│   la-ams-file02-log-2.txt
│
└───subfolder  # Note - Sub folder is empty

Para copiar todo el contenido, incluidas las subcarpetas con PowerShell, deberemos especificar el -recurce parámetro. De esta forma, el contenido de la subcarpeta también se copia en la nueva ubicación:

# Copy all content including subfolder:
Copy-Item -Path "C:\temp\files\*"  -Destination "d:\temp\" -Recurse

# Result
D:\TEMP
│   11022022-app.log
│   11032021-app.log
│   11032022-app.log
│   11102021-app.log
│   15032022-app.log
│   la-ams-ad01-log-1.txt
│   la-ams-ad01-log-2.txt
│   la-ams-ad01-log-3.txt
│   la-ams-ad01-log-4.txt
│   la-ams-file02-log-1.txt
│   la-ams-file02-log-2.txt
│
└───subfolder
        la-osl-ad01-log-1.txt
        la-osl-file01-log-1.txt
        LT3452-process-errors.log
        LT3452-process.log
        readme.txt

Copie y combine varias carpetas a la vez

Algo que probablemente no usará mucho pero que puede ser muy útil es la capacidad de copiar y fusionar varias carpetas a la vez con el Copy-Item cmdlet. Podemos especificar múltiples rutas de origen al cmdlet y un único destino.

De esta forma, el contenido de todas las ubicaciones de origen se copiará en una única ubicación:

 Copy-Item -Path c:\logs-server-A\*,c:\logs-server-b\* -Destination d:\logs
archivo de copia de powershell

Filtrar archivos para copiar

Con el Include y Exclude parámetros podemos filtrar qué archivos copiar o no. El filtro se compara con el nombre completo del archivo (incluida la extensión) y con los nombres de las carpetas en su ruta de origen.

Entonces, para copiar solo archivos con la extensión .log podemos usar el filtro de inclusión así:

# Copy only files with the extension .log
Copy-Item -Path c:\temp\* -Destination d:\temp -Include *.log

# Result
# Note that the .log files from the subfolder are note copied
D:\TEMP
    11022022-app.log
    11032021-app.log
    11032022-app.log
    11102021-app.log
    15032022-app.log

Tenga en cuenta el comodín, que siempre es necesario si desea filtrar una parte del nombre. Es bueno saber que el -Recurse el parámetro no funcionará aquí.

Si tiene subcarpetas con .log archivos en ellos, no se copiarán. El filtro solo se aplica al nivel superior de la ruta.

Uso del filtro de exclusión

Excluir archivos funciona de la misma manera. Podemos especificar una parte del nombre de los archivos y carpetas que no queremos copiar.

Tenga en cuenta que si una subcarpeta no coincide con la cadena de exclusión, también se copiará con todo su contenido.

# Copy everything, except .log files:
Copy-Item -Path c:\temp\files\* -Destination d:\temp\ -Exclude *.log -Recurse

# Result:
D:\TEMP
│   la-ams-ad01-log-1.txt
│   la-ams-ad01-log-2.txt
│   la-ams-ad01-log-3.txt
│   la-ams-ad01-log-4.txt
│   la-ams-file02-log-1.txt
│   la-ams-file02-log-2.txt
│
└───subfolder
        la-osl-ad01-log-1.txt
        la-osl-file01-log-1.txt
        readme.txt

Copie el archivo a la computadora remota con PowerShell

También es posible copiar archivos hacia y desde una computadora remota con PowerShell.

Hay dos formas de hacer esto, puede crear una unidad de red temporal, usando el cmdlet New-PSDrive, o creando primero una nueva sesión de PowerShell en una computadora remota.

Para que esto funcione, deberá tener acceso a la computadora remota o usar las credenciales de la computadora remota para iniciar una PSSession:

$Session = New-PSSession -ComputerName "LazyServer01" -Credential "LazyAdmin\User01"

Con las sesiones creadas y almacenadas en el $session variable, podemos copiar elementos a cualquier ubicación en la computadora remota.

La ruta de destino, en este caso, es la ruta local en la computadora remota, por lo que para copiar archivos a la carpeta temporal en la computadora remota, simplemente puede usar c:\temp como la ruta de destino:

# Copy all files from the local temp folder to the temp folder on the remote computer
Copy-Item -Path c:\temp\local\* -Destination c:\temp\remote\ -ToSession $Session -Recurse

Puede usar el mismo método para copiar archivos desde una computadora remota a su computadora local con PowerShell. En este caso, solo necesitamos usar el -FromSession parámetro en lugar del -ToSession.

$Session = New-PSSession -ComputerName "LazyServer01" -Credential "LazyAdmin\User01"
Copy-Item -Path c:\temp\remote* -Destination c:\temp\local\ -FromSession $Session -Recurse

Terminando

El cmdlet Copy-Item de PowerShell es realmente útil cuando se trata de copiar archivos en su computadora local o remota.

No se puede comparar con el poderoso comando robocopy, pero, sin embargo, sigue siendo un cmdlet útil.

Espero que este artículo te haya ayudado a copiar un archivo o carpeta con PowerShell.

Si tiene alguna pregunta, simplemente deje un comentario a continuación.

Otros artículos relacionados

PowerShell Sleep - Cómo pausar su secuencia de comandos

PowerShell Sleep – Cómo pausar su secuencia de comandos

A veces, deberá pausar su secuencia de comandos de PowerShell durante un par de segundos. Por ejemplo, cuando está utilizando ...
Leer Más
La solución a las Plantillas de Microsoft Planner que faltan

La solución a las Plantillas de Microsoft Planner que faltan

Una de las funciones más solicitadas en el foro de UserVoice para Microsoft Planner es la capacidad de crear plantillas ...
Leer Más
Explicación de Set-ADUser: cómo modificar usuarios de AD con PowerShell

Explicación de Set-ADUser: cómo modificar usuarios de AD con PowerShell

¿Necesita actualizar varios usuarios en su Active Directory? ¿O busca una forma más eficiente de modificar las propiedades de los ...
Leer Más
[PowerShell] Exportar el estado de MFA de los usuarios de Office 365

[PowerShell] Exportar el estado de MFA de los usuarios de Office 365

Uno de los informes que realmente extraño en el Centro de administración de Microsoft 365 es una descripción general clara ...
Leer Más
Cómo copiar un archivo en PowerShell con Copy-Item

Cómo copiar un archivo en PowerShell con Copy-Item

Podemos usar PowerShell para copiar un archivo de una ubicación a otra con el cmdlet Copy-Item. La ubicación puede ser ...
Leer Más
Los 10 principales comandos de PowerShell que debe conocer

Los 10 principales comandos de PowerShell que debe conocer

PowerShell es realmente poderoso y puede hacer que su trabajo diario sea mucho más fácil. Con todos los módulos que ...
Leer Más

Deja un comentario