PowerShell 复制到剪贴板:超越 Ctrl+C 和 Ctrl+V

在编写PowerShell代码时,你可能最后会考虑到的是
Windows剪贴板。我们可能都知道通过GUI使用Ctrl-C和Ctrl-V的快捷键来复制和粘贴剪贴板中的内容,但在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-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 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实现了PowerShell复制到剪贴板的功能。这些cmdlet使您可以使用PowerShell将内容复制到剪贴板,还可以智能地从剪贴板中粘贴。

要获取有关cmdlet的详细信息,请查看详细帮助:

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

这将为您提供所有可以尝试的各种参数。

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