IExpress で VBScript や PowerShell スクリプトファイルを Exe ファイル化する

ふと VBScript や PowerShell って Exe 化できないのかなと思って調べたら、Windows 標準搭載の IExpress というツールで実現できることが分かった。

Win + R「ファイル名を指定して実行」から iexpress.exe を起動すると GUI のウィザードが起動する。英語だが読みながら指定していけば PowerShell や VBScript を起動するコマンドの入力欄が現れ、スクリプトファイルを内包した Exe を作れる。

さらに、この Exe ファイルを作るウィザードの内容を SED (Self Extraction Directive) というテキストファイル形式で出力できるので、

PS> iexpress.exe /N .\my-sed.SED

こんな風に PowerShell から叩いてやれば、その SED ファイルを利用して Exe ファイルをいきなり作成できる。スクリプトをバイナリとして配布するのに使えそうだ。

SED ファイルの中身はこんな感じ。

[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=2
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
TargetName=C:\PATH\TO\task-tray-app.exe
FriendlyName=task-tray-app
AppLaunched=powershell.exe -executionpolicy bypass -file task-tray-app.ps1
PostInstallCmd=<None>
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="task-tray-app.ps1"
[SourceFiles]
SourceFiles0=C:PATH\TO\
[SourceFiles0]
%FILE0%=

結構使い道ありそうなので何か良いモノが思い付いたらまた記事にしようと思う。