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

56

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

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

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

Ответы:

49

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

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

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

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

Get-ChildItem C:\Test -recurse | Clip
ravikanth
источник
труба с зажимом - тоже хорошая альтернатива! Спасибо!
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
maoizm
источник
0

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

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

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

Invoke-History | Set-Clipboard

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

wensveen
источник