覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

PowerShell - クリップボードの画像データをファイルに保存する

コピーした画像 や コピーしたExcelのセルのデータ などで 画像として保存可能なクリップボード上のデータを保存するためのPowerShellの例です。

Windows 標準の Windows PowerShell (PowerShell 5.x) であれば以下のようなコマンドで
クリップボードのデータを画像として保存できます。

(Get-Clipboard -Format Image).Save("Image-file.png")


が、PowerShell Core(PowerShell 7.x)では、このコマンドはエラーになります(対応していません)


ですので、以下のようなやり方(Windows.Forms.Clipboard)を使います。

この PowerShell は、クリップボードのデータをデスクトップに ImageFile.png という名前で保存する例です。

<# 
コピーしたデータ(クリップボードのデータ)を画像としてデスクトップに保存します。
保存時のファイル名は $SaveImgeFile に定義しています
#>

Add-Type -AssemblyName System.Windows.Forms

# 保存用ファイル名
$SaveImgeFile = 'ImageFile.png'

$DesktopPath = [System.Environment]::GetFolderPath("Desktop")

$clip = [Windows.Forms.Clipboard]::GetImage()

if ($null -ne $clip) { $clip.Save($DesktopPath + '\' + $SaveImgeFile) }


以下のPowerShellは単純にファイル名の頭に現在日時情報を付与した例です。その他は上記の例と変わりません。

<# 
コピーしたデータ(クリップボードのデータ)を画像としてデスクトップに保存します。
保存時のファイル名のSuffixは $SaveImgeFile に定義しています
#>

Add-Type -AssemblyName System.Windows.Forms

# 保存用ファイル名
$SaveImgeFile = 'ImageFile.png'

$SaveFileNamePrefix = Get-Date -Format "yyyyMMdd-HHmmssfff"

$DesktopPath = [System.Environment]::GetFolderPath("Desktop")

$clip = [Windows.Forms.Clipboard]::GetImage()

if ($null -ne $clip) { $clip.Save($DesktopPath + '\' + $SaveFileNamePrefix + '_' + $SaveImgeFile) }


というわけで、クリップボードに画像として保存可能なデータがある状態で、上記のPowerShellを実行すれば画像として保存されます。