Estoy pensando en crear un archivo por lotes que se ejecute al inicio, a través de GPO.
El lote instalará el host de TeamViewer para que podamos implementarlo para nuestros usuarios finales sin ninguna intervención de ellos.
El script está diseñado para ver si hay un archivo con el nombre de la máquina almacenado localmente y detenerse si lo hay. De lo contrario, elimine todo rastro de Teamviewer e instale la versión de host que tenemos y luego cree un archivo localmente para marcar que está instalada la versión correcta.
Cuando ejecutamos el script, la consola muestra el error "La sintaxis del comando es incorrecta".
¿Alguno de ustedes, magos, puede indicarme dónde me estoy equivocando, ya que imagino que si puedo ejecutar el archivo por lotes sin problemas, el GPO también debería poder hacerlo?
Si hay una manera más fácil o ordenada de hacer esto, hágamelo saber.
Cuando ejecutamos el script sin IF, funciona sin problemas.
if exist "C:\TeamViewer15\%computername%.jmw" (exit) else (
tasklist /FI "IMAGENAME eq TeamViewer.exe" 2>NUL | find /I /N "TeamViewer.exe">NUL
if "%ERRORLEVEL%"=="0" (GOTO :KILL) ELSE (GOTO :REMOVEMSI)
:KILL
taskkill /f /im TeamViewer.exe
TIMEOUT 2
GOTO :REMOVEMSI
:REMOVEMSI
wmic product where vendor="TeamViewer"
if not "%errorlevel%"=="0" GOTO :CHECKOS
for /f "tokens=2 delims==" %%f in ('wmic product Where "vendor like 'TeamViewer'" get IdentifyingNumber /value ^| find "="') do set "id=%%f"
msiexec.exe /x "%id%" /qn
GOTO :CHECKOS
:CHECKOS
cd\
Set "OS64=C:\Program Files (x86)"
IF EXIST "%OS64%" (GOTO :UNINSTALL64) ELSE (GOTO :UNINSTALL32)
:UNINSTALL64
cd\
Set "OLD64="C:\Program Files (x86)\TeamViewer\Version"*"
IF EXIST "%OLD64%" (GOTO :PREVIOUS64) ELSE (GOTO :REMOVE64)
:UNINSTALL32
cd\
Set "OLD32=C:\Program Files\TeamViewer\Version*"
IF EXIST "%OLD32%" (GOTO :PREVIOUS32) ELSE (GOTO :REMOVE32)
:PREVIOUS32
cd\
cd %ProgramFiles%\TeamViewer\Version*
IF NOT EXIST "*uninstall*" GOTO :REMOVE32
start uninstall.exe /S
GOTO :REMOVE32
:REMOVE32
cd\
cd %ProgramFiles%\TeamViewer
IF NOT EXIST "*uninstall*" GOTO :REMOVEFILES32
start uninstall.exe /S
GOTO :REMOVEFILES32
:REMOVEFILES32
reg delete "HKLM\Software\TeamViewer" /f
cd %temp%
rd TeamViewer /s /Q
GOTO :INSTALL
:PREVIOUS64
cd\
cd %ProgramFiles(x86)%\TeamViewer\Version*
IF NOT EXIST "*uninstall*" GOTO :REMOVE64
start uninstall.exe /S
GOTO :REMOVE64
:REMOVE64
cd\
cd %ProgramFiles(x86)%\TeamViewer
IF NOT EXIST "*uninstall*" GOTO :REMOVEFILES64
start uninstall.exe /S
GOTO :REMOVEFILES64
:REMOVEFILES64
reg delete "HKLM\Software\Wow6432Node\TeamViewer" /f
cd %temp%
rd TeamViewer /s /Q
REM INSTALL TEAM VIEWER HOST V15
start /wait msiexec.exe /i "\\DFSNAMESERVER\files\admin\Software Distribution\TeamViewer\TeamViewer_Host.msi" /qn CUSTOMCONFIGID=MYCUSTOMERCONFIGID APITOKEN=CUSTOMERAPITOKENKEY ASSIGNMENTOPTIONS="--reassign --alias %ComputerName% --grant-easy-access"
REM CREATE INSTALLATION MARKER
md C:\TeamViewer15
fsutil file createnew "C:\TeamViewer15\%computername%.jmw" 10
)
exit
Cambié los detalles de TeamViewer y del servidor para este foro (esos bits funcionan)
Muchas gracias tom
Respuesta1
A primera vista (tal vez incompleta):
- Nuncausar
:label
ni:: label-like comment
dentro de un bloque de comandoencerrado entre()
paréntesis. (línea 1): utilizarif exist "C:\TeamViewer15\%computername%.jmw" (exit)
en lugar deyeliminar el paréntesis de cierre correspondiente (línea 65, en algún lugar antes de laif exist "C:\TeamViewer15\%computername%.jmw" (exit) else (
exit
palabra clave). start
comandos (principalmente enlínea 61):Incluya siempre unTÍTULOpor ejemplo comostart "" /wait msiexec.exe /i …
- Más problemas con
for /f "tokens=2 delims==" %%f in …
(línea 12):
- el
like
operador requiere un carácter comodín con su consulta WQL, use%%
; - hay apóstrofes internos (incorrectos). Utilice comillas invertidas con
usebackq
estilo de cita alternativoen lugar de apóstrofes externos, o use algo comoWhere ^(vendor like "%%TeamViewer%%"^)
(notalos paréntesis se escaparon usando^
Circumflex Accent) en lugar de;Where "vendor like 'TeamViewer'"
- podrías encontrarte con el WMIC
<CR>
problema de seguimiento. Para obtener una solución, consulte Dave Benham.WMIC
yFOR /F
: una solución para el<CR>
problema del seguimiento.