Многие системные администраторы закрывают все пути выноса важных данных из терминального сервера, оставляя, однако, открытым буфер обмена. Якобы, через него нельзя пронести бинарный файл, а можно – только текстовый.
И правда. Возьмём обычный запускаемый файл/архив базы 1с/вордовский документ с ценными данными , и откроем блокнотом. В нём присутствуют нечитабельные спецсимволы, которые не скопируются при переносе.
Что же делать? Ответ прост: нужно каким-то образом сконвертировать этот файл так, что бы были только читабельные символы. Такое преобразование существует. Его каждый раз делает почтовая программа, когда вы добавляете какой-нибудь файл аттачментом к письму. Данное преобразование называется Base64. Ниже приведу пример двух преобразований встренными средствами Windows:
Использование Outlook Express.
При установке Windows 2003 автоматически ставится Outlook Express. И, обычно, не удаляется. Этим можно воспользоваться.
Первым делом идём в C:\Program Files\ видим там папочку Outlook Express и радуемся.
Запускаем msimn.exe. При первом запуске появится окошко мастера. Она нам не нужно, отменяем.
Что бы запускаемый файл можно было перенести через письмо, его нужно переименовать или заархивировать.

Полученное письмо надо сохранить средствами оутлука в формате eml. После сохранения его надо открыть блокнотом. Внутри мы видим текст без спецсимволов, который прекрасно переносится через буфер обмена ![]()

Нв втором компьютере повторяется аналогичная операция, только наоборот. Единственная загвоздка – нужно хоть один раз запустить Outlook Express, что бы проассоциировать файлы с расширением EML с ним.
Волшебный скрипт.
Второй вариант – использовать VBScript. Большое количество примеров таких скриптов есть здесь – http://forum.script-coding.info/viewtopic.php?id=2848 . Большинство примеров используют сторонние библиотеки, но, есть и те, которые использвуют стандартные. На основе одного из таких примеров и был мною написаны пара простых скриптов:
bin2txt.vbs:
Option Explicit Dim objStream, readBytes, objXML, objDocElem DIM ArgObj, objFSO , objFile, strSourceFileName, strTargetFileName
Set ArgObj = WScript.Arguments
strSourceFileName = ArgObj(0) strTargetFileName = ArgObj(1)
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 1 ' TypeBinary
objStream.Open()
objStream.LoadFromFile(strSourceFileName)
readBytes = objStream.Read()
Set objXML = CreateObject("MSXml2.DOMDocument")
objXML.loadXML "<Base64Data />"
Set objDocElem = objXML.documentElement
objDocElem.dataType = "bin.base64"
objDocElem.nodeTypedValue = readBytes
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile(strTargetFileName, True)
objFile.WriteLine(objDocElem.text)
objFile.Close
txt2bin.vbs:
Option Explicit Dim objStream, writeBytes, objXML, objDocElem, textBase64 DIM ArgObj, objFSO , objFile, strSourceFileName, strTargetFileName
Set ArgObj = WScript.Arguments
strSourceFileName = ArgObj(0) strTargetFileName = ArgObj(1)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strSourceFileName, 1)
textBase64 = objFile.ReadAll
Set objXML = CreateObject("MSXml2.DOMDocument")
Set objDocElem = objXML.createElement("tmp")
objDocElem.DataType = "bin.base64"
objDocElem.text = textBase64
writeBytes = objDocElem.NodeTypedValue
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 1 ' TypeBinary
objStream.Open()
objStream.Write writeBytes
objStream.SaveToFile strTargetFileName , 2
Запускаются скрипты так:
cscript bin2txt.vbs <путь до исходного файла> <путь до выходного файла>
cscript txt2bin.vbs <путь до исходного файла> <путь до выходного файла>
bin2txt.vbs преобразует исходный файл в формат без спецсимволов, а txt2bin.vbs преобразует обратно.
Наверняка, способов существует больше. Если у Вас есть идеи или соображения на эту тему – прошу писать в комментарии.