<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1678611822423757&amp;ev=PageView&amp;noscript=1">
Defrag This

| Read. Reflect. Reboot.

Cómo Usar El Comándulo (Cmdlet) Copy-Item De PowerShell Para Transferir Archivos A WinRM

Adam Bertram| julio 13 2018

| IT insights

powershell-copy-item-1024x813-1

Es fácil copiar archivos por medio de la línea de comando con el Copy-Item de PowerShell. Una vez que se especifica el origen y el destinatario, simplemente todo ocurre. Desafortunadamente, muchos administradores no piensan cómo funciona este proceso hasta que deja de funcionar. Aunque no piense sobre esto ni un poquito, todas las comunicaciones de red TCP (como copias de archivos SMB) usan puertos de redes para que todos los bits se transfieran. Un puerto necesita estar abierto hasta el nodo de destinatario, para que el proceso de copia de archivo del punto A al punto B pueda suceder. En el caso de copia de archivo SMB, el puerto es 445. Este es un puerto común que normalmente está abierto al inicio, con la excepción de situaciones de alta seguridad o aquellas que pasan una zona desmilitarizada (DMZ).

El Copy-Item de PowerShell

Si se encuentra en un ambiente de alta seguridad o necesita transferir archivos desde una red internacional a una zona desmilitarizada que tenga varias restricciones en los puertos, ¿cómo se puede asegurar de que sus scripts son capaces de copiar archivos a los nodos todo el tiempo? Una opción es usar el comándulo Copy-Item con el nuevo parámetro -ToSession del PowerShell v5.  

Este parámetro fue introducido con el Windows Management Framework (WMF) v5 conjunto con el comándulo Copy-Item. Proporciona una manera de transferir archivos sobre el mismo enlace que podría usar hoy para ejecutar comandos remotamente en computadoras con comándulos como el Invoke-Command.

Este proceso tiene unas cuantas ventajas, pero los beneficios incluidos más grandes son los puertos TCP: 5985 (HTTP) y 5986 (HTTPS). Típicamente, estos puertos están abiertos para administrar nodos remotos, a veces hasta a un ambiente de DMZ. Al utilizar Copy-Item –ToSession, un administrador puede asegurarse de que los archivos están siendo copiados sin importar si el SMB está bloqueado o no.

Cuando está usando el Copy-Item de PowerShell a través del método tradicional de SMB, necesita especificar parámetros de trayectoria (Path) y destinatario (Destination). Si desea copiar un archivo llamado file1.txt dentro de C:\Folder a una computadora remota SERVER1 en su C:\, podría hacer los siguiente:

Copy-Item –Path C:\Folder1\file1.txt –Destination '\\SERVER1\c$'

Es importante notar que usamos la trayectoria UNC \\SERVER1\c$. Esto será importante en un minuto.

Remoting de las sesiones de PowerShell

¿Pero qué tal si por alguna razón el SMB está bloqueado o está usando el Invoke-Command para ejecutar los comandos de SERVER1 de todos modos? Puede aprovecharse del remoting de las sesiones para transferirle el archivo a WinRM en vez de a SMB. Para hacer esto, necesita establecer un nuevo remoting de las sesiones y luego pasarle el archivo a esa sesión.

Primero, necesita crear una nueva sesión de remoting en PowerShell.  Para hacer esto, puede usar el New-PSSession cmdlet y asignarle la sesión a la variable $sesión.

$session = New-PSSession –ComputerName SERVER1

Esto usara la autentificación de Kerberos para establecer una sesión de remoting de PowerShell. Este es el método más comúnmente usado en un ambiente de Directorio Activo.

Después, necesitara especificar el parámetro ToSession y una trayectoria local en la computadora remota para el parámetro Destination.

Copy-Item –Path C:\Folder1\file1.txt –Destination 'C:\' –ToSession $session

Dese cuenta que ahora está usando C:\ para el destinatario en vez de la trayectoria UNC. Este comando lograra lo mismo que el anterior, pero usara la sesión para encapsular el archivo y transferirlo vía WinRM.

Que no se le olvide eliminar la sesión en cuanto termine de usar el Remove-PSSession.

$session | Remove-PSSession

Si no tiene la intención de reutilizar la sesión para otra cosa, puede crear y eliminar la sesión al mismo tiempo.

Copy-Item –Path C:\Folder1\file1.txt –Destination 'C:\' –ToSession (New-PSSession –ComputerName SERVER1)

¡Eso es todo lo que tiene que hacer! A la próxima que se encuentre en un ambiente en el que el remoting de PowerShell esté permitido per el SMB restringido, o esté usando una sesión de remoting para otra cosa, puede pasar la sesión a Copy-Item para mover su archivo del punto A al punto B.

Topics: IT insights

Leave a Reply

Your email address will not be published. Required fields are marked *

THIS POST WAS WRITTEN BY 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.

Free Trials

Getting started has never been easier. Download a trial today.

Download Free Trials

Contact Us

Let us know how we can help you. Focus on what matters. 

Send us a note

Subscribe to our Blog

Let’s stay in touch! Register to receive our blog updates.