找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18318|回复: 10

[技术讨论] 将ps1编译成exe的模块

[复制链接]
发表于 2024-10-2 09:41:17 | 显示全部楼层 |阅读模式
刚发现一个模块, 可以把ps1转为exe而且生成的文件很小巧, 欢迎讨论

安装: Install-Module -Name ps12exe -Scope CurrentUser
用法: ps12exe a.ps1 a.exe

网址:
https://www.powershellgallery.com/packages/ps12exe
发表于 2024-10-3 05:06:44 | 显示全部楼层
exe能在不安装ps或没有ps情况下运行不?
 楼主| 发表于 2024-10-4 10:39:11 | 显示全部楼层
回复 2# Five66


    能吧, win10自带ps5.1
发表于 2024-10-4 23:15:58 | 显示全部楼层
啊,自带,那么如何吧自带ps的移除或者删掉,还能运行不?也就是说exe能否独立运行,不能的话也感觉也没啥意义,就跟弄成bat那样差不多,隔壁python和nodejs的弄成的exe,可以单独运行的(因为运行需要的东西基本上全塞进exe里了)
发表于 2024-10-5 23:37:39 | 显示全部楼层
回复 4# Five66

powershell本来就是基于.net的 而且语法也比较简单 还是比较好编译成msil的exe的吧
发表于 2024-10-6 21:54:01 | 显示全部楼层
回复 5# jyswjjgdwtdtj


    还是得依赖net,感觉除了一定程度上保护代码之外没啥用
 楼主| 发表于 2024-10-6 22:26:18 | 显示全部楼层
回复 6# Five66


    有点用, 至少可以直接执行了, 而且很小, 现在win10非常普及了, 即使需要powershell也内置了
发表于 2025-1-11 20:57:22 | 显示全部楼层
模块的作者放私货,在里面用中文写了极不友好的内容。

试试用管道的方法转exe
  1. $ps='test.ps1'
  2. $cs='test.cs'
  3. (
  4. @'
  5. using System;
  6. using System.Diagnostics;
  7. using System.IO;
  8. using System.Text;

  9. class StandardOutputExample
  10. {
  11.     public static void Main()
  12.     {
  13.         using (Process p = new Process())
  14.         {
  15.             byte[] psc = new byte[] {
  16. '@ +(([System.Text.Encoding]::UTF8.GetBytes((gc $ps) -join "`r`n")|%{'0x'+$_.tostring('X2')})-join',')+ @'
  17.             };
  18.             p.StartInfo.FileName = "powershell.exe";
  19.             p.StartInfo.UseShellExecute = false;
  20.             p.StartInfo.RedirectStandardOutput = true;
  21.             p.StartInfo.RedirectStandardInput = true;
  22.             p.Start();
  23.             StreamReader r = p.StandardOutput;
  24.             StreamWriter w = p.StandardInput;
  25.             w.WriteLine("cd "+AppDomain.CurrentDomain.BaseDirectory);
  26.             w.WriteLine(Encoding.UTF8.GetString(psc));
  27.             Console.WriteLine(r.ReadToEnd());
  28.             p.WaitForExit();
  29.             Console.ReadLine();
  30.         }
  31.     }
  32. }
  33. '@
  34. )|sc $cs
  35. C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe $cs
复制代码
 楼主| 发表于 2025-1-11 20:59:50 | 显示全部楼层
回复 8# idwma


    是吗? 有点好奇, 放了什么私货?
发表于 2025-1-11 21:08:20 | 显示全部楼层
本帖最后由 idwma 于 2025-1-11 21:20 编辑

回复 9# 小白龙

还是删了不吉利
发表于 2025-3-3 11:40:23 | 显示全部楼层
  1. 使用Invoke-PS2EXE工具将PowerShell脚本编译为EXE文件后,生成的EXE仍然依赖于系统中安装的PowerShell环境。

  2. 生成的EXE本质上是将脚本封装成一个可执行文件,运行时仍会调用系统上的powershell.exe来执行内部逻辑。因此,目标系统必须安装兼容版本的PowerShell(例如,脚本若使用PowerShell 5.1的语法,则系统需安装PowerShell 5.1或更高版本)。

  3. PS2EXE并未将PowerShell运行时静态打包进EXE,而是通过动态调用系统环境执行。因此,EXE文件体积较小,但无法完全脱离PowerShell环境独立运行。
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:05 , Processed in 0.012647 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表