如何防止在 Powershell 中将回车符复制到剪贴板?

如何防止在 Powershell 中将回车符复制到剪贴板?

我有一个 powershell 脚本,它正在对 MAC 地址进行散列处理,然后将其发布到文件和剪贴板中。

$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($MAC)))
$hash | clip
$hash | Out-File $Env:USERPROFILE\Desktop\this.txt 

我遇到的问题是回车符被导出到剪贴板。我不想要那样。

有没有什么办法可以阻止这种情况发生?

附加信息 - 当我将剪贴板上的文本粘贴到十六进制编辑器中时,我看到 0D0A

如果我能以某种方式放弃剪贴板功能,那就好了?谢谢

答案1

如果你可以使用 PowerShell 5.0 或更高版本,Set-Clipboard可用。它不会添加任何换行符。因此,您的示例将变为:

$hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($MAC)))
$hash | Set-Clipboard
$hash | Out-File $Env:USERPROFILE\Desktop\this.txt

答案2

$Hash.TrimEnd()应该清除字符串末尾的任何unicode空格。http://msdn.microsoft.com/en-us/library/system.string.trimend.aspx

答案3

不幸的是,它本身似乎clip附加了换行符。所以,让我们以 .NET 方式来做吧!

这是一个接受 stdin 并将其放入剪贴板的函数:

function Out-ClipboardText
{
    param(  
        [Parameter(
            Position=0, 
            Mandatory=$true, 
            ValueFromPipeline=$true)
        ]
        [String]$text
    ) 

    process
    {
        powershell -sta -noprofile -command "add-type -an system.windows.forms; [System.Windows.Forms.Clipboard]::SetText('$text')"
    }
}

改编自http://brianreiter.org/2010/09/03/copy-and-paste-with-clipboard-from-powershell/https://stackoverflow.com/a/887406/1030702

使用方式如下:

$hash | Out-ClipboardText

它使用 .NET 剪贴板功能来设置文本。不幸的是,它也有点慢和复杂,因为它需要在 STA 模式下启动一个新的 PowerShell 进程,这是Clipboard(来源)。

相关内容