Как скопировать текст из 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.