Cómo copiar texto de PowerShell


56

A veces quiero copiar un comando de Powershell para pegarlo en un documento, o quiero copiar el resultado. ¿Cómo puedo seleccionar y copiar texto en Powershell?

Al menos sé una forma de pegar un texto (o un comando) en Powershell: simplemente haz clic derecho en Powershell.


2
Es posible que desee mover respuestas no relacionadas con SharePoint al sitio más genérico de desbordamiento de pila. Aprecio que probablemente estés usando PowerShell en combinación con SharePoint, pero estas preguntas no pertenecen aquí.
Jeroen Ritmeijer

Estoy de acuerdo. No es una pregunta pura de Sharepoint.

Respuestas:


49

Simplemente seleccione el texto en la ventana de la consola y presione Intro o el botón derecho del mouse. Ese texto seleccionado termina en su portapapeles.

Tenga en cuenta que esto solo funcionará si el modo QuickEdit está habilitado para la ventana de la consola. Si no es así, habilítelo en las propiedades de la ventana de la consola (menú Sistema → Propiedades → Opciones) o ingrese al modo Marcar a través del menú Sistema → Editar → Marcar (Alt + Espacio, E, K en una ventana en inglés).


Usar la tecla Mayús para resaltar el texto (el texto se vuelve blanco) no funcionó para mí. Tuve que usar el mouse para resaltar el texto (el texto se vuelve naranja)
reggaeguitar

25

O envíe la salida de su comando directamente al portapapeles usando clip.exe. Por ejemplo,

Get-ChildItem C:\Test -recurse | Clip

¡una pipa con clip también es una buena alternativa! ¡Gracias!

77
Sin embargo, esto no funcionará con Unicode. En ese caso, puede usar Set-Clipboarddesde PSCX.
Joey

77
Hay una manera de clip.exemanejar Unicode correctamente: configure $OutputEncodingprimero la variable de PS en UTF-16 sin BOM, como sigue:$OutputEncoding = New-Object System.Text.UnicodeEncoding($false, $false)
mklement0

¡Este último truco es lo que buscaba venir aquí! Gracias
:)


2

Vaya a la barra de menú, arriba a la izquierda, Editar , Seleccionar todo , Copiar , pegar en el bloc de notas


1

He construido mi propia función fuera del portapapeles para esto.

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

Línea de comando de muestra:

Get-Process | Out-Clipboard

Espero que sea lo que estás buscando.


Su código no funciona en mi caja: New-Object: No se puede encontrar el tipo [System.Windows.Forms.TextBox]: asegúrese de que el ensamblado que contiene este tipo esté cargado. En la línea: 5 char: 25 + $ tb = New-Object <<<< System.Windows.Forms.TextBox + CategoryInfo: InvalidType: (:) [New-Object], PSArgumentException + FullyQualifiedErrorId: TypeNotFound, Microsoft.PowerShell.Commands .NewObjectCommand

1
Si visita pscx.codeplex.com , una de las funciones proporcionadas por las extensiones de la comunidad es fuera del portapapeles

1
¡Es muy impresionante, @CosmosKey! ¡Gracias por mencionar pscx.codeplex.com, @Winfred!
Anatoly Mironov

1

Set-Clipboardes un cmdlet estándar a partir de Powershell v5.0. En algunos casos, debe convertir los objetos en texto Out-Stringantes del resultado de la tubería al portapapeles:

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

0

Si desea copiar el último comando que escribió en el portapapeles, el siguiente comando es útil (especialmente para los comandos que abarcan varias líneas):

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

Si desea repetir el último comando y copiar su salida al portapapeles, use:

Invoke-History | Set-Clipboard

Advertencia: solo debe hacer esto para comandos económicos e idempotentes sin ningún efecto secundario.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.