PowerShell複製到剪貼板:超越Ctrl+C和Ctrl+V

在使用PowerShell编写代码时,你可能最后会考虑到的是Windows剪贴板。我们可能都知道恶名昭彰的Ctrl-C和Ctrl-V键盘快捷键来复制和粘贴剪贴板中的内容,但这通常是通过GUI完成的。在我们的PowerShell脚本中,这并不太有用。然而,你知道吗,PowerShell有复制到剪贴板的功能吗?

在本文中,我将介绍我们过去如何在PowerShell中实现复制和粘贴功能,并向你介绍PowerShell从版本5开始提供的命令。

在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

不仅如此,我们没有简单的方法来从剪贴板中获取信息。一旦内容在剪贴板中,我们被迫手动粘贴。但现在,通过使用原生的剪贴板命令,这一切都不再是问题!

现在我们有两个命令来解决这个问题得更好: Get-ClipboardSet-Clipboard

Set-Clipboard Powershell命令

Set-Clipboard 取代了 clip.exe,但行為完全相同。現在,不再將輸出導向到 clip,而是可以使用 Set-Clipboard。如果這樣做,你會注意到當你將內容粘貼到其他地方時,結尾的換行符會消失。

剪貼簿現在只包含字符串 Hello

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

使用 Set-Clipboard 的另一個有用功能是 Append 參數。傳統上,剪貼簿只能存儲一個項目。現在,通過使用 Set-ClipboardAppend 參數,你可以添加無限數量的項目而不會刪除之前的項目。

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

Get-Clipboard 參數

即使你不使用 Set-Clipboard 將內容複製到剪貼簿,你仍然可以使用 Get-Clipboard 來瞭解幾種不同的類型,而不僅僅是簡單的字符串。例如,如果你從 檔案總管 複製了一個文件列表,並且希望將此列表放入 PowerShell 控制台,只需在 Get-Clipboard 上使用 Format 參數和 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 ImageGet-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 cmdlet。

安裝好 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 中,您可以透過 Get-ClipboardSet-Clipboard 命令更多地使用剪貼簿。這些 cmdlet 允許您使用 PowerShell 複製到剪貼簿,並且還可以智能地從剪貼簿中貼上。

有關這些 cmdlet 的詳細說明,請查看詳細的說明:

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

這將為您提供所有您可以嘗試的各種參數。

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