2016-04-30 22 views
1

Powershellスクリプトを介してPythonがマシンにインストールされているかどうかを確認しようとしています。Pythonがインストールされているかどうかを確認するPowershellスクリプト

私の考えでは、これまでに以下のことを実行することです:

$p = iex 'python -V' 

コマンドは(Exitcode$pのプロパティを確認してください)正しく実行した場合、出力を読み込み、バージョン番号を抽出します。

しかし、私はPowershell ISEでスクリプトを実行するときに出力をキャプチャするのに苦労しています。次の結果が返されます:

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

誰かが正しい方向を指していますか?

乾杯、 Prabu

+0

式が正常に実行された場合、私にブール値を与えるMathiasR.Jessen @ '$ LASTEXITCODE'自動変数 –

+0

の値をチェックし、私は信じています。しかし、表現自体からコンソール出力を抽出するにはどうすればよいのですか?バージョン番号を得ることができますか? –

答えて

1

python -Vstderrなくstdoutにバージョン文字列を出力しているようです。

あなたは標準出力にエラーをリダイレクトするために、ストリームリダイレクタを使用することができます:あなたがあなたのシステムに持っているのpythonのすべてのバージョンがこのように振る舞うことが確実な

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

場合、あなたはそれをカットすることができますまで:

$version = (&{python -V}).Exception.Message 
+0

ありがとうございます - 魅力のように動作します。 –

+0

'$ p -is [System.Management.Automation.ErrorRecord]'はPythonがstderrに書き込むことのみに依存していることに注意してください。 stdoutにも書き込むと、 '$ p'は配列で、' -is'は失敗します。したがって、より安全な代替手段は、 '$ version =($ p |%gettype)-eq [System.Management.Automation.ErrorRecord]'です。 (stderrの出力はありません) –

+0

これは私が最初の例を書いた正確な理由です:-) –

関連する問題