azukipochette's weblog

memory dump (mini)

開発環境にインストールされている Visual Studio のバージョンをコマンドラインで取得する

Visual Studio 2017 以降のバージョンでは、同一マシンに安全に Visual Studio を複数バージョンインストールことができるようになった一方で、どの場所にどの Visual Studio がインストールされているのかが把握しにくいという新しい管理上の問題を生んでいる。その問題を解決するために提供されているツールが vswhere コマンドである。

vswhere コマンドは、Visual Studio Installer の中にバンドルされているが、GitHub からも入手することができる。

github.com

vswhere を使ってインストールされているバージョンを取得する例を以下に示す。

(& $(Join-Path ${Env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe') -prerelease -format json | ConvertFrom-Json).catalog.productDisplayVersion

実行結果の例を以下に示す。

16.11.5
17.0.0 Preview 6.0

なお、PowerShell で ConvertFrom-Json で変換しなくても -property オプションを指定すれば、指定した情報だけを取得できる。

 & $(Join-Path ${Env:ProgramFiles(x86)} 'Microsoft Visual Studio\Installer\vswhere.exe') -prerelease -property catalog_productDisplayVersion

ただし、この方法の場合、複数のプロパティを取得したいということはできない (そういう "仕様" のようだ)。

github.com

補足

上記の例で、-prelease オプションを付けている理由は、vswhere は既定でリリース済みのプロダクトのみを表示するという仕様になっているためである (未リリースである Visual Studio Preview が表示されない)。
さらに混乱しやすいのが -all オプションで、このオプションは Preview リリースは含まない。-all オプションを付けると不完全なインストールになっているものであっても表示するという意味合いとなる。