Войти

Показать полную графическую версию : [решено] как узнать какой антивирус на компе и еще пару вещей :)


Страниц : [1] 2

mitiya
17-06-2009, 12:46
Суть вот в чем:
Пишу скриптик небольшой для небольшой инвентаризации :)

Хочу знать собрать следующую информацию:
Название операционной системы - есть в реестре знаю где
Версия сервис пака - тоже в реестре тоже знаю

Наличие офиса и его версию - наверно есть где-то в реестре но не знаю где точно

Наличие антивируса и его версию - еверест во вкладке безопасность его находит ,так что думаю где-то в реестре антивирусы отмечаются, опять же не знаю где.

Брендмауэр - тоже что и по поводу антивира

Вроде все.

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

amel27
17-06-2009, 14:39
антивирус, офис, файервол - все это приложения, и никто не мешает на одну машину установить несколько разных офисов и антивирусов, какой из них тогда выбирать?.. ИМХО один выход - перебирать все возможные и определять - установлен или нет, и если да, то какая версия... чтобы не париться с реестром, лучше использовать WMI Installer Provider

пример CMD-команды, выводящей список установленного софта и его параметры:
WMIC Product Get /Value

P.S. описание класса: http://msdn.microsoft.com/en-us/library/aa394378(VS.85,printer).aspx

Petya V4sechkin
17-06-2009, 14:55
amel27, к сожалению, Win32_Product воспринимает только msi.

mitiya, пример получения полного списка установленных программ по этой ссылке (http://www.mvps.org/scripting/people/bakkenalia.htm) (InstalledApplications).

Medic84
17-06-2009, 15:06
Хочу знать собрать следующую информацию:
Название операционной системы - есть в реестре знаю где
Версия сервис пака - тоже в реестре тоже знаю »

Что бы отобразить значение реестра используется REG QUERY

REG QUERY (путь) /v (значение)

Если путь имеет где то пробелы, то его нужно заключать в кавычки

Остальные ф-ии прочитай сам :)

Reg /?

amel27
17-06-2009, 16:20
пример получения полного списка установленных программ »это понятно, но как из этой ветки реестра выдернуть версию?

mitiya
17-06-2009, 17:21
Medic84, это все я зная , тут проблемы нет , просто для полноты картины написал.

антивирус, офис, файервол - все это приложения, и никто не мешает на одну машину установить несколько разных офисов и антивирусов, какой из них тогда выбирать? »

ну что касается офисов то я говорил в данном случае о MS офисе. а версия это 2003 или 2007, наличие сервис паков не критично.

А по поводу антивируса, я все же склонен считать что эти приложения как то отмечаются в системе ибо например центр обеспечения безопасности мне пишет в графе защита от вредоносных программ - nod , брендмауэр - smart security.

Cibersoft Prolex
17-06-2009, 20:06
mitiya
Ошибка в шапке
как узнать какой онтивирус на компе и еще пару вещей :) »

Medic84
17-06-2009, 21:25
ну что касается офисов то я говорил в данном случае о MS офисе. а версия это 2003 или 2007, наличие сервис паков не критично.
А по поводу антивируса, я все же склонен считать что эти приложения как то отмечаются в системе ибо например центр обеспечения безопасности мне пишет в графе защита от вредоносных программ - nod , брендмауэр - smart security. »

На твоем бы месте я бы сделал все на условии Если
Если существует такой-то ключ реестра допустим (HKLM\Software\Eset\Nod) то выводит его версию и т.п. А если нет то пропускает, и так с любым. Проблема только в том что придется все в ручную забивать(все антивирусы и т.п.)

mitiya
17-06-2009, 22:07
Medic84, в том то и дело что не хочется перебирать все, не говоря уже о том что придется все эти антивирусы ставить и смотреть какой ключ они создаю.
Если винда как-то узнает какой антивирус стоит, то лучше всего этой возможностью воспользоваться. Очень сомневаюсь что винда перебирает все антивирусы по такому же принципу.

Iska
18-06-2009, 02:43
Конкретно про антивирус и фаерволл: если ОС знает о них, то и Вы можете узнать вот так посредством WMI (пример на WSH/VBScript; проверялось на Windows XP SP3 Professional: ниже SP2 работать не будет, выше — теоретически возможно, но не проверялось):
Option Explicit

Dim objSWbemServicesEx

Dim collSWbemObjectSet_AntiVirusProduct
Dim objSWbemObjectEx_AntiVirusProduct

Dim collSWbemObjectSet_FireWallProduct
Dim objSWbemObjectEx_FireWallProduct


Set objSWbemServicesEx = GetObject("WinMgmts:{impersonationLevel=impersonate}!\\.\root\SecurityCenter")


Set collSWbemObjectSet_AntiVirusProduct = objSWbemServicesEx.ExecQuery("SELECT * From AntiVirusProduct")

If collSWbemObjectSet_AntiVirusProduct.Count <> 0 Then
For Each objSWbemObjectEx_AntiVirusProduct In collSWbemObjectSet_AntiVirusProduct
With objSWbemObjectEx_AntiVirusProduct
WScript.Echo .CompanyName, .DisplayName, .VersionNumber, "is", .productUpToDate
End With
Next
Else
WScript.Echo "Not found AntiVirus Products"
End If

Set collSWbemObjectSet_AntiVirusProduct = Nothing


Set collSWbemObjectSet_FireWallProduct = objSWbemServicesEx.ExecQuery("SELECT * From FireWallProduct")

If collSWbemObjectSet_FireWallProduct.Count <> 0 Then
For Each objSWbemObjectEx_FireWallProduct In collSWbemObjectSet_FireWallProduct
With objSWbemObjectEx_FireWallProduct
WScript.Echo .CompanyName, .DisplayName, .VersionNumber
End With
Next
Else
WScript.Echo "Not found FireWall Products"
End If

Set collSWbemObjectSet_FireWallProduct = Nothing

WScript.Quit 0

Естественно, «правильные» антивирус или фаерволл должны «сообщать» о своём присутствии, иначе экземпляры этих классов будут отсутствовать.

Update: поскольку выше речь косвенно шла вроде как о пакетных файлах, то приведу описанный функционал и для них (посредством WMIC):
wmic.exe /Node:. /NameSpace:\\Root\SecurityCenter Path AntiVirusProduct Get CompanyName, DisplayName, VersionNumber, productUpToDate
wmic.exe /Node:. /NameSpace:\\Root\SecurityCenter Path FireWallProduct Get CompanyName, DisplayName, VersionNumber

mitiya
18-06-2009, 22:37
Iska, спасибо все работает.

А что это за зверь такой этот wmic , и откуда он данные берет , не уж то не из реестра ?

Vadikan
19-06-2009, 00:34
А что это за зверь такой этот wmic »
Начальные сведения можно почерпнуть из прикрепленной темы Полезные ресурсы по скриптовым языкам администрирования (http://forum.oszone.net/thread-130222.html)

mitiya
20-06-2009, 14:43
По поводу офиса еще.
Появилась следующая идея:
Проверять ассоциацию *.doc и от сюда брать то какой офис используется.
Но тут как всегда пара проблем, в реестре doc не напрямую ассоциируется с приложением, а через Word.Document.8
и я просто подозреваю, что в случает например с опенофисом ключи будут другие.
Может кто знает консольную прогу, которая выведет сразу приложение ассоциируемое с данным расширением ?
А так же способ получить версию exe .

Iska
20-06-2009, 16:11
Что-то наподобие такого:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "tokens=2 delims==" %%i in ('assoc .doc') do set strDocType=%%i
for /f "tokens=2 delims==/" %%i in ('ftype %strDocType%') do set strApp=%%i
for /f "tokens=1,2 delims= " %%i in ('filever.exe /v %strApp% ^| findstr /i "CompanyName ProductName ProductVersion"') do set %%i=%%j

echo Company Name: %CompanyName%
echo Product Name: %ProductName%
echo Product Version: %ProductVersion%

endlocal
exit /b 0

Замечания:

в «for /f "tokens=1,2 delims= " %%i in ('filever.exe /v…» после «delims=» и перед «" %%i» должен быть символ табуляции;
«filever.exe» берётся из комплекта «Support Tools». Я брал из комплекта «Windows Server 2003 Service Pack 2 32-bit Support Tools», но работает и с родным пакетом из инсталляционного диска («\SUPPORT\TOOLS\SUPTOOLS.MSI»). В принципе, можно использовать и другие утилиты, например ту же «sigcheck.exe» от бывшего Sysinternals.

mitiya
21-06-2009, 00:05
Iska,

хотел использовать этот скрип так же для определения архиватора, но тут он не сработал. Все из-за разделителя во 2м for.
Мне вот интересно можно брать кусочки с конца а не с начала , или хотя бы получить общее их число чтоб взять нужный ?

amel27
22-06-2009, 09:23
может так?
@Echo Off

For /F "Tokens=2 Delims==" %%i In ('Assoc .rar') Do Set strDocType=%%i
For /F "Tokens=2 Delims==" %%i In ('FType %strDocType%') Do Call :GetVars %%i

Echo Company Name : %CompanyName%
Echo Product Name : %ProductName%
Echo Product Version: %ProductVersion%
Echo File Version : %FileVersion%

Exit /B 0

:GetVars
For /F "Tokens=5 Delims= " %%i In ('FileVer "%~1"') Do Set FileVersion=%%i
For /F "Tokens=1* Delims= " %%i In ('FileVer /v "%~1"^|FindStr /IBRC:" [a-z][a-z]* "') Do Set %%i=%%j
GoTo :EOF

mitiya
23-06-2009, 10:58
у меня вот еще такой вопрос.
Нельзя ли wmic задать какой-нибудь разделитель, а то я пытаюсь выцепить с помощью for /f из

companyName displayName productUptoDate versionNumber
ESET, spol. s r. o. ESET Smart Security 3.0 TRUE 3.0

отдельные элементы, но тут пробелы встречаются и в самих элементах и разделяют их.

amel27
23-06-2009, 11:26
mitiya, используйте ключ /Value
WMIC /NameSpace:\\Root\SecurityCenter Path AntiVirusProduct Get CompanyName,DisplayName,VersionNumber,productUpToDate /Value

mitiya
23-06-2009, 11:40
amel27, ох спасибо

mitiya
25-06-2009, 00:54
на 2003м сервере выдало вот что


ОШИБКА:
Код = 0x8004100e
Описание = Недопустимое пространство имен
Услуга = WMI


что это означает, и как с этим бороться :) ?




© OSzone.net 2001-2012