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ê pode pensar é
na área de transferência do Windows. Provavelmente todos nós conhecemos os infames atalhos de teclado Ctrl-C e Ctrl-V para copiar e colar da área de transferência, mas isso é feito normalmente via GUI. Em nossos scripts PowerShell, isso não é muito útil. No entanto, você sabia que existe uma função PowerShell para copiar para a área de transferência?

Neste artigo, vou mostrar como costumávamos obter a funcionalidade de copiar e colar no PowerShell e, em seguida, apresentarei os cmdlets que o PowerShell oferece 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.

Antigo clip.exe

Este aplicativo existe há muito tempo e simplesmente funcionava. Ao canalizar texto para o clip.exe, você podia copiar texto para a área de transferência. Isso funcionava, mas sempre era 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

Não só isso, mas não tínhamos uma maneira fácil de extrair informações da área de transferência. Fomos forçados a colar manualmente o conteúdo uma vez que estavam na área de transferência. Com os comandos nativos da área de transferência, isso não existe mais!

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

Comando Set-Clipboard do Powershell

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

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

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

Outra característica útil do Set-Clipboard é o parâmetro Append. Tradicionalmente, a área de transferência só foi capaz de 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 se você não usar Set-Clipboard para copiar conteúdo para a área de transferência, ainda poderá 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 deseja obter essa lista em seu console do PowerShell, basta usar o parâmetro Format e o valor FileDropList em 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 cmdlets do Windows PowerShell dentro do PowerShell Core.

Depois de instalar o módulo WindowsCompatibility, execute Invoke-WinCommand e envolva suas referências de 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 tornada possível 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 inteligentemente a partir dela também.

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

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

Isso fornecerá todos os diversos parâmetros que você pode experimentar.

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