Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Узнать версию Chrome браузера (http://forum.oszone.net/showthread.php?t=346296)

papacoca 30-08-2020 18:33 2932497

Узнать версию Chrome браузера
 
Добрый день.
1. Узнать какая версия chrome браузера и именно в таком виде - 83, 84, 85
2. Если версия браузера не 83, 84 или 85 то завершить скрипт без действий.
3. Если версия браузера 83 то открыть C:\83.txt, если версия 84 то открыть C:\84.txt, если версия 85 то открыть C:\85.txt. Спс

megaloman 30-08-2020 19:39 2932502

Код:

@Echo Off
cls
        Set "F83=Z:\Box_In\83.txt"
        Set "F84=Z:\Box_In\84.txt"
        Set "F85=Z:\Box_In\85.txt"

        FOR /F "usebackq skip=2 tokens=3 delims=. " %%i IN (`2^>nul reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome" /V DisplayVersion`) DO Set "Vrs=%%i"

        Echo Google Chrome DisplayVersion=%Vrs%
        If "%Vrs%"=="83" Start " " notepad "%F83%"
        If "%Vrs%"=="84" Start " " notepad "%F84%"
        If "%Vrs%"=="85" Start " " notepad "%F85%"
Pause
Exit /B


greg zakharov 30-08-2020 22:28 2932511

Всё можно решить в одну строку.
Код:

curl -s https://2ip.ru | sed -nr "s/.*chrome ([0-9]{2}).*/\1/Ip" | findstr /rc:"8[3-5]" | sed -r "s/(.*)/C:\\\1.txt/" | cmd>nul
Сперва curl'ом запрашиваем страницу 2ip.ru, оттуда забираем мажорную версию Chrome, которую в свою очередь передаём далее по конвейеру findstr, чтобы удостовериться в корректности версии (c 83 по 85), и если совпадение есть будет открыт соответствующий файл; в противном случае ничего не произойдёт.

Foreigner 31-08-2020 00:17 2932518

Я не пользуюсь хромом, что выдает?
Код:

chrome --version
В огнелисе, для примера, под виндоус работает с пайпом, под линукс без него:
Код:

> firefox -v | more
Mozilla Firefox 80.0


Iska 31-08-2020 04:45 2932522

Цитата:

Цитата Foreigner
что выдает?
Код:

chrome --version
»

У меня — ничего. Открывается Google Chrome. И «-product-version» аналогично. Это ж не Chromium.

Vadikan 31-08-2020 09:57 2932533

Цитата:

Цитата greg zakharov
Всё можно решить в одну строку. »

А если нет интернета или сайт недоступен? Мой вариант
Код:

(((Get-Item "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe").VersionInfo).ProductVersion).split('.')[0]
А дальше как угодно, хоть if else

Elven 31-08-2020 10:02 2932534

Цитата:

Цитата Iska
Это ж не Chromium. »

Не думаю что дело в том что это хромиум/хром. Запускалось через win+r или из cmd? Опять же нет винды под рукой. но под линухом успешно возвращается версия и с хромиума и с хрома.
да, я понимаю что это больше досужий интерес, чем к теме топика, но интересно же.

Busla 31-08-2020 11:19 2932542

Цитата:

Цитата greg zakharov
curl'ом запрашиваем страницу 2ip.ru, оттуда забираем мажорную версию Chrome »

очевидно же, что curl не отдаст в заголовке запроса версию установленного браузера, а 2ip.ru соответственно, его не прочитает и не вернёт

Vadikan, версию exe можно и через wmi получить, т.е. решить на bat не уходя в офтопик:
Код:

wmic datafile where "name='c:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'" get version

greg zakharov 31-08-2020 17:01 2932575

Давайте по-порядку.
Цитата:

Цитата Vadikan
А если нет интернета или сайт недоступен?

Ключевое - если, а оно, как известно, из области вероятности. Вероятностных соотношений, к слову, в данном случае более двух (точных данных нет, так что имеем уравнение с параметрами). Конечно интернета может и не быть (что-то у провайдера, сетевой шторм на каком-либо коммутационном узле или просто какаой-либо из пакетов отбрасывается из-за невалидной контрольной суммы), однако снова - какова вероятность того? Ни вы, ни кто-либо иной не знает. Что до вашего ответа "а дальше как угодно", - это непрофессионально.
Код:

([version](ls $env:programfiles -r -fi chrome.exe -ea 0).VersionInfo.ProductVersion).Major -match '^8[3-5]$' ? ."C:\$($matches[0]).txt" : 'FU!'
Но! Так как речь всё же о командных сценариях, то ваш вариант (ровно как и пример выше) перенаправляются в /dev/null, сколь не ущемлено было бы ваше самолюбие (и шарфик).

Цитата:

Цитата Busla
очевидно же, что curl не отдаст в заголовке запроса версию установленного браузера

Очевидно, что кто-то попросту не врубается что данные не берутся из заголовков запросов. Версия берётся из "голого" HTML, отдаваемого 2ip.ru (к слову у них есть REST API, но нужно регистрироваться, а делать этого не хочется).
Цитата:

Цитата Busla
версию exe можно и через wmi получить

Версию можно дёрнуть чем угодно. Хоть отладчиком.
Код:

cdb "C:\...\chrome.exe" -c "dx @$curprocess.Modules[0].Contents.Version.VersionInfo.FileVersion;q"
Хоть sigcheck.
Код:

sigcheck -nobanner -n "C:\...\chrome.exe"
Хоть strings.
Код:

strings -nobanner -n 10 "C:\...\chrome.exe" | sed -n "/FileVersion/{n;p}"
Однако, все эти способы (а также способы с PowerShell и wmic) упираются в наличие секции .rscr самого PE'шника. Если следовать теории "если" (зачинщик строчит телеграммы), то:
1) такой секции может и не быть
2) при сборке секция была объединена (сплайсинг) с какой-либо иной секцией
3) секция может быть, но данных о версии в ней нет
4) секция имеет альтернативное имя
5) вместо секции ресурсов используется DOS заглушка или легаси поля IMAGE_DOS_HEADER
Есть и прочие варианты, но не суть. Здесь упор именно на наличие секции ресурсов.

Вообще, развивая теорию "если" можно дойти до абсурда, в том числе признать поиск значений в реестре неправильными, а идентификацию браузера по User-Agent'у недостоверной в виду возможности его подмены (хотя на деле получить "вшитый" User-Agent не так уж и сложно даже при выключенном JavaScript).

К слову, забыл упомянуть, что после синхронизации curl с браузером по умолчанию, в _curlrc "оседает" дефолтный User-Agent, иначе говоря, проверка версии без инета будет такой:
Код:

curl -s "file:///%curl_home%\_curlrc" | sed -nr "s/.*chrome\/([0-9]{2}).*/\1/Ip"

Iska 31-08-2020 20:22 2932590

Цитата:

Цитата Elven
Запускалось через win+r или из cmd? »

Из-под Far Manager'а :).

papacoca 01-09-2020 07:13 2932604

Цитата:

Цитата Busla
wmic datafile where "name='c:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'" get version »

У меня Windows 10 и работает только этот вариант. Выводит версию chrome.

Код:

C:\Users\papacoca\Desktop>wmic datafile where "name='c:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'" get version
Version
85.0.4183.83

Как сделать его универсальным для c:\\Program Files (x86) и для c:\\Program Files
2. Если версия браузера не 83, 84 или 85 то завершить скрипт без действий.
3. Если версия браузера 83 то открыть C:\83.txt, если версия 84 то открыть C:\84.txt, если версия 85 то открыть C:\85.txt. Спс

greg zakharov 01-09-2020 08:36 2932609

1) Использовать переменные окружения program* и where
2) for или через пайп и конструкцию set /p взять мажорную версию и передать её findstr
3) используя подобие тернарной операции, собрать из полученного значения путь

Vadikan 01-09-2020 10:07 2932621

Цитата:

Цитата greg zakharov
сколь не ущемлено было бы ваше самолюбие (и шарфик). »

Цитата:

Цитата greg zakharov
зачинщик строчит телеграммы »

Цитата:

Цитата greg zakharov
Очевидно, что кто-то попросту не врубается »

Модераториал: полегче на поворотах, плиз. См. ОПК 3.1


Время: 01:36.

Время: 01:36.
© OSzone.net 2001-