I have few powershell script in orders. Can I convert the powershell scripts into one exe file ? I need set up it to run in order. Example, once installing with first script, second script need be installed and followed by 3,4,5 scripts.
1 Answer
In the simplest case, you can use the following approach to merge your scripts into a single script that you can then package as an executable:
$scripts = 'script1.ps1', 'script2.ps1', 'script3.ps1'
(Get-Item $scripts | ForEach-Object {
"& {{`n{0}`n}}" -f (Get-Content -Raw $_.FullName)
}) -join "`n`n" > 'combined.ps1'
Note that this is a simplistic, but extensible approach: As written, there is no support for parameters, and no error handling: the respective contents of the original scripts are simply executed (&) in sequence, as script blocks ({ ... }).
You can compile the combined script, combined.ps1 to an executable, say, combined.exe, as follows, using the PS2EXE-GUI project's ps2exe.ps1 script (an updated and more fully featured version of the popular original, but obsolescent PS2EXE project).
# Create a PSv2-compatible executable.
# Omit -runtime20 to create an executable for the same PowerShell version
# that runs the script.
ps2exe -inputFile combined.ps1 -outputFile combined.exe -runtime20
Caveat: Generally, running the resulting executable requires the executing machine to have PowerShell installed, but due to targeting -runtime20 - in an effort to be v2-compatible - the .NET Framework 2.0 CLR must also be installed (note that it also comes with .NET Framework 3.5), which is no longer true by default in recent versions of Windows.