使用 PS2EXE 将 PowerShell 脚本转换为 Windows 上的 EXE

对于非技术用户来说,将 PowerShell 脚本作为常规 Windows 应用程序运行通常比要求他们打开控制台并键入命令更实用。 PS2EXE 通过包装一个来解决这个问题.ps1脚本化为标准.exe可以像任何其他程序一样双击。


PS2EXE 做什么(以及不做什么)

PS2EXE 构建一个包含 PowerShell 脚本的 .NET 可执行文件,并在 EXE 运行时通过 PowerShell 引擎启动它。它简化了运行脚本并绕过执行策略检查,但它并没有消除计算机上对 PowerShell 的需要,也不能安全地隐藏您的代码。

由 PS2EXE 创建的编译 EXE 可以通过以下命令“反向提取”回其原始 PowerShell 代码:-extract选项,因此脚本中的明文机密仍然可读。将使用 PS2EXE 创建的 EXE 视为方便包装,而不是安全边界。


PS2EXE 作为 PowerShell 模块在 PowerShell Gallery 上分发,可以直接从 PowerShell 会话安装。

步骤一:使用管理权限打开 Windows PowerShell 或 PowerShell 7。右键单击 PowerShell 快捷方式并选择Run as administrator因此可以根据需要为您的系统或用户安装该模块。

步骤2:使用内置的 package 命令安装模块。

Install-Module ps2exe

如果系统提示您有关不受信任的存储库的信息,请键入Y并按Enter继续。然后,PowerShell 从库下载并安装 PS2EXE。


方法一:将PowerShell脚本转换为EXE(基本用法)

安装模块后,一个简单的命令即可编译.ps1文件到.exe。这是将脚本转变为可点击应用程序的最快方法。

步骤一:例如,将脚本放在文件夹中并记下其名称Calc.ps1。使用Get-ChildItem或文件资源管理器来验证文件是否存在。

步骤2:在 PowerShell 中,更改为保存脚本的文件夹,以便您可以轻松引用它。

Set-Location C:\Path\To\Your\Scripts

步骤3:使用您的脚本名称和所需的可执行文件名称运行 PS2EXE。选择一个不与现有 Windows 系统二进制文件冲突的唯一 EXE 名称。

ps2exe Calc.ps1 MyCalc.exe

第4步:确认 EXE 文件存在。您可以使用Get-ChildItem在 PowerShell 中或在文件资源管理器中查看以查看新的MyCalc.exe文件在同一目录中。

第5步:测试可执行文件。双击文件资源管理器中的 EXE 或从命令提示符运行它,以确保其行为与原始 PowerShell 脚本完全相同。


方法 2:创建没有控制台窗口的 GUI 样式 EXE

对于显示图形界面或应在后台安静运行的脚本,隐藏控制台窗口通常更好。 PS2EXE 包含一个将可执行文件编译为 GUI 应用程序的参数。

步骤一:验证您的脚本是否可以在没有交互式控制台提示的情况下运行。对于纯 GUI 工具,请确保所有用户交互都通过窗口、消息框或其他图形元素进行。

步骤2:使用以下命令编译脚本-noConsole参数,以便 EXE 运行时不会出现 PowerShell 控制台窗口。

ps2exe .\YourScript.ps1 .\YourScript.exe -noConsole

步骤3:双击生成的 EXE 来启动它。检查是否仅出现 GUI 或后台逻辑,屏幕上没有任何额外的控制台窗口闪烁。


Windows 在文件资源管理器中显示图标、描述、版本和版权等属性。 PS2EXE 可以将这些详细信息嵌入到已编译的 EXE 中,因此它看起来像常规应用程序而不是通用文件。

步骤一:准备一个图标文件.ico格式,例如Calc.ico,并将其放在与脚本相同的文件夹中。该文件将用作应用程序图标。

步骤2:使用额外参数运行 PS2EXE 以嵌入图标和元数据。使用与您希望应用程序在属性对话框中显示方式相匹配的值。

ps2exe Calc.ps1 MyCalc2.exe -IconFile "Calc.ico" -Title "Poseys Calculator" -Copyright "Copyright (C) 2024, All Rights Reserved" -Version "1.0"

步骤3:打开文件资源管理器,右键单击新的 EXE,然后选择Properties。上Details选项卡,验证说明、版本和版权字段是否显示您提供的值。

第4步:在同一属性对话框中,检查图标是否已更改。自定义图标应出现在资源管理器中的文件名旁边以及从 EXE 创建的任何快捷方式中。


方法 4:使用 PS2EXE GUI 前端 (win-ps2exe)

对于那些不想记住命令行参数的人,PS2EXE 还提供了一个名为win-ps2exe。它通过带有文本框和复选框的表单公开相同的选项。

步骤一:打开安装了 PS2EXE 模块的 PowerShell 会话。确保您可以运行ps2exe在尝试 GUI 之前命令没有错误。

步骤2:通过键入以下命令并按来启动 GUI 前端Enter.

win-ps2exe

步骤3:在打开的窗口中,使用浏览按钮填写源脚本、目标 EXE 路径和可选图标文件。这些字段对应于命令行上使用的相同参数。

第4步:通过可用的文本字段和复选框调整其他选项。您可以设置版本信息、产品名称,并选择是否请求管理权限或更改可执行文件的运行方式。

第5步:单击 GUI 中的编译按钮。该过程完成后,导航到目标路径并验证是否已创建工作 EXE。


PS2EXE 允许从已编译的 EXE 中提取嵌入的 PowerShell 脚本。这对于调试很有用,但它也说明了为什么在脚本中嵌入机密是不安全的。

步骤一:移动到包含您之前编译的可执行文件的文件夹,例如MyCalc.exe。使用命令提示符或 PowerShell 会话执行此步骤。

步骤2:使用以下命令运行 EXE-extract选项并指定新的 PowerShell 文件的名称来保存恢复的脚本。

MyCalc.exe -extract:CalcCode.ps1

步骤3:确认新的CalcCode.ps1文件存在于文件夹中。在文本编辑器中打开它或使用type在控制台中查看存储在 EXE 中的脚本内容。

第4步:查看提取的脚本中可能出现的任何凭据或敏感数据。如果存在密码或密钥,请计划将它们移动到更安全的存储方法,例如凭证管理器或安全配置机制,而不是将它们保留在脚本中。


安全和防病毒注意事项

PS2EXE 生成的可执行文件作为常规 Windows 程序运行,并且可以绕过 PowerShell 执行策略,因此需要像任何其他未签名的二进制文件一样谨慎处理它们。一些防病毒引擎还会标记使用 PS2EXE 构建的 EXE,因为恶意脚本过去已使用相同的工具打包。

步骤一:避免在 PowerShell 脚本中嵌入明文密码、API 密钥或其他机密。由于可以从 EXE 中提取代码,因此任何有权访问该文件的人都可以看到任何秘密。

步骤2:当出现误报时,请通过防病毒供应商的报告渠道进行处理。将无害的基于 PS2EXE 的程序作为误报提交有助于完善其检测规则并减少中断。

步骤3:仅从受信任的位置分发 EXE,并使用代码签名证书对其进行签名(如果您的环境支持)。代码签名可帮助用户和安全工具验证二进制文件是否来自预期的发布者。


PS2EXE 提供了一种将 PowerShell 脚本打包为 Windows 可执行文件的实用方法,无论您使用命令行还是 GUI 前端,并且围绕图标、元数据和安全性进行一些规划可以使生成的工具更易于交付和维护。