Parfois, je veux copier une commande de Powershell pour coller dans un document ou je veux copier le résultat? Comment sélectionner et copier du texte dans Powershell?
Au moins, je sais comment coller un texte (ou une commande) dans Powershell: il suffit de cliquer avec le bouton droit de la souris sur Powershell.
Sélectionnez simplement le texte dans la fenêtre de la console et appuyez sur Entrée ou sur le bouton droit de la souris. Ce texte sélectionné se retrouve dans votre presse-papiers.
Notez que cela ne fonctionnera que si le mode QuickEdit est activé pour la fenêtre de la console. Si ce n'est pas le cas, activez-la dans les propriétés de la fenêtre de la console (menu Système → Propriétés → Options) ou passez en mode Marque via le menu Système → Modifier → Marquer (Alt + Espace, E, K sous Windows anglais).
Ou envoyez le résultat de votre commande directement dans le presse-papiers à l'aide de clip.exe. Par exemple,
Get-ChildItem C:\Test -recurse | Clip
Allez dans la barre de menus, en haut à gauche, Éditer , Sélectionnez Tout , Copier , coller dans le bloc-notes
Jetez un coup d'oeil à Envoyez du texte dans le presse-papier à une application telle que le Bloc-notes (C # ou Powershell) . Vous trouverez d'autres astuces. Cependant, la réponse de @Wictor est probablement la solution la plus simple.
Set-Clipboard
est une cmdlet standard à partir de Powershell v5.0. Dans certains cas, vous devriez convertir les objets en texte avec Out-String
avant de transférer le résultat dans le presse-papiers:
Get-ChildItem C:\Windows -recurse -depth 1 | Out-String -stream | Set-Clipboard
J'ai construit ma propre fonction hors-presse-papier pour cela.
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()
}
}
Exemple de ligne de commande:
Get-Process | Out-Clipboard
J'espère que c'est ce que vous cherchez.
Si vous souhaitez copier la dernière commande que vous avez saisie dans le presse-papiers, la commande suivante est utile (en particulier pour les commandes couvrant plusieurs lignes):
(Get-History -Count 1).CommandLine | Set-Clipboard
Si vous voulez répéter la dernière commande et copier sa sortie dans le presse-papier, utilisez:
Invoke-History | Set-Clipboard
Mise en garde: vous ne devriez le faire que pour des commandes peu coûteuses et idempotentes, sans aucun effet secondaire.