PowerShell'den metin kopyalama


53

Bazen bir belgeye yapıştırmak için Powershell'den bir komut kopyalamak istiyorum ya da çıktıyı kopyalamak istiyorum? Powershell'de metni nasıl seçebilir ve kopyalayabilirim?

En azından Powershell'e bir metin (veya komut) yapıştırmanın bir yolunu biliyorum: sadece Powershell'e sağ tıklayın.


2
SharePoint ile ilgili olmayan yanıtları daha genel Yığın Taşması sitesine taşımak isteyebilirsiniz. Muhtemelen PowerShell'i SharePoint ile birlikte kullandığınız için teşekkür ederim, ancak bu sorular buraya ait değildir.
Jeroen Ritmeijer

Katılıyorum. Saf bir Sharepoint sorusu değil.

Yanıtlar:


46

Sadece konsol penceresinden metni seçin ve enter tuşuna veya sağ fare tuşuna basın. Bu seçilen metin panoda sona erer.

Bunun yalnızca konsol penceresi için QuickEdit modu etkinleştirilmişse işe yarayacağını unutmayın. Değilse, konsol penceresi özelliklerinde (Sistem menüsü → Özellikler → Seçenekler) etkinleştirin veya Sistem menüsü → Düzenle → İşaretle (İngiliz Penceresinde Alt + Boşluk, E, K) ile İşaretleme moduna girin.


24

Veya komutunuzun çıktısını clip.exe kullanarak doğrudan panoya gönderin Örneğin,

Get-ChildItem C:\Test -recurse | Clip

Klipsli bir boru ben, iyi bir alternatif! Teşekkür ederim!

6
Ancak bu Unicode ile çalışmayacak. Bu durumda kullanabilirsiniz Set-Clipboard PSCX'ten.
Joey

6
Sahip olmak için bir yol var clip.exe Unicode'u doğru kullanın: PS'leri ayarlayın $OutputEncoding aşağıdaki gibi BOM'siz UTF-16'ya değişken: $OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0

Bu son numara buraya gelmek için aradığım şeydi! Teşekkürler : )
sodawillow


2

Menubar'a git, sol üst Düzenle , Hepsini seç , kopya , not defterine yapıştır


1

Bunun için kendi pano dışı işlevimi oluşturdum.

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

Örnek komut satırı:

Get-Process | Out-Clipboard

Umarım aradığın şey budur.


Kodunuz kutumda çalışmıyor: Yeni Nesne: [System.Windows.Forms.TextBox] türünü bulamıyor: bu türü içeren derlemenin yüklendiğinden emin olun. Satırda: 5 char: 25 + $ tb = Yeni Nesne & lt; & lt; & lt; System.Windows.Forms.TextBox + CategoryInfo: InvalidType: (:) [Yeni Nesne], PSArgumentException + FullyQualifiedErrorId: TypeNotFound, Microsoft.PowerShell.Commands.NewObjectCommand

1
Eğer kontrol edersen pscx.codeplex.com topluluk uzantıları tarafından sağlanan işlevlerden biri pano dışı

1
Çok etkileyici, @CosmosKey! Pscx.codeplex.com, @Winfred'den bahsettiğiniz için teşekkür ederiz!
Anatoly Mironov

1

Set-Clipboard Powershell v5.0'dan itibaren standart cmdlet'dir. Bazı durumlarda nesneleri metne dönüştürmelisiniz. Out-String panoya sonuç vermeden önce panoya:

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

0

Panoya yazdığınız son komutu kopyalamak istiyorsanız, aşağıdaki komut kullanışlıdır (özellikle birden çok satırı kapsayan komutlar için):

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

Son komutu tekrarlamak ve çıktısını panoya kopyalamak istiyorsanız, şunu kullanın:

Invoke-History | Set-Clipboard

Uyarı: Bunu yalnızca hiçbir yan etkisi olmadan ucuz ve iddiasız komutlar için yapmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.