У нас есть большая установка с более чем 15 000 станков. У них должна быть установлена версия Trend Micro; однако мы этого точно не знаем.
Это все коробки Windows, которые включают XP с различными уровнями SP, Vista RTM и SP1, а также несколько серверов 2000 и 2003.
Как я могу определить:
Идеи?
Спасибо,
Поскольку вы говорите о 15 000 хостов, запросы к каждому из них из сети будут крайне неэффективными.
Тогда Right Thing To Do ™ - это запустить сторожевой таймер на каждом хосте, чтобы убедиться, что соответствующее программное обеспечение установлено и работает. Этот сторожевой таймер может быть частью программного обеспечения, работающего как служба, запланированным сценарием или даже аппаратным, если вы используете что-то вроде Intel vPro.
Чтобы проверить, установлено ли программное обеспечение AV, вы можете использовать следующую команду PowerShell -
$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
-computername "." -filter "Name like '%antivirus%'"
Обратите внимание, что в конце у вас есть filter
аргумент, который вы можете настроить, чтобы убедиться, что вы смотрите на правильный продукт.
Немного поиграв с like
оператор, вы должны быть в состоянии прибить описание антивируса и незначительные вариации здесь и там. Обратите внимание, что мой пример выше (все, что содержит слово «антивирус») довольно упрощен. Вместо этого вам следует искать определенные шаблоны, соответствующие одобренному вами антивирусному программному обеспечению (например, «Trend Micro Antivirus%»).
В любом случае, приведенная выше команда вернет набор установленных продуктов, соответствующих вашему filter
заявление. Отсюда вы можете проверить, $avSoftware.Count
больше нуля, и в этом случае у вас установлено антивирусное программное обеспечение. В приведенном ниже примере перечислено все установленное антивирусное программное обеспечение -
if ($avSoftware.Count -gt 0) {
foreach ($av in $avSoftware) {
write-host $p.Name
}
} else {
write-host "No AV software found"
}
Вместо того, чтобы просто печатать сообщение о том, что AV не обнаружено, вам, очевидно, следует сделать что-то более полезное, например
Вы также сказали, что хотите получить версию установленного AV. Для этого вы можете использовать Version
собственность Win32_Process
. Давайте изменим приведенный выше код таким образом, чтобы также напечатать номера версий для установленного программного обеспечения -
$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" `
-computername "." -filter "Name like '%antivirus%'"
foreach ($av in $avSoftware) {
write-host $av.Name, $av.Version
}
Что касается версии установленных файлов определений вирусов, вам придется полагаться на каждый конкретный интерфейс AV WMI. Для этого вам нужно обратиться к документации поставщика.
Еще одна вещь, о которой нужно помнить. Вероятно, недостаточно знать, что на хосте установлен AV, если AV не работает. После проверки того, какой AV установлен, вы должны убедиться, что его процесс запущен. Для этого вам нужно знать, каков соответствующий процесс для каждого вашего программного обеспечения AV, и искать их так:
$processes = get-wmiobject -class "Win32_Process" -namespace "root\cimv2" `
-computername "." -filter "Name = 'TeaTimer.exe'"
if ($processes.Count -gt 0) {
foreach ($p in $processes) {
write-host $p.Name
} else {
# AV not running. Launch it here or notify someone
}
В приведенном выше примере выполняется поиск процесса Spybot (не совсем AV, но вы понимаете), который называется "TeaTimer.exe". Измените его, чтобы вместо этого искать свой процесс.
Итак, все это говорит о том, что если вы имеете дело с тысячами подобных хостов, вам, вероятно, следует инвестировать в какой-нибудь инструмент управления (например, LANdesk, Microsoft System Center или Level Platforms). Эти инструменты сделают вашу жизнь намного проще.
В текущих версиях Windows (xp sp3 +, vista, win 7) вы можете запросить того же поставщика WMI, который использует Windows Security Center, чтобы узнать, установлен ли антивирусный продукт и обновлен ли он.
Вот пример:
Set objSWbemServices = GetObject("winmgmts:\\.\root\SecurityCenter")
Set colFirewall = objSWbemServices.ExecQuery("Select * From antivirusProduct",,48)
For Each objAntiVirusProduct In colFirewall
WScript.Echo "companyName: " & objAntiVirusProduct.companyName
WScript.Echo "displayName: " & objAntiVirusProduct.displayName
WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid
WScript.Echo "onAccessScanningEnabled: " & objAntiVirusProduct.onAccessScanningEnabled
WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate
WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber
Next
Тем не менее, не все антивирусные продукты будут регистрировать поставщика WMI, но я подозреваю, что большинство популярных из них будут. Кроме того, неясно, поддерживается ли это официально Microsoft, поэтому в будущих версиях он может исчезнуть.
Вы можете попробовать это в сочетании с другими предложениями WMI здесь, вернувшись к сканированию установленных продуктов, если это не сработает.
Поскольку вы упомянули Trend Micro, а мы используем Trend, вот что мы делаем. Запланированная задача выполняет полное сканирование системы и помещает результаты в текстовый файл. Фактически, это файл журнала с датой в качестве имени файла ... например, 20090517.log в папке C: \ TRENDMICRO. Поскольку в нем есть только результаты сканирования, это небольшой файл.
В нашем случае с примерно 100 компьютерами сценарию PowerShell на сервере достаточно легко пройти через все компьютеры, объединить эти файлы и искать только те, у которых нет строки «Количество найденных вирусов (0) " в них. Очевидно, что если этого файла и фразы нет, значит, что-то не так: AV недавно не запускался, вирус обнаружен, AV не установлен и т.д.
Но разве нет корпоративных версий AV, которые все делают за вас, вместо версии моего бедняги?
+1 за Knox относительно корпоративной версии. Я согласен. Решение Trend для корпоративных настольных ПК имеет серверную часть, которая отслеживает клиентов, а также механизмы сканирования и шаблоны, которые у них есть в настоящее время. Он также позволяет вам развертывать. Я бы использовал это для достижения вашей цели. С его помощью разверните переустановку OfficeScan. Я бы даже не стал утруждать себя развертыванием скриптов, чтобы выяснить, где вы находитесь на данном этапе игры. Лучше всего начать сначала. Работайте с Trend над лицензированием, если у вас еще нет корпоративных инструментов (что меня действительно удивит). Если вы этого не сделаете, кто-то должен будет отчитаться за неправильные решения о покупке.
Я бы сделал сценарий входа в систему, который проверял бы различные записи или файлы реестра, чтобы определить, установлен ли продукт. Затем сценарий может создать журнал машин, которые работают или нет.
Dim WSHShell,strRegKey
Set WSHShell = WScript.CreateObject("WScript.Shell")
strRegKey="HKLM\Software\Symantec\Version"
WSHShell.RegRead(strRegKey)
Wscript.quit(0)
Не уверен, насколько это практично, учитывая 15 000 хостов, но если у вас есть список машин, которые вы хотите проверить, в текстовом файле, вы можете запросить ключ удаления в реестре и проанализировать результаты.
Текстовый файл с именем computers.txt с именем машины в каждой строке:
COMPUTER1
COMPUTER2
Пример с именем batch.bat:
@echo off
for /F %%i in (computers.txt) do call :SUB %%i
GOTO :EOF
:SUB
echo %1
reg query "\\%1\HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s
Я понимаю, что это может быть небольшая информационная перегрузка в тексте, но это позволяет вам анализировать результаты для ЛЮБОГО программного обеспечения A / V, которое вы ищете, не зная записи реестра, в которой содержится информация об удалении каждого продукта.
Вы также можете настроить это для определенных записей реестра продукта, заменив запрос реестра для ключей реестра конкретного продукта.
Отвечая на ваши вопросы по очереди
Я бы написал сценарий, который будет запускаться в каждой системе. Вы запросите раздел реестра для удаления. Вам нужно будет просмотреть каждый подключ. В этом случае лучше всего использовать WMI. В этом ключе вы увидите название продукта и версию. Видеть этот пример для написания сценариев.
3.
Я бы использовал метод проб и ошибок, но в случае с Trend, я бы предположил, что они поместят свою версию определения в реестр в HKEY_LOCAL_MACHINE \ Software \ TrendMicro или в config или ini-файл в своем локальном каталоге.
Это будет учитывать только эту версию программного обеспечения AV. Вам придется сделать это для нескольких версий.