Kopieren von Text aus PowerShell


56

Manchmal möchte ich einen Befehl aus Powershell kopieren, um ein Dokument einzufügen, oder ich möchte die Ausgabe kopieren? Wie kann ich Text in Powershell auswählen und kopieren?

Zumindest weiß ich, wie man einen Text (oder einen Befehl) in Powershell einfügt: Sie klicken einfach mit der rechten Maustaste auf Powershell.


2
Möglicherweise möchten Sie Antworten, die sich nicht auf SharePoint beziehen, auf die allgemeinere Stack Overflow-Site verschieben. Ich weiß zu schätzen, dass Sie PowerShell wahrscheinlich in Kombination mit SharePoint verwenden, aber diese Frage gehört nicht hierher.
Jeroen Ritmeijer

Genau. Es ist keine reine Sharepoint-Frage.

Antworten:


49

Wählen Sie einfach den Text im Konsolenfenster aus und drücken Sie die Eingabetaste oder die rechte Maustaste. Der ausgewählte Text wird in Ihrer Zwischenablage gespeichert.

Beachten Sie, dass dies nur funktioniert, wenn der QuickEdit-Modus für das Konsolenfenster aktiviert ist. Ist dies nicht der Fall, aktivieren Sie es entweder in den Eigenschaften des Konsolenfensters (Systemmenü → Eigenschaften → Optionen) oder rufen Sie den Markierungsmodus über Systemmenü → Bearbeiten → Markieren (Alt + Leertaste, E, K unter einem englischen Windows) auf.


Das Markieren des Texts mit der Umschalttaste (Text wird weiß) hat bei mir nicht funktioniert. Ich musste den Text mit der Maus markieren (Text wird orange)
reggaeguitar

25

Oder senden Sie die Ausgabe Ihres Befehls mit clip.exe direkt in die Zwischenablage.

Get-ChildItem C:\Test -recurse | Clip

eine Pfeife mit Clip ist auch eine gute Alternative! Danke!

7
Dies funktioniert jedoch nicht mit Unicode. In diesem Fall können Sie Set-Clipboardvon PSCX verwenden.
Joey

7
Es gibt eine Möglichkeit, clip.exeUnicode korrekt zu handhaben: Setzen Sie die PS- $OutputEncodingVariable zuerst auf BOM-less UTF-16, wie folgt:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0

Nach diesem letzten Trick habe ich gesucht, um hierher zu kommen! Danke
:)


2

Gehen Sie zur Menüleiste oben links, Bearbeiten , Alles auswählen , Kopieren , Einfügen in den Editor


1

Ich habe dafür meine eigene Out-Clipboard-Funktion erstellt.

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

Beispielbefehlszeile:

Get-Process | Out-Clipboard

Ich hoffe, es ist das, wonach Sie suchen.


Ihr Code funktioniert in meiner Box nicht: New-Object: Typ [System.Windows.Forms.TextBox] kann nicht gefunden werden: Stellen Sie sicher, dass die Assembly mit diesem Typ geladen ist. In Zeile: 5 Zeichen: 25 + $ tb = Neues Objekt <<<< System.Windows.Forms.TextBox + CategoryInfo: InvalidType: (:) [Neues Objekt], PSArgumentException + FullyQualifiedErrorId: TypeNotFound, Microsoft.PowerShell.Commands .NewObjectCommand

1
Wenn Sie pscx.codeplex.com auschecken , ist eine der Funktionen, die von den Community-Erweiterungen bereitgestellt werden, out-clipboard

1
Es ist sehr beeindruckend, @CosmosKey! Vielen Dank für die Erwähnung von pscx.codeplex.com, @Winfred!
Anatoly Mironov

1

Set-Clipboardist ein Standard-Cmdlet ab Powershell 5.0. In einigen Fällen sollten Sie Objekte mit in Text konvertieren, Out-Stringbevor Sie das Ergebnis in die Zwischenablage weiterleiten:

Get-ChildItem C:\Windows -recurse -depth 1 | Out-String -stream | Set-Clipboard

0

Wenn Sie den zuletzt eingegebenen Befehl in die Zwischenablage kopieren möchten, ist der folgende Befehl hilfreich (insbesondere für Befehle, die mehrere Zeilen umfassen):

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

Wenn Sie den letzten Befehl wiederholen und seine Ausgabe in die Zwischenablage kopieren möchten, verwenden Sie:

Invoke-History | Set-Clipboard

Vorsichtsmaßnahme: Sie sollten dies nur für kostengünstige und idempotente Befehle ohne Nebenwirkungen tun.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.