PowerShell 7.0.0 Preview 6には、PowerShell Coreとして公開された段階で削除されたコマンドレットのいくつかが復活している。「PowerShell Core」はオープンソース版の.NET実装である「.NET Core 2」を使って開発が行われたのだが、.NET Core 2にはいくつかの機能が欠落していた。この欠落した機能を使って開発されていたコマンドレットは、PowerShell Coreでも実装できなかったので、削除されたというわけである。

しかし、MicrosoftはWindows PowerShellの後継として「PowerShell 7」を採用することを決定したため、PowerShell Coreに移った段階で削除されたコマンドレットの再実装が進められている。Windows PowerShellとの互換性が確保できなければ、後継として利用することはできないからだ。PowerShell 7が基盤として使用している「.NET Core 3」に、.NET Core 2で消失した機能が復帰したのが、こうしたコマンドレット復活の根拠となっている。要するに.NET Core 3で機能が復活したので、PowerShell 7でもコマンドレットの復帰が可能になっていっているという状況だ。

復活したコマンドレットはいくつかあるのだが、今回はクリップボートとデータのやり取りを行う「Get-Clipboard」コマンドレットと「Set-Clipboard」コマンドレットを取り上げる。これらはいずれも、実に便利なコマンドレットだ。

Get-ClipboardとSet-Clipboardコマンドレット

クリップボートとデータのやり取りを行うためのコマンドレットがGet-ClipboardとSet-Clipboardだ。Get-Clipboardは「貼り付け」、Set-Clipboardは「コピー」に相当している。Windows 10なら「Ctrl」+「V」と「Ctrl」+「C」に相当する処理を行うコマンドレットである。

PowerShell 7.0.0 Preview 5でこの機能を使ってみる。

PowerShell 7.0.0 Preview 5

dirの出力をコピー&ペーストしてみよう

次のように、dirの出力結果のコピー&ペーストを試みても、そのようなコマンドレットは存在しないというエラーが表示されるだけで機能しない。

PowerShell 7.0.0 Preview 5にはGet-ClipboardやSet-Clipboardコマンドレットは実装されていない

同じ操作をPowerShell 7.0.0 Preview 6で実行してみる。

PowerShell 7.0.0 Preview 6

次のようにdirの出力をSet-Clipboardコマンドレットに流し込むと、エラーにならずに機能していることがわかる。

PowerShell 7.0.0 Preview 6にはSet-Clipboardコマンドレットが存在している

コピーされたテキストデータはシステムのクリップボードに保存されており、次のようにPowerShell 7以外のアプリケーションで貼り付けることができる。

メモ帳で貼り付けを選択

PowerShell 7.0.0 Preview 6でコピーしたテキストの貼り付けを確認

逆の操作も機能する。まず、次のようにPowerShell 7.0.0 Preview 6以外のアプリケーションでテキストデータをコピーする。ここではWindows 10のメモ帳でテキストデータをコピーしている。

Windows 10のメモ帳でテキストデータをコピー

この状態でPowerShell 7.0.0 Preview 6でGet-Clipboardコマンドレットを実行すると、次のようにメモ帳でコピーしたテキストデータが出力される。システムのクリップボードの内容をPowerShell 7.0.0 Preview 6側から持ってこられていることがわかる。

Get-Clipboardコマンドレットでシステムクリップボードからテキストデータを持ってきている

Get-ClipboardコマンドレットとSet-Clipboardコマンドレットは、WindowsプラットフォームのみならずmacOSやLinuxでも動作するというのが特徴だ。システムクリップボードを経由したテキストデータのやり取りは、PowerShell 7スクリプトを使ってほかのアプリケーションとテキストデータをやり取りする上でかなり便利なので、この機能がmacOSやLinuxでも使えるというのはかなりポイントが高い。

なお、現段階でサポートされているのはテキストデータだけだ。また、Linuxでこの機能を動作させるにはxclipコマンドがインストールされており、かつ、きちんと機能する必要がある。

macOSでクリップボードコマンドレットの動作を確認

macOSでクリップボードコマンドレットの動作を確認してみよう。当然ながら、PowerShell 7.0.0 Preview 5にはGet-ClipboardコマンドレットとSet-Clipboardコマンドレットの実装が存在しないので、次のように実行しようとしてもエラーが表示される。

macOSでのPowerShell 7.0.0 Preview 5

PowerShell 7.0.0 Preview 5にはGet-ClipboardとSet-Clipboardコマンドレットは存在しない

PowerShell 7.0.0 Preview 6で同じことをして見る。次のように、dirの出力結果がSet-Clipboardでコピーされる様子を確認できる。

macOSでのPowerShell 7.0.0 Preview 6

dirの出力結果をSet-Clipboardコマンドレットでコピー

PowerShell 7以外のアプリケーションで貼り付けを実施してみる。次のサンプルはテキストエディタで貼り付けを実施したサンプルだ。PowerShell 7.0.0 Preview 6でSet-Clipboardに渡した内容が貼り付けられたことがわかる。システムのクリップボードを使うことができている。

macOSのテキストエディタで貼り付けを実施

PowerShell 7.0.0 Preview 6でコピーしたテキストデータの貼り付けを確認

次に、テキストエディタでテキストをシステムのクリップボードにコピーし、これをPowerShell 7.0.0 Preview 6側から取得してみる。次のようにシステムクリップボードにコピーされたテキストデータを貼り付けることができていることを確認できる。

macOSのテキストエディタでテキストデータをコピー

PowerShell 7.0.0 Preview 6で貼り付けを確認

システムクリップボードを使ってテキストデータのやり取りを行うことには次のような利点がある。

  • データを共有するために一時ファイルを作成する必要がない
  • Windows 10であれば「Ctrl」+「V」や「Ctrl」+「C」、macOSであれば「⌘」+「V」や「⌘」+「C」といったショートカットキーを利用することができる


例えば、サーバ側からまたはクライアント側からsshで対象ホストに対してテキストデータを送信し、そこでテキストデータをシステムクリップボードにコピーする。GUI側は「Ctrl」+「V」や「⌘」+「V」を使ってデータをアプリケーションやブラウザに貼り付ける、そんな作業が行えるようになる。これまではOSごとにコピー&ペースト専用のコマンドを使う必要があったが、PowerShell 7からはこの機能がデフォルトで使用できることになる。システムクリップボードは、作業効率を上げ、時短を実現する”鍵”となるだろう。ぜひ、使ってみていただきたい。

参考資料