最初に書いておくけど、凄く強引で面倒な方法なので全然実用的じゃない。ネットワーク経由で転送する方が確実だし楽なので、そちらをお勧めする。
さて、なんとなく想像はついていると思うけど、要はcertutilコマンドなどを使ってバイナリファイルをテキストファイルに変換して、その内容をクリップボード経由で転送するだけ。
バイナリファイル → テキストファイル → クリップボード経由で転送 → テキストファイル → バイナリファイル
- Windowsでファイルを16進数テキストに変換したり、16進数テキストをファイルに変換したりする方法
- Windowsでbase64エンコード・デコードする方法
- VMware ESXi 4.1のゲストOSとリモート・コンソール間のコピー・アンド・ペースト操作の有効化
注意すべき点はクリップボード経由で転送できるテキストの長さには制限があるみたいで、私の環境では1回に65436バイトまでしか送れなかった。
テキストファイルが大きくて1回で転送できないなら、60KBくらいで分割する必要がある。
Linuxにはsplitコマンドがあるので簡単だけど、Windowsには同じようなことができるコマンドは標準では入っていないので、メモ帳などで開いて適当に分割するしかないかも。
ということで、手順をまとめると下記になる。
- バイナリファイルのサイズを少しでも小さくするためにzipなどで圧縮
- certutilコマンドなどを使って圧縮ファイルをテキストファイルに変換
- テキストファイルが65436バイトより大きい場合は、小さくなるようにテキストファイルを分割(Linuxならsplitコマンドで60KB程度に分割)
- テキストファイルをテキストエディタで開いて内容をコピーし、ESXi上の仮想マシンでテキストエディタを開いて内容をペーストし保存
- 分割している場合はテキストファイルを結合
- certutilコマンドなどを使ってテキストファイルを圧縮ファイルに変換
- 圧縮ファイルを展開してバイナリファイルを取り出す
netcat(nc.exe)程度のサイズなら圧縮してテキストファイルに変換しても60KBに収まるので1回で転送できて楽だけど、1MB以上になると面倒でやりたくないね。