Преобразование PowerShell Get-Clipboard кита Хилла и Set-Clipboard в скрипт PSM1
5 ответов
TextBox не требует-STA переключатель.
function Get-ClipBoard {
Add-Type -AssemblyName System.Windows.Forms
$tb = New-Object System.Windows.Forms.TextBox
$tb.Multiline = $true
$tb.Paste()
$tb.Text
}
function Set-ClipBoard() {
Param(
[Parameter(ValueFromPipeline=$true)]
[string] $text
)
Add-Type -AssemblyName System.Windows.Forms
$tb = New-Object System.Windows.Forms.TextBox
$tb.Multiline = $true
$tb.Text = $text
$tb.SelectAll()
$tb.Copy()
}
смотрите нижнюю часть для кросс-издание, кросс-платформенный модуль, который находится буфер обмена текст поддержка в PowerShell Core и Windows PowerShell v2 - v4.
попытка суммировать положение дел и варианты по состоянию на Windows PowerShell v5.1 / PowerShell базовый В6.1.0:
Windows в PowerShell У5.0+ используйте встроенный
Get-Clipboard
иSet-Clipboard
командлетов.-
Windows PowerShell В4.0- (v1-v4.0): имеет нет встроенные командлеты для работы с буфером обмена, а есть решения:
- использовать Сообщество PowerShell Расширения (PSCX;http://pscx.codeplex.com/), которые поставляются с несколькими командлетами, связанными с буфером обмена, которые выходят за рамки просто обработки текста.
-
трубы стандартная утилита командной строки
clip.exe
(w2k3+ на стороне сервера, Vista + на стороне клиента)[1]:Примечание: Помимо вопросов кодирования, обсуждаемых ниже,
... | clip.exe
всегда добавляет пустую строку к входу; единственный способ избежать этого-использовать временный файл, содержимое которого осуществляется через cmd ' s<
перенаправление ввода - см.
Я только что написал в блоге, как это сделать:
http://www.nivot.org/2009/10/14/PowerShell20GettingAndSettingTextToAndFromTheClipboard.aspx
- Oisin
сначала проверьте хост. ISE уже запускает STA, поэтому нет необходимости раскручивать другой поток или оболочку (это оптимизация, которая находится в моем списке задач для PSCX). Для командной строки консоли, которая является MTA, я бы выложил двоичный код, как показывает Oisin, или использовал простое маленькое приложение c#, такое как:
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
class OutClipboard {
[STAThread]
static void Main() {
Clipboard.SetText(Console.In.ReadToEnd());
}
}
и для получения содержимого буфера обмена Vista и более поздние версии имеют клип.исполняемый.
Я не думаю, что даже расширенные функции 2.0 готовы пусть люди веселятся со своими собственными потоками .NET в скрипте.
взгляните на рецепт ли холма из Поваренной книги PowerShell:Set-Clipboard. Вы можете использовать at как Set-Clipboard.ps1 или просто поместите код внутри функции PowerShell (вот пример из моего профиля PowerShell).
скрипт позволит вам получить полный вывод в буфер обмена, например:
dir | Set-Clipboard
Я первоначально узнал о решении ли холма от ответ.