Estou pensando em criar um arquivo em lote que seja executado na inicialização, via GPO.
O lote instalará o host TeamViewer para que possamos implantá-lo para nossos usuários finais sem qualquer intervenção deles.
O script foi projetado para verificar se existe um arquivo com o nome da máquina armazenado localmente e para parar se houver. Caso contrário, remova todos os vestígios do Teamviewer e instale a versão do host que temos para criar um arquivo localmente para marcar se a versão correta está instalada.
Quando executamos o script, o console apresenta o erro ‘A sintaxe do comando está incorreta’.
Por favor, algum de vocês, assistentes, pode informar onde estou tropeçando enquanto imagino que, se eu puder executar o arquivo em lote sem problemas, o GPO também poderá fazê-lo.
Se houver uma maneira mais fácil ou organizada de fazer isso, por favor me avise.
Quando executamos o script sem o IF, ele funciona sem 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
Alterei os detalhes do TeamViewer e do servidor deste fórum (essas partes funcionam)
Muito obrigado Tom
Responder1
À primeira aparição (talvez incompleta):
- Nuncause
:label
nem:: label-like comment
dentro de um bloco de comandoentre()
parênteses. (linha 1): useif exist "C:\TeamViewer15\%computername%.jmw" (exit)
em vez deeremova o parêntese de fechamento correspondente (linha 65, em algum lugar antes daif exist "C:\TeamViewer15\%computername%.jmw" (exit) else (
exit
palavra-chave). start
comandos (principalmente emlinha 61):Sempre inclua umTÍTULOpor exemplo, comostart "" /wait msiexec.exe /i …
- Mais problemas com
for /f "tokens=2 delims==" %%f in …
(linha 12):
- o
like
operador requer um caractere curinga com sua consulta WQL, use%%
; - existem apóstrofos internos (errados). Use crases com
usebackq
estilo de citação alternativoem vez de apóstrofos externos, ou use algo comoWhere ^(vendor like "%%TeamViewer%%"^)
(observeparênteses escapados usando^
acento circunflexo) em vez de;Where "vendor like 'TeamViewer'"
- você pode encontrar o WMIC
<CR>
problema final. Para solução, veja Dave Benham'sWMIC
eFOR /F
: uma correção para o<CR>
problema final.