PowerShellでクリップボードにコピーする方法:Ctrl+CおよびCtrl+Vを超えて

PowerShellでコードを書く際、最後に考えることは
Windowsのクリップボードでしょう。おそらく私たちは皆、GUIを介してクリップボードからコピーしたり貼り付けたりするためのCtrl-CとCtrl-Vのキーボードショートカットを知っていると思いますが、PowerShellスクリプトではあまり役に立ちません。しかし、PowerShellにはクリップボードへのコピー機能があることを知っていましたか?

この記事では、PowerShellのコピーと貼り付けの機能を取得するための方法を紹介し、バージョン5以降でPowerShellが提供するコマンドレットについて紹介します。

PowerShell v5以前では、クリップボードへのコピーはclip.exeアプリケーションを使用するしかありませんでした。

古いスクールのclip.exe

このアプリケーションは長い間使われており、うまく動作していました。テキストをclip.exeにパイプすることで、テキストをクリップボードにコピーすることができました。これは機能していましたが、各エントリの後に改行が追加されるといつも面倒でした。

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

それだけでなく、クリップボードから情報を取得する簡単な方法がありませんでした。クリップボードに内容がある場合、手動でコンテンツを貼り付ける必要がありました。ネイティブのクリップボードコマンドを使用すると、これはもう必要ありません!

今では、この問題をより良く解決する2つのコマンドレット、Get-ClipboardSet-Clipboardがあります。

Set-Clipboard Powershellコマンド

Set-Clipboardは、clip.exeを置き換えますが、同じように動作します。これにより、出力をclipにパイプする代わりに、Set-Clipboardを使用することができます。これを行うと、コンテンツをどこかに貼り付ける際に、末尾のキャリッジリターンがなくなったことに気付くでしょう。

クリップボードには、現在文字列Helloのみが含まれています。

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

Set-Clipboardのもう1つの便利な機能は、Appendパラメータです。従来、クリップボードには1つのアイテムしか格納できませんでした。しかし、Set-ClipboardAppendパラメータを使用することで、前のアイテムを削除せずに無制限のアイテムを追加することができます。

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

Get-Clipboardパラメータ

Set-Clipboardを使用してコンテンツをクリップボードにコピーしなくても、単純な文字列以外のいくつかの異なるタイプを理解するためにGet-Clipboardを使用することができます。たとえば、ファイルエクスプローラーからファイルのリストをコピーして、このリストをPowerShellコンソールに取得したい場合は、Get-ClipboardFormatパラメータとFileDropListの値を使用します。

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

クリップボードのデータのタイプがファイルのリストであることを理解できるでしょう。また、画像やその他のエンティティでも同じことができます。

他のアプリケーションから画像をコピーし、-Format Image を使用して画像のさまざまなプロパティを取得するために Get-Clipboard を使用します。

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

PowerShell Core でのクリップボード操作

残念ながら、PowerShell Core(v6以上)では Get-ClipboardSet-Clipboard のコマンドは利用できませんが、WindowsCompatibility モジュールを使用することでそれらを利用することができます。WindowsCompatibility モジュールは、PowerShell Core 内で Windows PowerShell のコマンドレットを使用することができるようにします。

WindowsCompatibility モジュールをインストールしたら、Invoke-WinCommand を実行し、Get-ClipboardSet-Clipboard の参照を内部にラップします。

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

これにより、Windows PowerShell と同様にクリップボードの読み取りと書き込みができることがわかります。

概要

最近では、PowerShell でクリップボードをより多く活用することができます。PowerShell のクリップボードへのコピーは、Get-ClipboardSet-Clipboard を使用することで実現されました。これらのコマンドレットを使用すると、PowerShell を使用してクリップボードにコピーしたり、クリップボードからのインテリジェントな貼り付けも行えます。

コマンドレットの詳細なヘルプについては、以下を確認してください:

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

これにより、試すことができるさまざまなパラメータが表示されます。

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