Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python/Powershell combo - make pwsh load even faster

My main programming is done within Python, and want to invoke custom Powershell cmdlets I wrote. Added my .psm1 file to the $PSModulePath, and my cmdlets are always loaded.

And I -NoProfile, and -NoLogo to invoke pwsh cmd a little bit faster. Something like

cmd = ['pwsh', '-NoLogo', '-NoProfile', '-Command', cmdToRun]
process = Popen(cmd, stderr=PIPE, stdout=PIPE)

But this is still taking 5+ secs to return/process.

Does anyone know if there are other enhancements to run powershell scripts even faster? TIA

like image 983
scorpion35 Avatar asked Oct 12 '25 01:10

scorpion35


1 Answers

Python cannot host PowerShell in-process, so you cannot avoid the costly creation of a PowerShell child process, via pwsh, the PowerShell (Core) 7 CLI (the same applies analogously to powershell.exe, the Windows PowerShell CLI).

-NoProfile would only make a difference if large / slowly executing $PROFILE file(s) were present, and -NoLogo is redundant, as it is implied by -Command.

If you need to make PowerShell calls repeatedly in a given invocation of your application, you can mitigate the performance impact by launching a PowerShell CLI process in REPL mode, by passing -Command - and then feeding commands to it on demand via stdin, terminating each with two newlines (to ensure that the end of the command is recognized), similar to the approach in this post.

You would then incur the penalty of the PowerShell child-process creation only once per run of your application, before submitting the first PowerShell command.

like image 192
mklement0 Avatar answered Oct 14 '25 17:10

mklement0