Что произойдет, если мы попытаемся установить программное обеспечение с помощью PowerShell, которое уже установлено на сервере. Например, у меня уже есть блокнот++ на моем сервере. Теперь я пытаюсь установить ту же версию блокнота++ на свой сервер с помощью powershell. Тогда что будет на выходе? Кроме того, есть ли способ узнать, установлено ли программное обеспечение на сервере или нет.
Проблема с автоматической установкой Powershell
Ответы (1)
Есть много видов инсталляторов, но большинство добавляют записи в список Add/Remove программ, но гарантий нет. Вот код C++ для сканирования реестра и проверки через WMI. Вы можете использовать сценарии вместо этого, но это не точная наука, чтобы найти то, что установлено - некоторые установщики очень пользовательские и нестандартные и следуют нескольким рекомендациям.
Записи реестра:
- HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Удалить
- HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Удалить
Пакеты MSI:
Для пакетов MSI есть способы проверить, установлена ли точно такая же версия или связанная версия. Если у вас есть код продукта MSI, вы можете просто проверить, установлен ли он следующим образом:
Dim installer : Set installer = CreateObject("WindowsInstaller.Installer")
MsgBox installer.ProductState("{00000000-0000-0000-0000-000000000001}") ' <= PRODUCT CODE
Здесь ссылка на более длинный пример.
Вы можете найти код продукта для установленного MSI, используя несколько подходов: Как найти GUID продукта установленной установки MSI?
Если у вас есть код обновления для семейства MSI, вы можете использовать метод RelatedProducts, чтобы узнать, установлен ли связанный продукт:
Set installer = CreateObject("WindowsInstaller.Installer")
Set upgrades = installer.RelatedProducts("{UPGRADE-CODE-GUID-HERE}")
For Each u In upgrades
MsgBox u, vbOKOnly, "Product Code: "
Next
Как я могу найти код обновления для установленного файла MSI?. Вы можете получить код обновления для MSI, который должен быть установлен, просмотрев таблицу свойств с помощью Orca.
Прагматические подходы:
Одним из вариантов является идентификация файла ключа из каждой установки и проверка его существования с помощью любого языка, который вы хотите — скрипты подойдут.
Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetFileVersion("C:\Windows\System32\vcruntime140.dll")
Ссылка: