Ich möchte eine Batchdatei erstellen, die beim Start über GPO ausgeführt wird.
Der Batch installiert den TeamViewer-Host, sodass wir dies unseren Endbenutzern ohne Eingabe ihrerseits bereitstellen können.
Das Skript soll prüfen, ob eine Datei mit dem lokal gespeicherten Computernamen vorhanden ist, und es stoppen, wenn dies der Fall ist. Wenn nicht, entfernen Sie alle Spuren von Teamviewer und installieren Sie die Hostversion, die wir dann haben, um lokal eine Datei zu erstellen, die die richtige Version kennzeichnet.
Wenn wir das Skript ausführen, gibt die Konsole den Fehler „Die Syntax des Befehls ist falsch.“ aus.
Kann mir bitte einer von euch Zauberern einen Hinweis darauf geben, wo ich stolpere? Ich stelle mir nämlich vor, dass, wenn ich die Batchdatei problemlos ausführen kann, dies mit der Gruppenrichtlinie ebenfalls möglich sein sollte.
Wenn es einen einfacheren oder saubereren Weg gibt, lassen Sie es mich bitte wissen.
Wenn wir das Skript ohne IF ausführen, funktioniert es problemlos.
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
Ich habe die TeamViewer- und Serverdetails für dieses Forum geändert (diese Teile funktionieren)
Vielen Dank, Tom
Antwort1
Auf den ersten Blick (möglicherweise unvollständig):
- NiemalsVerwenden Sie
:label
noch:: label-like comment
innerhalb eines Befehlsblocks()
in Klammern eingeschlossen . (Linie 1): verwenden Sieif exist "C:\TeamViewer15\%computername%.jmw" (exit)
anstelle vonUndEntfernen Sie die entsprechende schließende Klammer (Linie 65, irgendwo vor demif exist "C:\TeamViewer15\%computername%.jmw" (exit) else (
exit
Schlüsselwort). start
Befehle (hauptsächlich inLinie 61):Fügen Sie immer einTITELzB alsstart "" /wait msiexec.exe /i …
- Weitere Probleme mit
for /f "tokens=2 delims==" %%f in …
(Linie 12):
- Der
like
Operator erfordert ein Platzhalterzeichen bei Ihrer WQL-Abfrage. Verwenden Sie%%
; - Es gibt (falsche) innere Apostrophe. Verwenden Sie entweder Backticks mit
usebackq
alternativer Zitierstilanstelle von äußeren Apostrophen, oder verwenden Sie etwas wieWhere ^(vendor like "%%TeamViewer%%"^)
(HinweisKlammern werden mit^
Circumflex Accent maskiert) anstatt;Where "vendor like 'TeamViewer'"
- Sie könnten auf das WMIC stoßenSchleppproblem
<CR>
. Die Lösung finden Sie in Dave BenhamsWMIC
undFOR /F
: Eine Lösung für das Trailing<CR>
-Problem.