我有一个 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
(来源)。