PowerShell Copiar al Portapapeles: Más Allá de Ctrl+C y Ctrl+V

Cuando se escribe código en PowerShell, lo último en lo que se piensa es en el portapapeles de Windows. Probablemente todos conozcamos los famosos atajos de teclado Ctrl-C y Ctrl-V para copiar y pegar desde el portapapeles, pero esto se hace típicamente a través de la interfaz gráfica de usuario. En nuestros scripts de PowerShell, esto no es muy útil. Sin embargo, ¿sabías que existe una función en PowerShell para copiar al portapapeles?

En este artículo, voy a explicar cómo solíamos obtener la funcionalidad de copiar y pegar en PowerShell y luego te presentaré los cmdlets que PowerShell proporciona a partir de la versión 5.

Antes de PowerShell v5, la única forma de copiar al portapapeles era mediante el uso de la aplicación clip.exe.

El viejo clip.exe

Esta aplicación ha estado presente durante mucho tiempo y simplemente funcionaba. Al enviar texto a clip.exe, se podía copiar texto en el portapapeles. Esto funcionaba, pero siempre era molesto cuando agregaba un salto de línea después de cada entrada.

PS51> Write-Output 'Hello' | clip
The PowerShell copy to clipboard function can replace the old school clip.exe

No solo eso, sino que no teníamos una forma fácil de extraer información del portapapeles. Nos veíamos obligados a pegar manualmente el contenido una vez que estaba en el portapapeles. ¡Con los comandos nativos del portapapeles, eso ya no es necesario!

Ahora tenemos dos cmdlets que resuelven este problema mucho mejor: Get-Clipboard y Set-Clipboard.

Comando Set-Clipboard en PowerShell.

Set-Clipboard reemplaza clip.exe pero se comporta exactamente igual. Ahora, en lugar de enviar la salida a clip, puedes usar Set-Clipboard. Si haces esto, notarás que el retorno de carro al final ha desaparecido cuando pegas el contenido en algún lugar.

El portapapeles ahora solo contiene la cadena Hello.

PS> Write-Output 'Hello' | Set-Clipboard

Otra característica útil de Set-Clipboard es el parámetro Append. Tradicionalmente, el portapapeles solo ha podido almacenar un elemento. Ahora, mediante el uso del parámetro Append con Set-Clipboard, puedes agregar un número ilimitado de elementos sin eliminar los anteriores.

PS> Write-Output 'Hello' | Set-Clipboard -Append

Parámetros de Get-Clipboard

Incluso si no usas Set-Clipboard para copiar contenidos al portapapeles, aún puedes usar Get-Clipboard para comprender algunos tipos diferentes además de cadenas simples. Por ejemplo, si has copiado una lista de archivos desde Explorador de archivos y deseas obtener esta lista en tu consola de PowerShell, simplemente usa el parámetro Format y el valor �FileDropList en Get-Clipboard.

PS51> Get-Clipboard -Format FileDropList

Directory: \\Mac\Home\Downloads


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------         8/1/2019  10:42 AM       17919094 00_03_xr30_whatyoushouldhave.mov


    Directory: \\Mac\Home\Documents\Snagit\Autosaved Captures.localized


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
------         8/1/2019   1:58 PM      169144472 2019-08-01_13-47-55.mp4

Puedes ver que comprende que el tipo de datos en el portapapeles es una lista de archivos. Además, puedes hacer lo mismo con imágenes y otras entidades.

Copia una imagen desde otra aplicación y utiliza -Format Image para Get-Clipboard y así obtener varias propiedades sobre la imagen.

PS51> Get-Clipboard -Format Image


Tag                  :
PhysicalDimension    : {Width=813, Height=113}
Size                 : {Width=813, Height=113}
Width                : 813
Height               : 113
HorizontalResolution : 96
VerticalResolution   : 96
Flags                : 335888
RawFormat            : [ImageFormat: b96b3caa-0728-11d3-9d7b-0000f81ef32e]
PixelFormat          : Format32bppRgb
Palette              : System.Drawing.Imaging.ColorPalette
FrameDimensionsList  : {7462dc86-6180-4c7e-8e3f-ee7333a7a483}
PropertyIdList       : {}
PropertyItems        : {}

Manipulación del Portapapeles en PowerShell Core

Desafortunadamente, los comandos Get-Clipboard y Set-Clipboard no están disponibles en PowerShell Core (v6+), pero aún puedes utilizarlos con el módulo WindowsCompatibility. Este módulo te permite usar los cmdlets de Windows PowerShell dentro de PowerShell Core.

Una vez que tengas instalado el módulo WindowsCompatibility, ejecuta Invoke-WinCommand y envuelve tus referencias a Get-Clipboard y Set-Clipboard dentro de él.

PS622> Invoke-WinCommand -ScriptBlock {'This is on the clipboard' | Set-ClipBoard}
PS622> Invoke-WinCommand -ScriptBlock {Get-ClipBoard}
This is on the clipboard

Descubrirás que puedes leer y escribir en el portapapeles como lo harías con Windows PowerShell.

Resumen

Puedes hacer mucho más con el portapapeles en PowerShell hoy en día. La copia al portapapeles en PowerShell ha sido posible gracias a Get-Clipboard y Set-Clipboard. Estos cmdlets te permiten usar PowerShell para copiar al portapapeles e inteligentemente pegar desde el portapapeles también.

Para obtener un desglose completo de los cmdlets, consulta la ayuda detallada:

PS51> Get-Help Set-Clipboard -Detailed
PS51> Get-Help Get-Clipboard -Detailed

Esto te proporcionará todos los diversos parámetros que puedes probar.

Source:
https://adamtheautomator.com/powershell-copy-to-clipboard/