วิธีคัดลอกข้อความจาก PowerShell


56

บางครั้งฉันต้องการคัดลอกคำสั่งจาก Powershell เพื่อวางในเอกสารหรือฉันต้องการคัดลอกผลลัพธ์ ฉันจะเลือกและคัดลอกข้อความใน Powershell ได้อย่างไร

อย่างน้อยฉันก็รู้วิธีวางข้อความ (หรือคำสั่ง) ใน Powershell: คุณเพียงคลิกขวาที่ Powershell


2
คุณอาจต้องการย้ายคำตอบที่ไม่เกี่ยวข้องกับ SharePoint ไปยังไซต์ Stack Overflow ทั่วไป ฉันขอขอบคุณคุณอาจใช้ PowerShell ร่วมกับ SharePoint แต่คำถามนี้ไม่ได้อยู่ที่นี่
Jeroen Ritmeijer

ฉันเห็นด้วย. มันไม่ใช่คำถามของ SharePoint ที่แท้จริง

คำตอบ:


49

เพียงเลือกข้อความในหน้าต่างคอนโซลและกด Enter หรือปุ่มเมาส์ขวา ข้อความที่เลือกนั้นลงท้ายด้วยคลิปบอร์ดของคุณ

โปรดทราบว่าจะใช้งานได้เฉพาะเมื่อเปิดใช้งานโหมด QuickEdit สำหรับหน้าต่างคอนโซล หากไม่เป็นเช่นนั้นให้เปิดใช้งานในคุณสมบัติหน้าต่างคอนโซล (เมนูระบบ→คุณสมบัติ→ตัวเลือก) หรือเข้าสู่โหมดทำเครื่องหมายผ่านเมนูระบบ→แก้ไข→ทำเครื่องหมาย (Alt + Space, E, K บน Windows ภาษาอังกฤษ)


การใช้ปุ่ม Shift เพื่อเน้นข้อความ (ข้อความเปลี่ยนเป็นสีขาว) ใช้ไม่ได้สำหรับฉัน ผมต้องใช้เมาส์เพื่อเน้นข้อความ (ข้อความเปลี่ยนเป็นสีส้ม)
reggaeguitar

25

หรือส่งออกคำสั่งของคุณโดยตรงไปยังคลิปบอร์ดโดยใช้ clip.exe ตัวอย่างเช่น

Get-ChildItem C:\Test -recurse | Clip

ท่อที่มีคลิป ia เป็นทางเลือกที่ดีเช่นกัน! ขอขอบคุณ!

7
สิ่งนี้จะไม่ทำงานกับ Unicode ในกรณีนี้คุณสามารถใช้Set-Clipboardจาก PSCX
Joey

7
มีวิธีclip.exeจัดการ Unicode อย่างถูกต้อง: ตั้งค่า$OutputEncodingตัวแปรของ PS เป็นBOM-less UTF-16 ก่อนดังนี้:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0

เคล็ดลับสุดท้ายนี้คือสิ่งที่ฉันมองหามาที่นี่! ขอบคุณ
:)


2

ไปที่แถบเมนูด้านบนซ้าย, แก้ไข , เลือกทั้งหมด , คัดลอก , วางใน notepad


1

ฉันสร้าง funciton 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

หวังว่ามันคือสิ่งที่คุณกำลังมองหา


รหัสของคุณใช้ไม่ได้กับกล่องของฉัน: วัตถุใหม่: ไม่พบประเภท [System.Windows.Forms.TextBox]: ตรวจสอบให้แน่ใจว่าได้โหลดแอสเซมบลีที่มีประเภทนี้แล้ว ที่บรรทัด: 5 ตัวอักษร: 25 + $ tb = ระบบใหม่ <<<< System.Windows.Forms.TextBox + CategoryInfo: InvalidType: (:) [วัตถุใหม่], PSArgumentException + FullyQualifiedErrorId: TypeNotFound, Microsoft.PowerShell.Commands .NewObjectCommand

1
หากคุณตรวจสอบpscx.codeplex.comหนึ่งในฟังก์ชั่นที่มีให้โดยส่วนขยายชุมชนคือคลิปบอร์ด

1
มันน่าประทับใจมาก @CosmosKey! ขอบคุณที่พูดถึง pscx.codeplex.com, @Winfred!
Anatoly Mironov

1

Set-Clipboardเป็น cmdlet มาตรฐานตั้งแต่ 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: คุณควรทำเช่นนี้สำหรับคำสั่งที่ไม่แพงและ idempotent โดยไม่มีผลข้างเคียงใด ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.