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
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
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
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
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
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