Я системный администратор серверной / клиентской среды, в которой нет SCCM, и я хочу проверить, есть ли у компьютеров в моей организации имя файла, используя пакетный файл.
Я хочу, чтобы сценарий проверял, находится ли файл egui.exe
в одном из этих каталогов:
Program Files\ESET\ESET Security\
Program Files (86)\ESET\ESET Security\
Если файл СУЩЕСТВУЕТ, то скрипт должен ничего не делать.
Если файл НЕТ СУЩЕСТВУЕТ, то он должен начать установку Конечная точка Eset в Тихий режим с моего сервера:
msiexec /i myserver\eea_nt64_enu.msi /qb
Я что-то написал, но не уверен, правильно ли и полно:
If exist "C:\program files\ESET\ESET Security\egui.exe" echo ?
else
call msiexec /i myserver\eea_nt64_enu.msi /qb
Опять же, я не хочу, чтобы сценарий загружал установку, если файл существует. Если исполняемый файл существует в этой папке, командный файл не должен делать ничего.
Как проверить наличие исполняемого файла в Программные файлы и Программные файлы (x86)?
Как проверить, какая у каждого версия?
Если версия AntiVirus старая (скажем, версия 4), она должна заставить ее установить И заменить текущую версию?
Ну не нахожу. Кроме того, не могу найти, как заставить его ничего не делать, если файл существует.
@StackBuck, нетрудно найти справку по конкретной команде, открыть командную строку, cmd.exe
, в окне набрать command /?
и нажать клавишу ввода. В этом случае вы должны ввести if /?
для получения информации о команде If
.
ОК. Как заставить скрипт «ничего не делать», если файл существует?
Почему бы не использовать IF NOT EXIST? stackoverflow.com/questions/6780553/…
Спасибо, Адам! Пожалуйста, подумайте, сделайте это как ответ, поэтому я приму и проголосую!
@StackBuck, вы серьезно не можете увидеть пример синтаксиса в файле справки для команды IF
. Это именно то, что вам нужно.
Я полагаю, вы убедились, что рассматриваемый MSI не решает эту «проблему» самостоятельно? Может быть, у него есть необходимая логика для очистки встроенных в него старых версий, чтобы вам не нужно было выполнять какие-либо проверки предварительных условий?
Я вижу, что вы получили пакетный ответ (IF NOT EXIST
), но я хочу добавить, что вы можете решить эту проблему, используя устаревшие активные сценарии (VBScript
, Javascript
- я вижу, вы можете быть человеком Javascript) или более современные сценарии Powershell
(которые я не используйте много).
Можем ли мы спросить, как вы запускаете установку? Через скрипт входа в систему, запланированные задачи, AD или какой-то другой механизм?
Я немного разбираюсь в сценариях Powershell, но по вашему вопросу я планирую сделать это через сценарий входа в систему.
Хорошо, Powershell - это не мое, но вот хороший источник: github.com/heaths/psmsi (вероятно, вам известен). А если вы еще этого не сделали, возможно, просто запустите установку прямо в системе с уже существующим файлом и посмотрите, что произойдет. Вероятно, вы уже это сделали.
Откройте окно командной строки и запустите if /?
и goto /?
, чтобы понять следующий командный файл:
@echo off
rem This first file existence check works on 32-bit and
rem 64-bit Windows in 32-bit and 64-bit environment.
if exist "%ProgramFiles%\ESET\ESET Security\egui.exe" goto :EOF
rem On 64-bit Windows run also a file existence check for 32-bit version
rem of application in standard program files folder for x86 applications.
if not "%ProgramFiles(x86)%" == "" if exist "%ProgramFiles(x86)%\ESET\ESET Security\egui.exe" goto :EOF
rem If this batch file is executed by 32-bit cmd.exe on 64-bit Windows
rem there is still not checked if 64-bit version of application exists
rem in standard program files folder for x64 applications.
if not "%ProgramW6432%" == "" if exist "%ProgramW6432%\ESET\ESET Security\egui.exe" goto :EOF
rem Other commands to install the application depending on Windows architecture.
Прочтите статью Microsoft Подробности реализации WOW64, чтобы узнать причину всех этих условий ЕСЛИ.
Но я полагаю, что было бы лучше проверить наличие egui.exe
, запросив ключ реестра регистрация приложения этого приложения, установленного с помощью пакета установщика Microsoft.
@echo off
%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\egui.exe" >nul 2>&1
if not errorlevel 1 goto :EOF
rem Other commands to install the application depending on Windows architecture.
REG завершается со значением 1
, если указанный раздел реестра не существует, и со значением 0
при успешном запросе этого раздела реестра.
if not errorlevel 1
означает, что код выхода ранее выполненной команды / приложения - не больше или равно1
, что означает ниже чем1
, что означает, что почти для всех команд и приложений это равный0
.
У меня не установлен пакет ESET Безопасность, поэтому я не знаю, зарегистрирован ли egui.exe
(или любой другой исполняемый файл из этого пакета) в соответствии с рекомендациями Microsoft по регистрации приложений Windows.
Чтобы понять все используемые команды и то, как они работают, откройте окно командной строки, выполните следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
goto /?
if /?
reg /?
reg query /?
rem /?
Бьюсь об заклад, если вы прочитаете файл справки для команды IF, вы увидите, каков правильный синтаксис для использования ELSE.