Jak skopiować tekst z PowerShell

56

Czasami chcę skopiować polecenie z programu Powershell, aby wkleić dokument, czy chcę skopiować dane wyjściowe? Jak mogę zaznaczać i kopiować tekst w PowerShell?

Przynajmniej znam sposób wklejania tekstu (lub polecenia) do Powershell: wystarczy kliknąć Powershell prawym przyciskiem myszy.

Anatolij Mironow
źródło
2
Możesz przenieść odpowiedzi niezwiązane z SharePoint do bardziej ogólnej witryny przepełnienia stosu. Rozumiem, że prawdopodobnie używasz PowerShell w połączeniu z SharePoint, ale to pytanie nie należy tutaj.
Jeroen Ritmeijer
Zgadzam się. To nie jest czyste pytanie Sharepoint.

Odpowiedzi:

49

Wystarczy zaznaczyć tekst w oknie konsoli i nacisnąć enter lub prawy przycisk myszy. Ten zaznaczony tekst trafia do schowka.

Zauważ, że zadziała to tylko wtedy, gdy tryb QuickEdit jest włączony dla okna konsoli. Jeśli nie jest, włącz go we właściwościach okna konsoli (menu System → Właściwości → Opcje) lub przejdź do trybu Oznacz za pomocą menu System → Edycja → Zaznacz (Alt + Spacja, E, K w angielskim systemie Windows).

Wictor Wilen MCA MCM MVP
źródło
Użycie klawisza Shift do podświetlenia tekstu (tekst zmienia kolor na biały) nie działało dla mnie. Musiałem użyć myszy, aby podświetlić tekst (tekst zmienia kolor na pomarańczowy)
reggaeguitar
25

Lub wyślij dane wyjściowe polecenia bezpośrednio do schowka za pomocą clip.exe Na przykład:

Get-ChildItem C:\Test -recurse | Clip
ravikanth
źródło
fajka z klipsem to także dobra alternatywa! Dziękuję Ci!
7
Jednak to nie będzie działać z Unicode. W takim przypadku możesz użyć Set-Clipboardz PSCX.
Joey,
7
Istnieje sposób, aby clip.exepoprawnie obsługiwać Unicode: $OutputEncodingnajpierw ustaw zmienną PS na UTF-16 bez BOM, w następujący sposób:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0
Ta ostatnia sztuczka była tym, czego szukałem tutaj! Dzięki
:)
2

Przejdź do paska menu, w lewym górnym rogu, Edytuj , Wybierz wszystko , Kopiuj , wklej do notatnika

Powiększenie
źródło
1

W tym celu zbudowałem własną funkcję schowka.

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()
    }
}

Przykładowa linia poleceń:

Get-Process | Out-Clipboard

Mam nadzieję, że tego właśnie szukasz.


źródło
Twój kod nie działa na moim polu: New-Object: Nie można znaleźć typu [System.Windows.Forms.TextBox]: upewnij się, że zestaw zawierający ten typ jest załadowany. W linii: 5 znaków: 25 + $ tb = Nowy obiekt <<<< System.Windows.Forms.TextBox + CategoryInfo: InvalidType: (:) [Nowy-obiekt], PSArgumentException + FullyQualifiedErrorId: TypeNotFound, Microsoft.PowerShell.Commands .NewObjectCommand
1
Jeśli sprawdzisz pscx.codeplex.com , jedną z funkcji udostępnianych przez rozszerzenia społeczności jest schowek
1
To bardzo imponujące, @CosmosKey! Dzięki za wzmiankę o pscx.codeplex.com, @Winfred!
Anatolij Mironow
1

Set-Clipboardjest standardowym poleceniem cmdlet od Powershell v5.0. W niektórych przypadkach powinieneś przekonwertować obiekty na tekst Out-Stringprzed przesłaniem wyników do schowka:

Get-ChildItem C:\Windows -recurse -depth 1 | Out-String -stream | Set-Clipboard
maoizm
źródło
0

Jeśli chcesz skopiować ostatnie wpisane polecenie do schowka, przydatne jest następujące polecenie (szczególnie w przypadku poleceń obejmujących wiele wierszy):

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

Jeśli chcesz powtórzyć ostatnie polecenie i skopiować jego dane wyjściowe do schowka, użyj:

Invoke-History | Set-Clipboard

Uwaga: powinieneś to robić tylko w przypadku niedrogich i idempotentnych poleceń bez żadnych skutków ubocznych.

Wensveen
źródło