О том, как пользоваться буфером обмена, знает практически любой пользователь Windows. Однако далеко не все знают, что работать с буфером можно не только из графической оболочки, но и из командной строки. Для этого есть несколько разных способов.
Способ 1
Добраться до буфера обмена можно с помощью .Net класса Clipboard. Для того, чтобы этот класс стал доступен, сначала загрузим сборку:
Add-Type -AssemblyName PresentationCore
После чего выведем статические методы класса командой:
[Windows.Clipboard] | Get-Member -Static
Названия методов интуитивно понятны, например set — добавить в буфер, get — получить из буфера и т.п. Для примера поместим в буфер обмена текст:
[Windows.Clipboard]::SetText(″Hello″)
Затем считаем текст из буфера:
[Windows.Clipboard]::GetText()
И очистим буфер:
[Windows.Clipboard]::Clear()
Буфер может содержать не только текст, но и некоторые другие типы данных (изображения, аудио и списки файлов). В качестве примера добавим в буфер список файлов (filedroplist), а затем посмотрим результат:
$files = Get-ChildItem C:\files
[Windows.Clipboard]::SetFileDropList($files)
[Windows.Clipboard]::GetFileDropList()
При необходимости можно уточнить, какой именно тип данных содержится в буфере. Например добавим в него текст:
[Windows.Clipboard]::SetText(″Hello″)
И проверим, содержит ли буфер текстовые данные или список файлов:
[Windows.Clipboard]::ContainsText()
[Windows.Clipboard]::ContainsFileDropList()
Первая команда вернет True, вторая — False, т.е. в буфере находится именно текст.
Способ 2
В пятой версии PowerShell для работы с буфером обмена появились специальные командлеты Get-Clipboard и Set-Clipboard. Работать с ними гораздо проще и удобнее, например добавим в буфер текст и затем считаем его:
Set-Clipboard -Value ″Hello″
Get-Clipboard
Еще одна полезная фича новых командлетов — это возможность добавить данные в буфер, не затирая уже имеющиеся. Для добавления используется Set-Clipboard с ключом Append. Для примера добавим еще текст и затем проверим содержимое буфера:
Set-Clipboard -Value ″World″ -Append
Если в буфере находятся не простой текст, то при получении содержимого необходимо указывать тип данных. Например добавим в буфер список файлов и выведем его:
Set-Clipboard -Path C:\files\*
Get-Clipboard -Format FileDropList
Способ 3
Еще можно работать с буфером обмена через методы COM-объекта HtmlFile. Этот cпособ не самый прямой, но вполне рабочий. Для начала создаем новый объект:
$clipboard = New-Object -ComObject ″htmlfile″
Затем помещаем данные в переменную:
$data = ″Hello″
С помощью метода setData добавляем данные в буфер:
$clipboard.parentWindow.clipboardData.setData(″text″,$data)
А с помощью метода getData получаем его содержимое:
$clipboard.parentWindow.clipboardData.getData(″text″)
Способ 4
Ну и напоследок старая добрая утилита командной строки clip.exe. С ее помощью можно поместить данные в буфер, например передав их по конвейеру:
″Hello″ | clip
Получить обратно из буфера данные утилита не умеет, для этого придется воспользоваться одним из описанных выше методов.
0 Комментарии