PowerShell Copiar para a Área de Transferência: Além do Ctrl+C e Ctrl+V

Ao escrever código em PowerShell, a última coisa em que você provavelmente pensa é a área de transferência do Windows. Todos nós provavelmente conhecemos os infames atalhos de teclado Ctrl-C e Ctrl-V para copiar e colar da área de transferência, mas isso é tipicamente feito através da interface gráfica. Em nossos scripts do PowerShell, isso não é muito útil. No entanto, você sabia que existe uma função de cópia para a área de transferência no PowerShell?

Neste artigo, vou explicar como costumávamos obter funcionalidade de cópia e colagem no PowerShell e, em seguida, apresentar os cmdlets que o PowerShell fornece a partir da versão 5.

Antes do PowerShell v5, a única maneira de copiar para a área de transferência era usando o aplicativo clip.exe.

Clip.exe da velha guarda

Esse aplicativo existe há muito tempo e simplesmente funciona. Ao redirecionar o texto para o clip.exe, você poderia copiar o texto para a área de transferência. Isso funcionava, mas era sempre irritante quando ele adicionava uma quebra de linha após cada entrada.

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

Além disso, não tínhamos uma maneira fácil de extrair informações da área de transferência. Éramos obrigados a colar manualmente o conteúdo depois que ele estava na área de transferência. Com os comandos nativos da área de transferência, isso não é mais um problema!

Agora temos dois cmdlets que resolvem esse problema de maneira muito melhor: Get-Clipboard e Set-Clipboard.

Comando Powershell Set-Clipboard

Set-Clipboard substitui o clip.exe, mas se comporta exatamente da mesma maneira. Agora, em vez de encaminhar a saída para clip, você pode usar Set-Clipboard. Se fizer isso, você notará que o retorno de carro final desapareceu quando colar o conteúdo em algum lugar.

A área de transferência agora contém apenas a string Hello.

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

Outro recurso útil com Set-Clipboard é o parâmetro Append. Tradicionalmente, a área de transferência só podia armazenar um item. Agora, usando o parâmetro Append com Set-Clipboard, você pode adicionar um número ilimitado de itens sem remover os anteriores.

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

Parâmetros do Get-Clipboard

Mesmo que você não use Set-Clipboard para copiar conteúdos para a área de transferência, ainda pode usar Get-Clipboard para entender alguns tipos diferentes além de simples strings. Por exemplo, se você copiou uma lista de arquivos do Explorador de Arquivos e gostaria de obter essa lista no console do PowerShell, basta usar o parâmetro Format e o valor �FileDropList no 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

Você pode ver que ele entende o tipo de dados na área de transferência como uma lista de arquivos. Além disso, você pode fazer o mesmo com imagens e outras entidades.

Copie uma imagem de outra aplicação e use o comando -Format Image para Get-Clipboard para recuperar várias propriedades sobre a imagem.

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        : {}

Manipulação da Área de Transferência no PowerShell Core

Infelizmente, os comandos Get-Clipboard e Set-Clipboard não estão disponíveis no PowerShell Core (v6+), mas você ainda pode usá-los usando o módulo WindowsCompatibility. O módulo WindowsCompatibility permite que você use os cmdlets do Windows PowerShell dentro do PowerShell Core.

Depois de instalar o módulo WindowsCompatibility, execute Invoke-WinCommand e envolva suas referências Get-Clipboard e Set-Clipboard dentro dele.

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

Você verá que pode ler e escrever na área de transferência da mesma forma que faria com o Windows PowerShell.

Resumo

Você pode fazer muito mais com a área de transferência no PowerShell hoje em dia. A cópia para a área de transferência do PowerShell foi possibilitada usando os cmdlets Get-Clipboard e Set-Clipboard. Esses cmdlets permitem que você use o PowerShell para copiar para a área de transferência e colar de forma inteligente também.

Para uma análise completa dos cmdlets, confira a ajuda detalhada:

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

Isso lhe dará todos os vários parâmetros que você pode experimentar.

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