Powershell script to check if Python is installed

Question:

I’m trying to check if Python is installed on a machine via a Powershell script.

My idea so far is to run the following:

$p = iex 'python -V'

If the command executes correctly (check the Exitcode on $p property), read the output and extract the version number.

However, I’m struggling to capture the output when executing the script in Powershell ISE. It’s returning the following:

python : Python 2.7.11
At line:1 char:1
+ python -V
+ ~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Python 2.7.11:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Can someone point in the right direction?

Cheers,
Prabu

Asked By: Prabu

||

Answers:

It seems that python -V outputs the version string to stderr and not stdout.

You can use a stream redirector to redirect the error into the standard output:

# redirect stderr into stdout
$p = &{python -V} 2>&1
# check if an ErrorRecord was returned
$version = if($p -is [System.Management.Automation.ErrorRecord])
{
    # grab the version string from the error message
    $p.Exception.Message
}
else 
{
    # otherwise return as is
    $p
}

If you are certain that all the versions of python you have on your systems will behave this way, you can cut it down to:

$version = (&{python -V}).Exception.Message
Answered By: Mathias R. Jessen

For python above 3.3, a launcher was introduced which may be installed automatically or manually as part of official installer.

In modern situation, command python -V may give you error or nothing helpful (python may not even be presented in PATH by default), but launcher is supposed to be used both for checking installed python versions:

py -0p --list-paths

and to run scripts: py -3.11 main.py or simply py main.py

Answered By: halt9k
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.