Как вывести в буфер обмена - PullRequest
1 голос
/ 18 мая 2019

У меня есть просмотр списка GUI с 3 столбцами (FullRowSelect включен) С помощью кнопки «Копировать» я хочу скопировать 3 столбца каждой строки в буфер обмена, чтобы для каждой строки была новая строка.

Но что происходит, я получаю 3 столбца каждой строки, объединенные в одну строку.

Обратите внимание, что Write-Host просто помогает мне понять, что происходит, это часть неконсольного приложения с графическим интерфейсом в PowerShell

Я пытался передать вывод $ через Out-String | клип и другие, но всегда получают один и тот же результат, когда весь лот находится в одной строке. Я уверен, что это, вероятно, что-то очень простое! мои навыки PS просто базовые! Пожалуйста, может кто-нибудь направить меня в правильном направлении:)

Function Copy2ClipBoard {

    foreach ($line in $OutputlistView.SelectedItems) { 

        $allitems = ($line.SubItems[0].Text + " , " + $line.SubItems[1].Text + " , " + $line.SubItems[2].Text)
        $Output += $allitems
        Write-Host $allitems

    }
    Write-Host ""
    Write-Host $Output
    [System.Windows.Forms.Clipboard]::SetText($Output)
}

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Работает только в PowerShell 5.x, поскольку PowerShell 6 не предлагает этот командлет ...

Вы можете использовать командлет ´Set-Clipboard` .

Function Copy2ClipBoard {

# Clear the clipboard
Set-Clipboard
foreach ($line in $OutputlistView.SelectedItems) { 

    $allitems = ($line.SubItems[0].Text + " , " + $line.SubItems[1].Text + " , " + $line.SubItems[2].Text)
    $Output += $allitems
    Set-Clipboard -Value $allitems -Append
    Write-Host $allitems

}
Write-Host ""
Write-Host $Output
}

Вы можете проверить буфер обмена с помощью Get-Clipboard.

Надеюсь, это поможет.

0 голосов
/ 19 мая 2019

Ваша проблема не нравится с clip.

но всегда получается один и тот же результат, если весь лот находится в одной строке.

Это потому, что вы просто строите прогрессивно более длинную строку, а не массив, как вам кажется. Когда вы делаете $Output += $allitems, вы просто добавляете строку $allitems к $output с пробелом между ними. Решение Moerwalds обходит это, используя параметр -Append Set-Clipboard.

На самом деле вы можете просто справиться со своей входной строкой одним из нескольких способов. Простейшим будет добавление в клип, вы также можете использовать что-то вроде -join "`r`n"

$OutputlistView.SelectedItems | Foreach-Object{
    $_.SubItems[0].Text + " , " + $_.SubItems[1].Text + " , " + $_.SubItems[2].Text
} | clip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...