Мы используем сценарии PowerShell и запросы WMI, чтобы собрать информацию от машин Windows и сохранить информацию в базе данных. Позже мы могли бы запросить эти данные для наблюдения, какая версия Java установлена на каждой машине.
У меня были лучшие результаты, отслеживающие установленного программного обеспечения путем просмотра реестра в пути HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Это обычно дает мне Отображаемое имя, Версию Дисплея, Дату Установки, Издателя и другую информацию о версии. Строка от базы данных для Java могла бы выглядеть примерно так:
MACHINE_NAME, {26A24AE4-039D-4CA4-87B4-2F83216021FF}, Java(TM) 6 Update 21, 6.0.210, 20100721, Oracle, 06.00.0210, 6, 0, 0, 1, 01.11.2010, 7:40:22.830
Можно искать и найти пример кода в VBS или PS, которая использует WMI, реестр или PSInfo для получения установленного программного обеспечения от удаленных компьютеров. Часть способа, которым мы используем метод реестра, похожа на это:
$HKLM = [uint32]"0x80000002"
$softwareListKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
$regObject = [WmiClass]"\\$machineName\ROOT\DEFAULT:StdRegProv"
$softwareKeys = $regObject.EnumKey($HKLM, $softwareListKeyPath)
foreach ($softwareKeyName in $softwareKeys.sNames) {
#// some are GUIDs, some are software names, ones with GUID will have DisplayName
$softwareKeyPath = $softwareListKeyPath + $softwareKeyName
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "DisplayName")
$displayName = $keyNameAndData.sValue
$isWindowsUpdate = $false
$rx = "(KB|M)\d{6}"
if(($softwareKeyName -match $rx) -or ($displayName -match $rx)) {
$isWindowsUpdate = $true
}
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "DisplayVersion")
$displayVersion = $keyNameAndData.sValue
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "InstallDate")
$installDate = $keyNameAndData.sValue
$keyNameAndData = $regObject.GetStringValue($HKLM, $softwareKeyPath, "Publisher")
$publisher = $keyNameAndData.sValue
...............
Плохо, проблема не в nginx, а в моем сервере приложений. Я использовал модуль маршрутизации, который требовал, чтобы я явно указывал метод запроса, если не get, и поэтому он выдавал ошибку 404 при публикации, но не при прямом обращении к URL-адресу браузера.