Windows Powershell:在 Select-String 后设置剪贴板给出错误 "Cannot find path 'C:\MyDirectory\InputStream' because it does not exist"

Windows Powershell: Set-Clipboard after Select-String gives error "Cannot find path 'C:\MyDirectory\InputStream' because it does not exist"

我想将 Select-String 命令的输出通过管道传输到剪贴板。我已经尝试使用 <command_with_long_output> <args> | select-string <string_of_interest> | clip 管道连接到 clip.exe,但这会复制行结尾,以便在我粘贴时尝试执行。

如果我使用 echo hello | set-clipboard 之类的东西,它不会复制新行,所以我可以在不尝试执行的情况下粘贴。

但是如果我尝试组合 set-clipboardselect-string,我会得到一个错误:

PS C:\Users\chickman> echo "hello" | select-string hello | set-clipboard
set-clipboard : Cannot find path 'C:\Users\chickman\InputStream' because it does not exist.
At line:1 char:38
+ echo "hello" | select-string hello | set-clipboard
+                                      ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (Clipboard:String) [Set-Clipboard], ItemNotFoundException
    + FullyQualifiedErrorId : FailedToSetClipboard,Microsoft.PowerShell.Commands.SetClipboardCommand

为什么会发生这种情况,我该如何解决?

*编辑:

我刚试过

echo "hello" | select-string hello | out-string | set-clipboard

这不再给出错误,但我现在回到原点,因为这添加了一个新行,所以当我尝试粘贴它时尝试执行命令!

我在 PS 5.1.
上测试过它 根据文档,select-string 正在从输入行返回匹配行:这对尾随的换行符没有任何影响。然而,当我 运行
echo "hello" | select-string hello
我有一个
[newline]
hello
[newline]
[newline]
所以我做了一个
echo "hello" | select-string hello | .{process {$_.GetType()}}
这表明,结果不是 string 而是一个 MatchInfo 对象,因此通过显式转换我成功了
echo "hello" | select-string hello | .{process {[string]$_}} | Set-Clipboard