从PowerShell脚本创建可执行的.exe文件?

时间:2010-09-21 10:37:26

标签: powershell executable

是否可以从PowerShell脚本创建可执行的file.exe文件?

8 个答案:

答案 0 :(得分:19)

没有。至少,还没有,在5个版本的PowerShell之后,它似乎不太可能。

我希望我可以放弃它,但其他人提供了一系列“解决方法”类型的答案我觉得有必要解决:

可以将.ps1脚本包装在另一种脚本类型中以使其可双击,您甚至可以生成嵌入了脚本的可执行文件(请参阅此主题中的其他答案)。但是那些“可执行文件”要求正确的PowerShell版本已经存在于系统中,所以你没有通过这样做获得任何东西,并且你失去了PowerShell的许多功能(如流对象输出,帮助文档以及用户选项卡完成的自动参数处理。)

这是一个简单的.cmd批处理文件包装器(您可以扩展它以允许参数):

REM <#
copy %0 %0.ps1
PowerShell.exe -ExecutionPolicy Unrestricted -NoProfile -Command "&{Set-Alias REM Write-Host; .\%0.ps1}"
del %0.ps1
exit
REM #>

### Your PowerShell script goes below here.
### I've put a couple of lines as an example ...
ls | sort length -desc | select -first 5 | ft
ps | sort ws -desc | select -first 10 | ft

我知道......

使用 Portable PowerShell ,可能会打包一种包含正确版本的PowerShell和脚本的自解压zip,并且可以正常工作。这是在任何正常意义上的可执行文件 - 这有点像Valve是否已经决定只将拇指驱动器上的vmware图像作为让Linux用户玩半条命的解决方案。但是,该产品似乎已被抛弃。

使用 PrimalScript (或 PowerShell Studio )或 PowerGui pShellExec ,您的脚本可以加密,因此它有点防止窥探...但这基本上只是混淆,基本上没有批处理文件,在某些方面更糟糕。

答案 1 :(得分:8)

开箱即用 - 没有。但是我已经构建了一个PowerShell脚本,可以获取脚本并在其周围创建一个EXE包装器。我不久前创建了这个脚本,但决定blog it here让人们查看。

答案 2 :(得分:7)

是的,PS2EXE有一个选项可用于创建此类*.exe文件。

用法

尽管如此,整个过程非常简单并且很好地解释了 这是它的片段:

C:\Scripts\PS2EXE\PS2EXE_0.5.0.0.0\ps2exe.ps1 
    -inputFile  C:\Scripts\ExampleEXE\example.ps1 
    -outputFile C:\Scripts\ExampleEXE\example.exe -sta -noConsole -runtime40 -verbose -x64

唯一不好的是该项目已折旧。自2015年以来没有更新或新版本。

编辑: 这个预测已被提升,现在由一个新人维持。您可以在此处找到更新后的代码,上次更新时间为01/04/2018。 https://gallery.technet.microsoft.com/scriptcenter/PS2EXE-GUI-Convert-e7cb69d5

版本信息

要添加和编辑版本信息,请使用VERPATCH

更新2019年

喊出一个名为PythonEXE的git-repo。

它演示了如何从Python项目创建可执行文件,还提供了YouTube循序渐进指南。

答案 3 :(得分:6)

使用PowerGUI's Script Editor(它是免费的并且有效)。在PowerGUI脚本编辑器中打开脚本&gt;工具&gt;编译脚本&gt;选择您想要的.exe选项(密码保护源代码,在.exe运行后自动关闭控制台等)。

答案 4 :(得分:3)

我将您的问题理解为&#34;我的PowerShell脚本可以生成可执行文件吗?&#34;这就是我发现这篇文章时我想要做的事情。这可以使用Add-Type命令。

Add-Type -TypeDefinition @"
    using System;
    class Program {
        public static void Main(string[] args) { 
            Console.WriteLine("Hello World!");
        }
    }
"@ -CompilerParameters @{
    "GenerateExecutable" = $true
    "OutputAssembly" = "test2.exe"
}

答案 5 :(得分:2)

来自PrimalScript

Sapien将从PowerShell脚本生成一个exe。运行可执行文件的机器必须安装PowerShell。

答案 6 :(得分:2)

我发现最好将exehell脚本作为exe分发的解决方案是将其包装在NSIS可执行文件中。

我写了一个像这样的.nsi脚本:

Name "Maintenance task"
OutFile "maintenance.exe"
ShowInstDetails show

Section "Main"
  ;Executes the "script-to-run.ps1" PowerShell script
  InitPluginsDir
  SetOutPath "$pluginsdir\MyOrg" ;It is better to put stuff in $pluginsdir, $temp is shared
  ;extract the .ps1 and run it, collecting output into details.
  File script-to-run.ps1
  nsExec::ExecToLog 'powershell  -inputformat none -ExecutionPolicy RemoteSigned -File "$pluginsdir\MyOrg\script-to-run.ps1"  '
  SetOutPath $exedir
SectionEnd

我只需要使用NSIS工具链将脚本编译为exe,它将在任何具有PowerShell的操作系统上运行,无论执行策略是什么。

这是受到这个问题的启发How to call PowerShell in NSIS

答案 7 :(得分:0)

有一个名为Portable PowerShell的项目,在几年后仍处于测试阶段......可能值得根据您的需求进行测试。

http://shelltools.wik.is/Portable_PowerShell