2017-04-07 33 views
0

我在Powershell中構建一個文件。此構建文件需要引用Visual Studio 2017版本的MSBuild.exe。不幸的是,該文件的路徑取決於您安裝的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 

有沒有一種方法,我可以給PowerShell的更好的提示到哪裏尋找MsBuild.exe?

+0

的版本,我會建議,也許你可以搜索一次,然後它緩存的答案。 –

+1

也許一個註冊表鍵與已安裝的路徑? –

+0

要擴展Mark的評論,[卸載密鑰](https://msdn.microsoft.com/en-us/library/windows/desktop/aa372105(v = vs.85).aspx)可能會保留該信息。只是要小心32/64位的值,因爲這些值也存在於'WOW6432Node' – BenH

回答

1

Get-childitem支持通配符。由於只有字符串的特定部分發生變化(親/社區),您可以用通配符替換它。

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,您將獲得一個文件。

+0

謝謝,我不知道。這正是我所希望的解決方案。 –

0

嘗試這樣的事情,並添加其中用於選擇的MSBuild

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

這看起來很有希望,但似乎MSBuild 15沒有在該註冊表項下注冊。 –

相關問題