【发布时间】:2016-03-29 01:54:20
【问题描述】:
我有一些不寻常的、相对复杂/大型的 PowerShell 脚本,它通过 Write-Host 输出彩色文本。我想将整个文本输出复制到 Windows 剪贴板而不丢失制表符(使用 Windows Control-C、剪贴板副本)或替代。如果在脚本在 PowerShell.exe 控制台窗口中运行后突出显示所有文本,然后按 control-C(复制到 Windows 剪贴板),制表符将转换为空格。
如果我尝试使用下面的 Set-Clipboard cmdlet 来管道我的脚本的整个输出,我的脚本中有太多的组件(主要是 Write-Host 行)与进一步的 PS 管道处理不兼容;因此,下面的 Set-Clipboard 完全被忽略(仅显示输出到本地主机控制台)。
PS:我也尝试过 Start-Transcript\Stop-Transcript.. 但是,这也没有捕获标签。它将制表符转换为空格。
我希望有人有一个聪明、快速的方法来剪贴板捕获我从需要 write-host 的 cmdlet 获得的文本,该写主机还捕获 `t 制表符。
invoke-myscript -Devicename "WindowsPC" | Set-Clipboard
function Set-Clipboard {
param(
## The input to send to the clipboard
[Parameter(ValueFromPipeline = $true)]
[object[]] $InputObject
)
begin
{
Set-StrictMode -Version Latest
$objectsToProcess = @()
}
process
{
## Collect everything sent to the script either through
## pipeline input, or direct input.
$objectsToProcess += $inputObject
}
end
{
## Launch a new instance of PowerShell in STA mode.
## This lets us interact with the Windows clipboard.
$objectsToProcess | PowerShell -NoProfile -STA -Command {
Add-Type -Assembly PresentationCore
## Convert the input objects to a string representation
$clipText = ($input | Out-String -Stream) -join "`r`n"
## And finally set the clipboard text
[Windows.Clipboard]::SetText($clipText)
}
}
【问题讨论】:
-
为什么不直接将输出作为 HTML 输出写入文件?或其他一些富文本。听起来你真的只想要颜色而不是任何东西,并试图解决错误的问题。也就是说,Write-Host 不使用输出流,所以你不会在管道中得到任何东西。启用 CSS 的 HTML 输出听起来更通用
-
嘿,马特。非常感谢您的建议。任何想法如何转换具有大量行的脚本,例如 write-host -NoNewline -ForegroundColor "Gray" "Circuit:
tt`t"; write-host -ForegroundColor "DarkYellow" "$Circuit" -
您需要使用@name 来回复他人。我不知道你回复了。就像我说的,我认为你应该尝试不同的方法。您能否展示您希望输出的样例以及如何生成
$circut这应该很容易替换。这是一个高效的问题。 -
您可以使用 powershell_ise 来运行您的脚本吗?控制台确实会丢失选项卡,但 ISE 不会。
标签: windows powershell tabs clipboard