Як скопіювати текст з PowerShell


56

Іноді я хочу скопіювати команду з Powershell, щоб вставити в документ, або хочу скопіювати вихід? Як я можу вибрати та скопіювати текст у Powershell?

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


2
Ви можете перенести відповіді, що не належать до SharePoint, на більш загальний сайт переповнення стека. Я вдячний, що ви, ймовірно, використовуєте PowerShell у поєднанні з SharePoint, але ці питання тут не належать.
— Jeroen Ritmeijer

Я згоден. Це не чисте питання Sharepoint.

Відповіді:


49

Просто виберіть текст у вікні консолі та натисніть клавішу Enter або праву кнопку миші. Вибраний текст потрапляє у буфер обміну.

Зверніть увагу, що це буде працювати лише в тому випадку, якщо для вікна консолі ввімкнено режим QuickEdit. Якщо це не так, то або ввімкніть його у властивості вікна консолі (системне меню → Властивості → Параметри), або увійдіть у режим маркування через системне меню → Редагувати → Позначити (Alt + Пробіл, E, K в англійській Windows).


Використання клавіші Shift для виділення тексту (текст стає білим) не працювало для мене. Мені довелося за допомогою миші виділити текст (текст стає помаранчевим)
— reggaeguitar

25

Або надішліть вихід своєї команди безпосередньо в буфер обміну, використовуючи clip.exe, наприклад,

Get-ChildItem C:\Test -recurse | Clip

труба із затискачем - також хороша альтернатива! Дякую!

7
Однак це не працюватиме з Unicode. У такому випадку ви можете скористатися Set-Clipboardз PSCX.
— Joey

7
Є спосіб правильно clip.exeобробити Unicode: встановіть $OutputEncodingзмінну PS на BOM-менш UTF-16 спочатку так:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
— mklement0

Цей останній трюк - це те, що я шукав, приїхавши сюди! Дякую
— :)


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 = 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

Caveat: ви повинні робити це лише для недорогих та безвідмовних команд без будь-яких побічних ефектів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.