Я рассматриваю возможность создания пакетного файла, который будет запускаться при запуске системы через GPO.
Пакет установит хост TeamViewer, чтобы мы могли развернуть его для наших конечных пользователей без какого-либо участия с их стороны.
Скрипт предназначен для проверки наличия локально сохраненного файла с именем машины и остановки, если он есть. Если нет, то удаляем все следы Teamviewer и устанавливаем версию хоста, которая у нас есть, а затем создаем локально файл, чтобы отметить, что установлена правильная версия.
При запуске скрипта консоль выдает ошибку «Неверный синтаксис команды».
Пожалуйста, кто-нибудь из вас, мастера, может подсказать, где я споткнулся, поскольку я предполагаю, что если я могу запустить пакетный файл без проблем, то и GPO должен с этим справиться.
Если есть более простой или аккуратный способ сделать это, пожалуйста, дайте мне знать.
При запуске скрипта без IF он работает без проблем.
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
Я изменил данные TeamViewer и сервера для этого форума (эти части работают)
Большое спасибо, Том.
решение1
При первом появлении (возможно неполном):
- Никогдаиспользовать
:label
ни:: label-like comment
внутри командного блоказаключено в()
скобки. (линия 1): использоватьif exist "C:\TeamViewer15\%computername%.jmw" (exit)
вместоиудалите соответствующую закрывающую скобку (строка 65, где-то передif exist "C:\TeamViewer15\%computername%.jmw" (exit) else (
exit
ключевым словом). start
команды (в основном встрока 61):Всегда включайтеЗАГОЛОВОКнапример какstart "" /wait msiexec.exe /i …
- Больше проблем с
for /f "tokens=2 delims==" %%f in …
(строка 12):
- оператор
like
требует использования подстановочного знака в вашем запросе WQL, используйте%%
; - есть (неправильные) внутренние апострофы, используйте либо обратные кавычки с
usebackq
альтернативный стиль цитированиявместо внешних апострофов или используйте что-то вродеWhere ^(vendor like "%%TeamViewer%%"^)
(примечаниеСкобки экранированы с помощью^
Circumflex Accent) вместо;Where "vendor like 'TeamViewer'"
- вы можете столкнуться с WMIC
<CR>
проблема с отставанием. Для решения см. Дэйва БенхэмаWMIC
иFOR /F
: Исправление<CR>
проблемы с отставанием.