2016-03-12

PowerShellからクリップボードを扱う

PowerShellで実行した処理結果を、クリップボードに送りたい場合があります。・・・よね?

今回はPowerShellからクリップボードへの送信方法と、クリップボードからの取得方法をご紹介していきます。


1.処理結果をクリップボードへ送信する方法 その1

コマンドの実行結果をクリップボードへ送る方法を2つご紹介します。

まず1つ目はパイプを使用する方法です。

下記に簡単なサンプルスクリプトを記述します。
# クリップボードへの送信 その1
Get-ChildItem | Clip
以上です。・・・と終わってしまっては身も蓋もないですね。

まず、お馴染みの「Get-ChildItem」コマンドレットで、カレントディレクトリ内のアイテムを取得しています。

そしてパイプを使用して「Clip」と記述します。

実際、これだけで、コマンド結果がクリップボードに送信されています。
試しに、上記を実行後、メモ帳などを開いて貼り付けを行ってみてください。
コマンド結果が貼り付けられるはずです。

しかしここで問題が発生している方もいらっしゃるのではないでしょうか。

そうです、日本語の部分が文字化けし、「????」となってしまいます。
(問題ないという方は読み飛ばしてください)



この問題は、PowerShellの仕様上のエンコードがUS-ASCIIとなっていることが原因です。
(PowerShellを起動し、「$OutputEncoding」と入力してみるとわかります)

文字化けを回避するには、一時的にエンコードを変更したうえで、コマンドを実行し、クリップボードへ送信する必要があります。

そのためには次のように記述します。
# クリップボードへの送信 その1改
$OutputEncoding = [console]::OutputEncoding;
Get-ChildItem | Clip
上記の「$OutputEncoding = [console]::OutputEncoding;」の部分でエンコードを変更しています。

この一文をつけることによって、日本語が文字化けしなくなります。


2.処理結果をクリップボードへ送信する方法 その2

処理結果をクリップボードへ送信する、もうひとつの方法はClipboardクラスを使用する方法です。

下記にサンプルスクリプトを記述します。
# クリップボードへの送信 その2

# アセンブリの読み込み
Add-Type -Assembly System.Windows.Forms

# カレントディレクトリ内のアイテムを取得
$Item = Get-ChildItem

# 取得したアイテムをテキストとしてクリップボードへ送信
[Windows.Forms.Clipboard]::SetText($Item)
このように記述すると、コマンド実行結果をクリップボードへ送ることができます。
ただし、この方法の場合は、Get-ChildItemコマンドレットを実行した結果のうち、Nameの部分だけが送られていることに注意してください。


3.クリップボードから取得する方法

続いて、クリップボードの内容をPowerShellで取得する方法をご紹介します。

取得する場合も上記2で使用したClipboardクラスを用います。
# クリップボードへからの取得

# アセンブリの読み込み
Add-Type -Assembly System.Windows.Forms

# クリップボードから取得
$Get = [Windows.Forms.Clipboard]::GetText()

のように記述することで、現在クリップボードにあるテキストを取得することができます。

Clipboardクラスの詳細についてはこちらを参照ください。

今回の内容は、あまり出番がないかもしれませんが、知っておくに越したことはないと思い、ご紹介させていただきました。

=============================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=============================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=============================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/