Como copiar texto do PowerShell


56

Às vezes, quero copiar um comando do Powershell para colar em um documento ou quero copiar a saída? Como posso selecionar e copiar texto no Powershell?

Pelo menos eu sei como colar um texto (ou um comando) no Powershell: basta clicar com o botão direito do mouse em Powershell.


2
Convém mover respostas não relacionadas ao SharePoint para o site Stack Overflow mais genérico. Aprecio que você provavelmente esteja usando o PowerShell em combinação com o SharePoint, mas essas perguntas não pertencem aqui.
Jeroen Ritmeijer

Concordo. Não é uma questão pura do Sharepoint.

Respostas:


49

Basta selecionar o texto na janela do console e pressionar enter ou o botão direito do mouse. O texto selecionado acaba na sua área de transferência.

Observe que isso só funcionará se o modo QuickEdit estiver ativado para a janela do console. Caso contrário, ative-o nas propriedades da janela do console (menu Sistema → Propriedades → Opções) ou entre no modo Marcar através do menu Sistema → Editar → Marcar (Alt + Espaço, E, K em um Windows em inglês).


Usar a tecla Shift para destacar o texto (o texto fica branco) não funcionou para mim. Eu tive que usar o mouse para destacar o texto (o texto fica laranja)
reggaeguitar 16/04

25

Ou envie a saída do seu comando diretamente para a área de transferência usando clip.exe. Por exemplo,

Get-ChildItem C:\Test -recurse | Clip

um cachimbo com clipe também é uma boa alternativa! Obrigado!

7
Porém, isso não funcionará com Unicode. Nesse caso, você pode usar o Set-ClipboardPSCX.
Joey

7
Há uma maneira de ter clip.exealça Unicode corretamente: set do PS $OutputEncodingvariável para BOM-less UTF-16 em primeiro lugar, da seguinte forma:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0

Este último truque é o que eu procurava aqui! Thanks:)
sodawillow


2

Vá para a barra de menus, no canto superior esquerdo, Editar , Selecionar tudo , Copiar , colar no bloco de notas


1

Eu construí minha própria função de área de transferência para isso.

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

Linha de comando de amostra:

Get-Process | Out-Clipboard

Espero que seja o que você está procurando.


Seu código não funciona na minha caixa: New-Object: Não é possível encontrar o tipo [System.Windows.Forms.TextBox]: verifique se o assembly que contém esse tipo está carregado. Na linha: 5 char: 25 + $ tb = Novo objeto <<<< System.Windows.Forms.TextBox + CategoryInfo: InvalidType: (:) [Novo-objeto], PSArgumentException + FullyQualifiedErrorId: TypeNotFound, Microsoft.PowerShell.Commands .NewObjectCommand

11
Se você verificar pscx.codeplex.com , uma das funções fornecidas pelas extensões comunidade está fora da área de transferência

11
É muito impressionante, @ CosmosKey! Obrigado por mencionar pscx.codeplex.com, @Winfred!
Anatoly Mironov

1

Set-Clipboardé o cmdlet padrão a partir do Powershell v5.0. Em alguns casos, você deve converter objetos em texto Out-Stringantes do resultado da canalização na área de transferência:

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

0

Se você deseja copiar o último comando digitado na área de transferência, o seguinte comando é útil (especialmente para comandos que abrangem várias linhas):

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

Se você deseja repetir o último comando e copiar sua saída para a área de transferência, use:

Invoke-History | Set-Clipboard

Advertência: você deve fazer isso apenas para comandos baratos e idempotentes, sem efeitos colaterais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.