54

Иногда я хочу скопировать команду из Powershell, чтобы вставить документ, или я хочу скопировать вывод? Как выбрать и скопировать текст в Powershell?

По крайней мере, я знаю способ вставки текста (или команды) в Powershell: вы просто щелкаете правой кнопкой мыши на Powershell.

7 ответов7

46

Просто выделите текст в окне консоли и нажмите ввод или правую кнопку мыши. Выбранный текст попадает в ваш буфер обмена.

Обратите внимание, что это будет работать только в том случае, если для окна консоли включен режим QuickEdit. Если это не так, то либо включите его в свойствах окна консоли (меню «Система» → «Свойства» → «Параметры»), либо войдите в режим «Марк» через меню «Система» → «Правка» → «Отметить» (Alt+ Пробел, E, K в английской Windows).

24

Или отправьте вывод вашей команды непосредственно в буфер обмена, используя clip.exe. Например,

Get-ChildItem C:\Test -recurse | Clip
2

Перейти к строке меню, вверху слева, Изменить, Выбрать все, Скопировать, вставить в блокнот

2

Посмотрите на Отправить текст в буфере обмена в приложение, как Блокнот (C # или Powershell). Вы найдете еще несколько советов. Тем не менее, ответ @Wictor является, вероятно, самым простым решением.

1

Set-Clipboard - это стандартный командлет Powershell v5.0. В некоторых случаях вам следует преобразовать объекты в текст с помощью Out-String перед передачей результата в буфер обмена:

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

Для этого я создал свою собственную функцию out-clipboard.

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

Надеюсь, это то, что вы ищете.

0

Если вы хотите скопировать последнюю введенную команду в буфер обмена, полезна следующая команда (особенно для команд, занимающих несколько строк):

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

Если вы хотите повторить последнюю команду и скопировать ее вывод в буфер обмена, используйте:

Invoke-History | Set-Clipboard

Предостережение: вы должны делать это только для недорогих и идемпотентных команд без каких-либо побочных эффектов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .