Как в PowerShell получить все ключи реестра с определенным свойством?

Я хочу получить каталоги установки всех версий Visual Studio, установленных на компьютере (чтобы скопировать файл в каталог Xml/Schemas)

Лучше всего читать из реестра. В \HKLM\Software\Wow6432Node\Microsoft\Visual Studio все версии перечислены по номеру версии: 10.0, 11.0, 12.0. Однако 9.0, 8.0 и 7.1 все еще там, хотя они и не установлены. Так что я не могу просто взять их всех. Мне нужно отфильтровать все ключи, имеющие свойство InstallDir.

Я знаю, что мне нужно объединить Get-ChildItem и Get-ItemProperty, но я не знаю, как это сделать.

Как мне написать команду Powershell для того, что я прошу?


person ageektrapped    schedule 11.09.2013    source источник


Ответы (1)


Это приведет к ошибкам для ключей, у которых нет этого свойства, но вы можете спокойно их игнорировать.

cd HKLM:\SOFTWARE\Wow6432Node\Microsoft\VisualStudio
$paths = dir | gp -Name InstallDir | select InstallDir

Глядя на вывод переменной $paths на моем компьютере, где у меня установлены студии 2010 и 2012:

InstallDir
----------
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\

Магия заключается в том, что Get-ItemProperty (gp) примет параметр по умолчанию из конвейера, так что вы можете связать вывод из Get-ChildItem (dir) для автоматической проверки каждого из подразделов. Командлет Select-Object (select) просто удаляет свойства PS* и дает вам только необработанный путь:

person Goyuix    schedule 11.09.2013
comment
Большой! Я проверил, смогу ли я сделать это все в одну строку, а не cd в ключ для запуска. И я могу! Спасибо - person ageektrapped; 11.09.2013