Получить номер текущей версии указанной программы - PullRequest
0 голосов
/ 04 июня 2018

Я начал с этого, по рекомендации друга

Get-WmiObject win32_product | ft name, version

Но потом я нашел это , что заставляет меня задуматься.Небольшое исследование привело меня к этому

wmic product where "Name='Revit 2018'" get name,version

, который работает, насколько собраны данные.И да, я ищу другую программу в этом примере.в любом случае, когда у меня была хорошая информация с использованием WMIC, я пытался перевести данные в переменную, чтобы получить только номер версии, но форматирование данных я никогда не видел раньше.Я надеялся на простое решение, такое как

$object = wmic product where "Name='Revit 2018'" get name,version
$object.version

Но только в результате получается массив из 6 элементов, и только один кажется реальной строкой данных, и это одна строка, а не два свойства.И мне действительно интересно, является ли старая утилита командной строки правильным ответом здесь.Если это действительно лучший способ сделать это, есть ли хитрость для преобразования необработанных данных во что-то большее, PowerShelly?И если это не лучший способ получить эту информацию, что это?Это страшная ссылка, или Get-WmiObject win32_product действительно безопасен?И если так, есть ли способ фильтрации по определенному имени, чтобы ускорить процесс?И действительно, Get-WmiObject не работает так, как я ожидал, так как

$object = Get-WmiObject win32_product | ft name, version
foreach ($item in $object) {
    Write-Host "$($item.version)"
}

не работает так, как ожидалось.

РЕДАКТИРОВАТЬ: Кажется, что работает, как ожидалось,что является прогрессом.

$version = (Get-WmiObject win32_product -filter:"Name = 'Revit 2018'" | Select-Object -property:*).version
Write-Host "$version!"

Я полагаю, что вопрос действительно, это безопасный и последовательный подход, или есть лучший?

1 Ответ

0 голосов
/ 05 июня 2018

Почему бы не использовать реестр?

Set-Location HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall
$app = Get-ChildItem | Where-Object { $_.GetValue("DisplayName") -match 'YourSoftware' }

$app.GetValue("DisplayVersion")

Или

Set-Location HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall
$apps = Get-ChildItem
foreach ($app in $apps) {
  $app.GetValue("DisplayName","DisplayVersion")
}

Примечание. Вам также необходимо проверить расположение реестра SysWow64

HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ 

Примечание. Не все элементы будут иметьверсия дисплея, в этом случае у вас всегда есть возможность искать в каталоге установки сам исполняемый файл, в котором должна быть версия.

...