Як скопіювати текст з 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.