บางครั้งฉันต้องการคัดลอกคำสั่งจาก Powershell เพื่อวางในเอกสารหรือฉันต้องการคัดลอกผลลัพธ์ ฉันจะเลือกและคัดลอกข้อความใน Powershell ได้อย่างไร
อย่างน้อยฉันก็รู้วิธีวางข้อความ (หรือคำสั่ง) ใน Powershell: คุณเพียงคลิกขวาที่ Powershell
บางครั้งฉันต้องการคัดลอกคำสั่งจาก Powershell เพื่อวางในเอกสารหรือฉันต้องการคัดลอกผลลัพธ์ ฉันจะเลือกและคัดลอกข้อความใน Powershell ได้อย่างไร
อย่างน้อยฉันก็รู้วิธีวางข้อความ (หรือคำสั่ง) ใน Powershell: คุณเพียงคลิกขวาที่ Powershell
คำตอบ:
เพียงเลือกข้อความในหน้าต่างคอนโซลและกด Enter หรือปุ่มเมาส์ขวา ข้อความที่เลือกนั้นลงท้ายด้วยคลิปบอร์ดของคุณ
โปรดทราบว่าจะใช้งานได้เฉพาะเมื่อเปิดใช้งานโหมด QuickEdit สำหรับหน้าต่างคอนโซล หากไม่เป็นเช่นนั้นให้เปิดใช้งานในคุณสมบัติหน้าต่างคอนโซล (เมนูระบบ→คุณสมบัติ→ตัวเลือก) หรือเข้าสู่โหมดทำเครื่องหมายผ่านเมนูระบบ→แก้ไข→ทำเครื่องหมาย (Alt + Space, E, K บน Windows ภาษาอังกฤษ)
หรือส่งออกคำสั่งของคุณโดยตรงไปยังคลิปบอร์ดโดยใช้ clip.exe ตัวอย่างเช่น
Get-ChildItem C:\Test -recurse | Clip
Set-Clipboard
จาก PSCX
clip.exe
จัดการ Unicode อย่างถูกต้อง: ตั้งค่า$OutputEncoding
ตัวแปรของ PS เป็นBOM-less UTF-16 ก่อนดังนี้:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
มีลักษณะที่ส่งข้อความในคลิปบอร์ดเพื่อการประยุกต์ใช้เช่น Notepad (C # หรือ Powershell) คุณจะพบเคล็ดลับเพิ่มเติม อย่างไรก็ตามคำตอบโดย @Wictor อาจเป็นวิธีที่ง่ายที่สุด
ไปที่แถบเมนูด้านบนซ้าย, แก้ไข , เลือกทั้งหมด , คัดลอก , วางใน notepad
ฉันสร้าง 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
หวังว่ามันคือสิ่งที่คุณกำลังมองหา
Set-Clipboard
เป็น cmdlet มาตรฐานตั้งแต่ Powershell v5.0 ในบางกรณีคุณควรแปลงวัตถุเป็นข้อความด้วยOut-String
ก่อนที่จะส่งผลลัพธ์ไปยังคลิปบอร์ด:
Get-ChildItem C:\Windows -recurse -depth 1 | Out-String -stream | Set-Clipboard
หากคุณต้องการคัดลอกคำสั่งสุดท้ายที่คุณพิมพ์ไปยังคลิปบอร์ดคำสั่งต่อไปนี้มีประโยชน์ (โดยเฉพาะอย่างยิ่งสำหรับคำสั่งที่ขยายหลายบรรทัด):
(Get-History -Count 1).CommandLine | Set-Clipboard
หากคุณต้องการทำซ้ำคำสั่งสุดท้ายและคัดลอกผลลัพธ์ไปยังคลิปบอร์ดให้ใช้:
Invoke-History | Set-Clipboard
Caveat: คุณควรทำเช่นนี้สำหรับคำสั่งที่ไม่แพงและ idempotent โดยไม่มีผลข้างเคียงใด ๆ