我是没有SCCM的服务器/客户端环境的系统管理员,我想检查组织中的计算机是否有使用批处理文件的文件名。
我希望脚本检查文件egui.exe
是否在以下目录之一:
Program Files\ESET\ESET Security\
Program Files (86)\ESET\ESET Security\
如果文件为EXIST,那么脚本什么都不做 如果文件不 EXIST,那么它应该从我的服务器以安静模式开始 Eset Endpoint 安装:
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),那么应该强制它安装AND覆盖当前版本吗?
答案 0 :(得分:1)
我假设您已经确认有问题的MSI没有解决这个"问题"在其自己的?它可能有必要的逻辑来清理内置的旧版本,因此您不需要检查前置条件?
我看到你已经得到了批量答案(IF NOT EXIST
),但我想补充一点,你可以使用遗留的,有效的脚本(VBScript
,Javascript
来解决这个问题 - 我看到了你可能是一个Javascript man),或更现代的Powershell
脚本(我不太习惯)。
我们可以问你如何调用安装吗?通过登录脚本,计划任务,AD或其他一些机制?
答案 1 :(得分:1)
打开命令提示符窗口并运行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 Implementation Details,了解所有 IF 条件的原因。
但我想通过查询使用Microsoft Installer程序包安装的此应用程序的application registration注册表项来检查egui.exe
的存在会更好。
@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.
如果指定的注册表项不存在且<{1}}成功查询此注册表项,则 REG 以值1
退出。
0
表示先前执行的命令/应用程序的退出代码不大于或等于 if not errorlevel 1
,这意味着低于 {{1}这意味着几乎所有命令和应用程序都相等 1
。
我没有安装 ESET Security 软件包,因此不知道是否根据Microsoft指南注册了1
(或此软件包中的任何其他可执行文件)用于Windows应用程序注册。
要了解所有使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
0
egui.exe
echo /?
goto /?
if /?
reg /?