Powershellからコマンドをコピーしてドキュメントに貼り付けたい場合や、出力をコピーしたい場合がありますか。 Powershellでテキストを選択してコピーする方法
少なくとも私はテキスト(またはコマンド)をPowershellに貼り付ける方法を知っています。PowerShellを右クリックするだけです。
コンソールウィンドウでテキストを選択してEnterキーまたはマウスの右ボタンを押すだけです。選択したテキストはクリップボードに入ります。
これは、QuickEditモードがコンソールウィンドウで有効になっている場合にのみ機能することに注意してください。そうでない場合は、コンソールウィンドウのプロパティ(システムメニュー→プロパティ→オプション)で有効にするか、システムメニュー→編集→マーク(英語のWindowsではAlt + Space、E、K)でマークモードに入ります。
または、clip.exeを使用してコマンドの出力を直接クリップボードに送信します。例えば、
Get-ChildItem C:\Test -recurse | Clip
左上のメニューバーに移動します。編集、すべて選択、コピー、メモ帳に貼り付け
メモ帳(C#またはPowershell)のようなアプリケーションにクリップボードのテキストを送信する をご覧ください。もう少しヒントがあります。ただし、@ Wictorによる回答がおそらく最も簡単な解決策です。
Set-Clipboard
は、Powershell v5.0以降の標準のコマンドレットです。場合によっては、結果をクリップボードにパイプする前に、オブジェクトをOut-String
でテキストに変換する必要があります。
Get-ChildItem C:\Windows -recurse -depth 1 | Out-String -stream | Set-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
それがあなたが探しているものであることを願っています。
最後に入力したコマンドをクリップボードにコピーしたい場合は、次のコマンドが便利です(特に複数行にわたるコマンドの場合)。
(Get-History -Count 1).CommandLine | Set-Clipboard
最後のコマンドを繰り返してその出力をクリップボードにコピーしたい場合は、次のようにします。
Invoke-History | Set-Clipboard
警告:これは、副作用がなく、安価で冪等なコマンドに対してのみ行うべきです。