2017-04-07 6 views
0

私はPowershellでビルドファイルを作っています。このビルドファイルは、MSBuild.exeのVisual Studio 2017バージョンを参照する必要があります。残念ながら、そのファイルへのパスは、インストールしたVisual Studioのエディションによって異なります。例えば私はサブパスを知っていて、ルートフォルダーは認識していないファイルを見つける

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin 
C:\Program Files (x86)\Microsoft Visual Studio\2017\Pro\MSBuild\15.0\Bin 

もちろん私は

$partial = ${env:ProgramFiles(x86)} + '\Microsoft Visual Studio\2017\' 
Get-ChildItem -Path $partial -Filter 'MsBuild.exe' -Recurse 

を使用することができます。しかし、他のファイルとフォルダの多くはC:\Program Files (x86)\Microsoft Visual Studio\2017\の下にあります。

残念ながら、このようなものは動作しません:

Get-ChildItem -Path $partial -Filter '\MSBuild\15.0\Bin\MsBuild.exe' -Recurse 

はからMSBuild.exeを検索する場所を私はPowerShellのより良いヒントを与えることができる方法はありますか?

+0

のバージョンを選択します。 –

+1

おそらく、インストールされたパスのレジストリキーですか? –

+0

Markのコメントを拡大するには、[アンインストールキー](https://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v = vs.85).aspx)がその情報を保持している可能性があります。値が 'WOW6432Node'にも存在するので、32/64ビット数に注意してください。 – BenH

答えて

1

Get-childitemはワイルドカードをサポートしています。文字列の変更の特定の部分(pro/community)のみをワイルドカードで置き換えることができます。

C:\Program Files (x86)\Microsoft Visual Studio\2017\*\MSBuild\15.0\Bin 

実際には、完全なワイルドカードパスのget-itemを使用できます。

Get-Item "C:\Program Files (x86)\Microsoft Visual Studio\2017\*\MSBuild\15.0\Bin\MSBuild.exe" 

これは、各ユーザーがVisual Studioのインストールされているバージョンを1つしか持っていないと仮定して、すべてのファイルを返します。

+0

ありがとう、私は手がかりがありませんでした。これはまさに私が望む解決策です。 –

0

は、私は多分あなたは一度検索することができ、その後、どこかに答えをキャッシュすることを示唆している。このような何かをしようと、どこの追加のためのMSBuild

Resolve-Path HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\* | 
Get-ItemProperty | select MSBuildToolsPath 
+0

これは有望ですが、MSBuild 15はそのレジストリキーの下に登録されていないようです。 –

関連する問題