如何从PowerShell复制文本


56

有时我想从Powershell复制命令以粘贴到文档中,还是想复制输出?如何在Powershell中选择和复制文本?

至少我知道一种将文本(或命令)粘贴到Powershell的方法:您只需右键单击Powershell。


2
您可能希望将与非SharePoint无关的答案移至更通用的Stack Overflow网站。非常感谢您可能将PowerShell与SharePoint结合使用,但是此问题不属于此处。
Jeroen Ritmeijer 2011年

我同意。这不是一个纯粹的Sharepoint问题。

Answers:


49

只需在控制台窗口中选择文本,然后按Enter或鼠标右键即可。所选文本最终出现在剪贴板中。

请注意,这仅在控制台窗口启用了QuickEdit模式时才有效。如果不是,请在控制台窗口属性(“系统”菜单→“属性”→“选项”)中启用它,或通过“系统”菜单→“编辑”→“标记”(在英语Windows中为Alt + Space,E,K)进入标记模式。


使用Shift键突出显示文本(文本变为白色)对我不起作用。我不得不使用鼠标突出显示文本(文本变为橙色)
reggaeguitar

25

或使用clip.exe将命令的输出直接发送到剪贴板。例如,

Get-ChildItem C:\Test -recurse | Clip

带有夹子的管子也是很好的选择!谢谢!

7
但是,这不适用于Unicode。在这种情况下,您可以Set-Clipboard从PSCX 使用。
乔伊(Joey)

7
有一种方法可以clip.exe正确处理Unicode:首先将PS的$OutputEncoding变量设置为无BOM的UTF-16,如下所示:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0 2013年

这是我寻找来这里的最后一个把戏!谢谢:)
sodawillow


2

转到菜单栏,左上角,编辑全选复制粘贴在记事本中


1

为此,我已经建立了自己的剪贴板功能。

Function Out-Clipboard{
    param($Value,[switch]$PassThru) 
    begin {
            [void][reflection.assembly]::LoadWithPartialName("Windows.Forms")
        $tb = New-Object System.Windows.Forms.TextBox
        $tb.Multiline = $true
        $pipeObjects = @()
    }
    process {
      $pipeObjects+=$_
    }
    end {
        if([string]::IsNullOrEmpty($Value)){
            $text=$null
            $pipeObjects | out-string -stream | %{$text = $text + $(if($text -ne $null){"`r`n"}) + $_}
            $tb.text = $text
        } 
        else {
            $tb.text = $value
        }
        $tb.SelectAll()
        $tb.Copy()
        if($PassThru){
            $pipeObjects
        }
        $tb.Dispose()
    }
}

示例命令行:

Get-Process | Out-Clipboard

希望这就是您想要的。


您的代码在我的盒子上不起作用:New-Object:找不到类型[System.Windows.Forms.TextBox]:确保已加载包含此类型的程序集。在第5行:char:25 + $ tb =新对象<<<< System.Windows.Forms.TextBox + CategoryInfo:InvalidType:(:) [New-Object],PSArgumentException + FullyQualifiedErrorId:TypeNotFound,Microsoft.PowerShell.Commands .NewObjectCommand

1
如果你看看pscx.codeplex.com,由社区扩展提供的功能之一是出剪贴板

1
@CosmosKey非常令人印象深刻!感谢您提及pscx.codeplex.com,@ Winfred!
Anatoly Mironov

1

Set-Clipboard自Powershell v5.0起是标准cmdlet。在某些情况下,应Out-String先将对象转换为,然后再将结果传递到剪贴板:

Get-ChildItem C:\Windows -recurse -depth 1 | Out-String -stream | Set-Clipboard

0

如果要将上次键入的命令复制到剪贴板,则以下命令很有用(尤其是对于跨越多行的命令):

(Get-History -Count 1).CommandLine | Set-Clipboard

如果要重复最后一个命令,并将其输出复制到剪贴板,请使用:

Invoke-History | Set-Clipboard

注意:您应该只对便宜且幂等的命令执行此操作,而不会产生任何副作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.