將 PS1 轉換為 EXE 的實質指南(7 種方法)

你可以以許多不同的方式調用 PowerShell 腳本,但它們都有一個缺點,就是不能像標準的 Windows 程式(EXE)一樣直接運行。也許你想防止在腳本中編輯代碼,或者讓用戶更容易地運行腳本。現在是時候學習如何將 PS1 轉換為 EXE 了。

在本教程中,您將學習如何使用 PS1 到 EXE 轉換工具,並且您還將有機會對它們進行比較,以便決定哪一個最適合您的偏好。

需求

本教程中演示了不同的工具,並提供了逐步的指導,以便將 PS1 轉換為 EXE。確保您擁有以下所有要求,以便跟隨操作。

  • A Windows computer with an administrator privileges
  • 從 Windows 7、8.1 和 10 開始,PowerShell 已經包含在安裝操作系統時。雖然一些腳本可以在 PowerShell 3.0 中運行,但最好使用 PowerShell 5.1PowerShell 7
  • 您的 PowerShell 執行策略 設置為允許腳本執行

PS2EXE

PS2EXE 實用工具是我們清單上的第一個工具。PS2EXE 是一個免費、開源的 PowerShell 模組,根據作者 Ingo Karstein 的說法,“不會將 PowerShell 腳本轉換為其他語言。它使用輕量級的以 C# 撰寫的 PowerShell 主機封裝腳本,並將動態生成的 C# 源代碼編譯到內存中,生成一個 EXE 文件。”

訪問 Ingo Karstein 的 部落格 了解有關 PS2EXE 起源的更多信息。該模組的開發在2017年左右停滯,但 Markus Scholtes 接管了 PS2EXE 的演進,並創建了一個 GUI 版本。

安裝 PS2EXE 模組

PS2EXE 最初是一個 PowerShell 腳本,當 Markus Scholtes 接管開發時,推出了一個模組。由於 PS2EXE 使用該模組將您的腳本轉換為可執行文件,您需要從 PowerShell Gallery 安裝它。

按照以下說明安裝 PS2EXE 模組。

  1. 以管理員身份打開 PowerShell 控制台。

2. 運行 Install-Module 命令從 PowerShell Gallery 下載並安裝模組

Install-Module ps2exe

3. 當看到有關不受信任存儲庫的提示時,輸入 Y 並按 Enter。別擔心,這條消息是無害的。

Untrusted repository
 You are installing the modules from an untrusted repository. If you trust this repository, change
 its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to
 install the modules from 'PSGallery'?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y

通過命令行將 PS1 轉換為 EXE

PS2EXE 提供兩種將 PowerShell 腳本轉換為 EXE 的方法:命令行和 GUI。首先,我們來看看如何使用命令行。

通過命令行將單個 PowerShell 腳本轉換為 EXE 需要一條命令,提供主要的 PS2EXE 命令 (Invoke-PS2EXE),然後是要轉換的腳本路徑和要創建的 EXE 的路徑。

## 使用完整命令名稱
Invoke-ps2exe .\source.ps1 .\target.exe

## 使用別名
ps2exe .\source.ps1 .\target.exe

現在你可以運行 target.exe,它將調用在 source.ps1 腳本中定義的代碼。如果在轉換腳本時未使用 NoConsole 參數,運行 target.exe 時將出現 PowerShell 控制台。

隱藏控制台

在前面的例子中,運行 target.exe 時會出現典型的 PowerShell 控制台。大多數情況下,你不想看到這個。為了防止這種情況,創建 EXE 時可以使用 NoConsole 參數,如下所示。

Invoke-ps2exe "D:\Test\Get-LatestAppLog.ps1" "D:\Test\Get-LatestAppLog.exe" -noConsole
Converting PS1 to EXE with PS2EXE Command-Line

你還可以選擇僅編譯 EXE 以適用於 x86 或 x64 運行時等。你可以在 GitHub 發布頁面找到可用參數的列表。

將PS1通過PS2EXE-GUI工具轉換為EXE

如果你不喜歡命令行,也可以使用PS2EXE模塊的GUI。 GUI版本稍晚建立,提供了幾乎與命令行版本相同的功能。

使用PS2EXE的GUI版本只需點擊幾下即可將PS1轉換為EXE。 而且,與命令行不同,你可以從一個漂亮的文件瀏覽器對話框中瀏覽並選擇源文件(PS1)

運行GUI版本,你需要在計算機上安裝.NET 4.x。 如果你只有.NET 3.5x,你可以單獨下載PS2EXE-GUI for .NET 3.5x版本

假設你已經安裝了上面提到的PS2EXE PowerShell模塊,打開文件瀏覽器,然後導航到以下任一PS2EXE模塊文件夾,打開代表模塊版本的文件夾。

Windows 32位:C:\Program Files (x86)\WindowsPowerShell\Modules\ps2exe\<version>

Windows 64位:C:\Program Files\WindowsPowerShell\Modules\ps2exe\<version>

在這些文件夾內,你會找到一個名為Win-PS2EXE.exe的文件。

  1. 打開C:\Program Files\WindowsPowerShell\Modules\ps2exe\<version>\Win-PS2EXE.exe實用程序。

2. 點擊源文件框右側的省略號,定位要轉換的PS1腳本。

3. 為目標文件定義值,並確保包含.exe文件擴展名。

4. 選擇任何自定義轉換選項如下。這只是您的腳本可以使用的

GUI 表示,就像命令行版本的參數一樣。

Converting PS1 to EXE with PS2EXE GUI

5. 单击編譯以開始轉換過程。6. 當您單擊編譯按鈕時,PS2EXE 將打開 PowerShell 會話並執行轉換。完成後,按Enter或關閉控制台窗口。

Successfully Converted PS1 to EXE

FYI:使用 PS2EXE 編譯的一些可執行文件可能會被您的防病毒軟件檢測為病毒。如果發生這種情況,請務必向您的防病毒供應商報告這些虛假陽性。

PS1 到 EXE

PS1 到 EXE 是由 F2KO Software 開發的另一個免費桌面應用程序,它使您能夠將 PS1 轉換為 EXE 文件。與 PS2EXE 不同,Ps1 到 Exe 是一個具有簡單腳本編輯器的 GUI 工具。

就像 PS2EXE 一樣,Ps1 到 Exe 也有 GUI 和命令行版本。但是,與 PowerShell 控制台不同,Ps1 到 Exe 要求您在命令提示符中運行命令。

不幸的是,儘管F2KO 的網站仍然存在,但似乎無法從那裡下載 PS1 到 EXE。幸運的是,這個工具的可下載安裝程序已在互聯網上傳播。

讓我們看看如何運行並使用 PS1 到 EXE 來從 PowerShell 腳本創建 EXE。

使用 GUI 轉換 PS1 到 EXE

安裝並啟動 Ps1 to Exe 後,您會注意到 PS1 to EXE 具有一個簡單的腳本編輯器。在這個腳本編輯器中,您可以構建和保存腳本,並點擊按鈕將它們轉換。

Ps1 to Exe 支持點源; 請注意下面的命令行如何調用另一個 PS1 文件。

## 調用 AppLogsComplete.ps1
try { .\AppLogsComplete.ps1 } catch { exit }

要使用 PS1 to EXE 將腳本轉換為 EXE:

  1. 從您的桌面打開 PS1 to EXE 工具。

2. 點擊 文件 —> 打開,找到您想要轉換的腳本並打開它。

一旦您打開了腳本,請配置您希望編譯的 EXE 運行方式。在屏幕的右側,您會看到一個面板,上面有三個選項卡供您探索。每個選項卡都有不同的配置選項供您選擇。

Configuring The EXE Output Settings

3. 要添加依賴腳本,請點擊 嵌入 選項卡,然後點擊 添加

4. 確定轉換選項後,點擊頂部工具欄上的 轉換 按鈕將腳本轉換為 EXE。

Adding Dependent Scripts And Converting Script to EXE

使用命令行轉換 PS1 為 EXE

如果您更喜歡使用命令行,PS1 to EXE CLI 名為 ps1_to_exe.exe 但要使用它有點棘手。

打開 PS1 to EXE:

  1. 以管理員身份打開 命令提示符

2. 將工作目錄更改為 PS1 to EXE 的安裝文件夾。

x86
 cd 'C:\Program Files (x86)\Ps1 to Exe'
 x64
 cd 'C:\Program Files\Ps1 to Exe'

3. 現在運行 ps1_to_exe 將 PS1 轉換為可執行文件。

以下命令還包含在編譯後的 EXE 檔案中的相依性腳本,並將可執行檔的目標平台設置為 64 位元的 Windows 作業系統。

ps1_to_exe /ps1 "D:\Test\Get-LatestAppLog4.ps1" /exe "D:\Test\Get-LatestAppLogs.exe" /include "D:\Test\AppLogsComplete.ps1" /invisible /x64

以下是實際轉換過程和輸出細節的示範。

Converting Script to Executable Using Ps1 to Exe Command-Line Version

IExpress 2.0

如果您不想下載另一個工具,那您很幸運,因為您可以使用老式的 IExpress 實用工具。IExpress 是內置於 Windows 中的應用程式,通常用於打包文件或創建軟體安裝程式。

恰巧的是,IExpress 還可以將 PS1 轉換為 EXE,同時將相依性文件一併編譯到單個可執行文件中!

要將簡單的 PowerShell 腳本轉換為 EXE:

  1. 您必須以系統管理員身份打開 IExpress。按下 Windows*+R*鍵以打開 執行 對話方塊,輸入 iexpress 然後按下 Ctrl+Shift+Enter 鍵。
Running IExpress As Administrator

2. 在 IExpress 的歡迎頁面上,選擇 建立新的自我解壓縮指令檔,然後點擊 下一步 以配置您的封裝。自我解壓縮指令 (SED) 檔案控制建立安裝封裝時使用的選項;可以將其視為配置文件。

Create New Self Extraction Directive File

3. 選擇提取文件並運行安裝命令選項,然後點擊下一步。 如果您正在創建軟件安裝程序,此選項會提取您將包含在包中的文件。 此選項還允許您編寫自定義命令,在運行可執行文件時執行該腳本。

Selecting An Action To Take When Running The EXE

4. 現在提供包標題,然後點擊下一步。 包標題將出現在用戶在安裝期間看到的所有提示上。

包標題僅適用於您創建軟件安裝程序的情況。 在這種情況下,標題並不重要。

Setting A Title For The Package

6. 接下來,選擇無提示。 選擇無提示時,運行EXE時不會提示用戶不必要的對話框。

No Prompt

6. 如果您為需要最終用戶許可協議(EULA)的項目創建軟件包,您可以選擇添加許可證以在運行EXE時顯示。 不過,為了這次示範,請選擇不顯示許可證選項,然後點擊下一步。

Adding an End User License Agreement

7. 現在點擊添加並瀏覽您想包含在此EXE中的所有腳本。 請務必包括您打算調用的主腳本以及腳本引用的任何依賴腳本和其他文件。

Selecting Files To Include In The Package

8. 在啟動安裝程序窗口上,使用文件參數提供powershell.exe引擎的路徑。 同時,確保您將執行策略參數設置為Bypass,以確保任何預配置的執行策略不會阻止腳本執行。

powershell.exe -ExecutionPolicy Bypass -File Get-LatestAppLog.ps1
Writing Custom Command

9. 接下來,您可以定義當執行時 EXE 窗口應該如何行為。如果 EXE 應該在背景中運行,請選擇 隱藏 並點擊 下一步隱藏 是最常見的窗口行為。

Selecting EXE’s Window Behavior On Execution

10. 由於您只是在後台運行一個 EXE,因此不需要包含一個 完成消息。選擇 無消息 並點擊 下一步

Setting Up Post Installation Message

11. 現在選擇要創建的 EXE 的路徑。在這裡,您還可以啟用一些不同的選項。完成後,點擊 下一步

  • 隱藏文件提取進度動畫從用戶端 – 如果您的 EXE 在後台運行,請保持此選項禁用。
  • 在套件內使用長文件名存儲文件 – 在運行 EXE 時支持長文件名的提取過程中,應該將此選項保持禁用。如果您將在 Win 95 上運行套件並且在安裝過程中將使用 INF 文件,則應將該選項保持禁用。
Setting Up Target Path And File Name

12. 如果您希望在腳本完成後執行重啟,則在此處可以選擇 始終重啟。選擇選項後,點擊 下一步

Choosing Whether To Require A Restart Or Not

13. 現在選擇 保存自解壓縮指令(SED)文件 並點擊 下一步。保存 SED 文件可以讓您稍後在此精靈中修改您提供的任何選項。SED 文件包含到目前為止提供的所有值的答案。

Saving Information About The Package Configuration

14. 現在剩下的就是編譯包了。點擊下一步,你會看到一個過程日誌。要完成創建包,點擊完成,一切就緒。

需要以管理員身份運行的權限

如果你有一個腳本需要以管理員身份運行,IExpress並不提供這樣的選項,但這仍然是可能的。

在運行IExpress之前,複製下面的代碼並將其粘貼在你的腳本頂部。這段代碼片段用於檢查腳本是否以管理員身份運行。如果不是,它將自動關閉並以管理員權限重新運行腳本。

記住,你需要根據你想在運行時如何顯示或隱藏EXE窗口,更改顯示窗口屏幕上的WindowStyle**參數。

param([switch]$Elevated)

function Test-Admin {
    $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
    $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
## 測試腳本是否以管理員身份運行,如果不是,再次以管理員身份運行它
if ((Test-Admin) -eq $false){ 
    if ($elevated) {
    } else {
        try{
            Start-Process powershell.exe -WindowStyle Hidden -Verb RunAs -ArgumentList ('-noprofile -file "{0}" -elevated' -f ($MyInvocation.MyCommand.Definition))
            ## 窗口樣式:正常,最小化,最大化和隱藏

						## ------> 你的腳本其餘部分放在這裡 <------ ##

        }
        catch{
            exit
        }
    }
    exit
}

ISE Steroids

如果你喜歡在PowerShell ISE中編寫腳本,這個工具適合你的風格。ISE Steroids是一個擴展到PowerShell ISE編輯器的PowerShell模塊,增加了許多ISE功能。

ISE Steroids有很多功能,但你在这里的目的是将脚本转换为EXE,所以让我们开始吧。

  1. 假设你已经安装了ISE Steroids,打开PowerShell ISE。

2. 在集成控制台中运行Start-Steroids来运行扩展并加载Steroids。

3. 在编辑窗口中打开或编写一个新的脚本。本教程将使用这些文件

4. 点击工具菜单下的Turn Code into EXE选项,如下面的截图所示。

Compiling PS1 to EXE

5. 现在在小窗口中定义你想要应用于生成的EXE的所有选项,就像下面的窗口一样。这些选项是参数,与PS2EXE的参数相同,用于配置EXE文件的属性和行为。

Configuration For The Executable File

6. 一旦你设置好了所有选项,点击Create Application按钮。ISE Steroids会要求你选择一个目标路径。完成后,你就完成了将PS1转换为EXE的过程。

Visual Studio Code和PowerShell Pro Tools

对于我们的下一个编辑器,我们为您带来Visual Studio(VS)Code。VS Code是微软推荐的PowerShell ISE的替代品,并得到了许多PowerShell开发人员的支持。

儘管 VS Code 沒有本地將 PowerShell 腳本轉換為 EXE 的方法,但您仍可以使用 PowerShell Pro Tools 擴展實現這一目標。除了將腳本轉換為 EXE 外,PowerShell Pro Tools 擴展還幫助您打包腳本,包括 GUI 設計等功能。

PowerShell Pro Tools 需要 .NET 4.6.2(或更高版本)開發人員包.NET Core 1.0 或更高版本以進行腳本打包。

您正在使用 Get-LatestAppLog3.ps1AppLogsComplete.ps1 進行演示。

假設您已安裝了 VS Code 和 PowerShell Pro Tools 擴展:

  1. 在 VS Code 中打開一個 PowerShell 腳本,將其轉換為 EXE。

2. 在 VS Code 的右上角,點擊 將腳本打包為 EXE 按鈕,如下所示。

Compiling PowerShell Script To An EXE

3. 當您首次從腳本創建EXE時,PowerShell Pro Tools會在當前工作區的根目錄中創建一個package.psd1文件。

Showing Workspace Root and PowerShell Data File (PSD1)

4. 在package.psd1文件內,腳本的確切路徑將自動填充到Root鍵中。定義Output Path鍵以指定保存EXE的路徑,如下所示。

Setting up Root and Output Path

5. 當您從腳本創建EXE時,您會在屏幕底部的輸出窗格中看到各種日誌消息。如果編譯腳本時出現任何錯誤,您將在此處看到它們的顯示。

Logs Shown In The Output Pane

編譯相同EXE中的其他腳本

如果您的主腳本中有依賴腳本,PowerShell Pro Tools擴展程序也可以處理它們。為此,PowerShell Pro Tools要求您將希望與EXE一起包含的任何腳本dot-source。

下面的Get-LatestAppLog3.ps1腳本是要編譯的主腳本。在其中,它運行AppLogsComplete.ps1腳本。為了確保PowerShell Pro Tools包含相關的AppLogsComplete.ps1文件,您必須dot source該腳本或將其引入到當前腳本的範圍內。

. "$PSScriptRoot\AppLogsComplete.ps1"
Using Dot-Sourcing To Call Another PS1 Inside The Main Script

一旦您已經將所有依賴腳本點來源化,再次點擊將腳本打包為執行檔即可開始將您的腳本轉換為可執行文件。

PowerGUI

PowerGUI是最初的PowerShell腳本編輯器之一。儘管它似乎已被人遺忘,但您仍然可以在網上找到副本。為什麼要提及一個被人遺忘的PowerShell腳本編輯器呢?因為它內置了PS1到EXE的轉換器!

儘管PowerGUI的網站不再存在,但您仍然可以在網上找到像Softpedia這樣的網站上的副本

編譯PS1腳本為EXE

安裝完PowerGUI後,啟動它,您將看到一個啟動頁面。要開始編譯您的腳本,您可以從工具欄中創建一個新腳本,或者打開一個現有的腳本,如下面的截圖所示。

Create a New Script or Open an Existing One

一旦您滿意您的腳本,請點擊工具菜單。然後選擇編譯腳本或按鍵盤上的Ctrl+F9

Initiate Compiling Script to EXE

現在,配置您希望在轉換後運行EXE的方式。正如下面顯示的編譯腳本窗口所示,您可以選擇EXE的行為的不同選項。

  1. 點擊瀏覽按鈕並找到您要轉換的PS1。

2. PowerGUI支持從Microsoft .NET Framework 3.5.NET Framework 4.0的目標框架。

3. 如果您只想讓EXE在後台運行,請禁用腳本執行時顯示PowerShell控制台窗口選項。

4. 如果您有其他文件需要包含,也可以點擊依賴項按鈕(左下角)。通常是您的腳本依賴的其他PowerShell腳本。

5. 配置完成後,點擊確定開始將您的PS1轉換為EXE。

Configuring Compiled EXE Behavior

另外,您會注意到PowerGUI在控制EXE運行方式方面存在一個缺點。PowerGUI並不提供太多選項,比如添加參數。

此外,與其他PS1到EXE生成器不同,PowerGUI也不提供嵌入版權、版本和描述等信息的選項。但如果這並不太困擾您,那麼PowerGUI是一個不錯的選擇。

PowerShell Studio

最後,讓我們以功能最豐富的PowerShell集成開發環境之一Sapien Technologies的PowerShell Studio作為PS1到EXE轉換器列表的結尾。從頭開始作為一個專門的PowerShell集成開發環境,僅展示其將PS1轉換為EXE的能力是對PowerShell Studio的一種侮辱。然而,我們的空間有限!

就像Visual Studio Code中的PowerShell Pro Tools一样,PowerShell Studio对于打包脚本也有严格的要求;例如.NET Framework 4.8用于PowerShell 7的.NET 5Visual Studio 2015-2019 Runtime

假设您已安装了PowerShell Studio,请打开PowerShell Studio并创建或打开现有的PowerShell脚本。本教程将使用Get-LatestAppLog3.ps1脚本。

导航设置

在将脚本转换为PowerShell Studio之前,您应首先了解可以更改生成EXE行为的众多方法。

单击窗口右上角的Package按钮,然后选择Settings。这将打开脚本打包器窗口,您可以在其中定义所有可用选项。

Packaging Script To An Executable File

脚本打包器中的每个选项都对您想要生成的EXE文件的输出方式起重要作用。这些选项在以下部分中以截图形式进行演示。

脚本引擎

脚本引擎部分关注目标平台和用于编译可执行文件的脚本引擎。

從選擇您的目標開始。您可以選擇32位或64位版本的Windows,或者可以選擇兩者以增加彈性。PowerShell Studio將為您選擇的每個平台創建一個EXE文件。

Setting up Target Platform And PowerShell Scrip Engine

輸出設置

此部分有選項來配置編譯後的EXE文件的結果。

  • 輸出文件– 編譯後的EXE文件的名稱。

請不要包含文件擴展名(.exe),因為它將自動為您設置該字段。

  • 輸出文件夾– PowerShell Studio將保存可執行文件的位置。
  • 解析並包含外部腳本– 如果您的主腳本中有依賴腳本,請務必勾選此選項。如果不啟用此選項,編譯可執行文件時將忽略外部腳本。

始終確保所有依賴腳本與主腳本位於同一文件夾中。

  • 簽名– 可以在此處搜索一個證書來簽署EXE文件,並提供證書的密碼(如果有的話)。
Managing The Output Settings For The Executable File

圖標文件

圖標可幫助您區分應用程序,圖標文件部分為可執行文件添加圖標的選項。

要添加圖標文件,請點擊“添加文件”按鈕或直接將圖標文件拖放到圖標文件部分。

Add Icon Files

限制

限制部分,您可以包含或排除标准以允许EXE执行。

在此字段中检查一个操作系统将确保生成的EXE仅在该操作系统上执行。同样,您可以定义诸如必须登录特定用户、计算机必须具有特定MAC地址等标准。

正如您下面所见,您可以完全控制生成的EXE何时执行。

Adding Security Via Execution Restrictions

版本信息

当PowerShell Studio创建EXE时,该EXE具有各种文件属性。在版本信息部分,您可以定义这些属性的外观。

在这里,您可以设置文件版本、产品版本、版权等属性。您可以在下面看到所有可用的属性。

Setting File Version Information

构建选项

最后,您将找到构建选项部分。在此部分,您可以添加自定义的预构建或后构建命令以执行。此选项将在将脚本编译为可执行文件之前或之后执行PowerShell命令。

假设您希望在PowerShell Studio完成创建EXE后运行一些代码。要执行此操作,请单击新建(插入)按钮在后构建命令框中。预构建和后构建命令均可直接接受PowerShell命令。

或者,您可以单击添加文件(省略号)按钮并选择另一个应用程序或PowerShell脚本来运行。

Adding Pre-Build or Post-Build Custom Commands To Execute

設置完成後,點擊確定將腳本打包為可執行文件。文件的位置將自動打開供您檢查可執行文件。

考慮外部 PowerShell 腳本依賴性

A PowerShell script sometimes isn’t a self-contained unit. A script can also call other scripts. When converting to an EXE, some of the tools discussed here do not automatically find these dependent scripts and compile them.

當一個腳本包含對另一個腳本的引用,並且該腳本被轉換為 EXE 時,路徑可能會更改。當這種情況發生時,EXE 內部的 PowerShell 代碼無法找到相關的腳本,並且會失敗。

也許您有一個希望轉換的腳本,該腳本調用同一文件夾中的其他腳本。當您通過 PowerShell 控制台運行腳本時,它可以找到這些腳本,因為它們都在同一個工作目錄中。但是,當您將腳本轉換為 EXE 時,這可能會失敗。

如果您打算將 PS1 轉換為 EXE,並且該腳本調用同一目錄中的其他腳本,請將以下代碼片段添加到腳本的頂部。

以下代碼片段解析了從主腳本運行的外部腳本的路徑,只要它們都在同一個目錄中。

if ($MyInvocation.MyCommand.CommandType -eq "ExternalScript")
 { $ScriptPath = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition }
 else
 { $ScriptPath = Split-Path -Parent -Path ([Environment]::GetCommandLineArgs()[0]) 
     if (!$ScriptPath){ $ScriptPath = "." } }

功能比較

如果您仍然沒有決定如何從 PowerShell 腳本創建 EXE,請查看下表。此表提供了每個工具的功能的概觀,以幫助您決定哪個工具是您 PS1 轉 EXE 轉換器的首選。

Features Comparison

Source:
https://adamtheautomator.com/ps1-to-exe/