Как скопировать текст из PowerShell


56

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

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


2
Возможно, вы захотите переместить не связанные с SharePoint ответы на более общий сайт переполнения стека. Я действительно ценю, что вы, вероятно, используете PowerShell в сочетании с SharePoint, но этот вопрос здесь не относится.
— Йерун Ритмейер

Я согласен. Это не чистый вопрос Sharepoint.

Ответы:


49

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

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


Использование клавиши Shift для выделения текста (текст становится белым) не работает для меня. Мне пришлось использовать мышь, чтобы выделить текст (текст становится оранжевым)
— reggaeguitar

25

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

Get-ChildItem C:\Test -recurse | Clip

труба с зажимом - тоже хорошая альтернатива! Спасибо!

7
Это не будет работать с Unicode, хотя. В этом случае вы можете использовать Set-Clipboardиз PSCX.
— Джои

7
Существует способ clip.exeправильно обрабатывать Unicode: $OutputEncodingсначала установите для переменной PS значение UTF-16 без спецификации, следующим образом:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
— mklement0

Этот последний трюк - то, что я искал, чтобы приехать сюда! Спасибо
— :)


2

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


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

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


Ваш код не работает на моем компьютере: New-Object: Не удается найти тип [System.Windows.Forms.TextBox]: убедитесь, что загружена сборка, содержащая этот тип. В строке: 5 символов: 25 + $ tb = New-Object <<<< 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!
— Анатолий Миронов

1

Set-Clipboardстандартный командлет от Powershell v5.0. В некоторых случаях вы должны преобразовать объекты в текст 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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.