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
norを使用する:: 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%%"^)
(注:^
サーカムフレックスアクセントを使用してエスケープされた括弧) の代わりに;Where "vendor like 'TeamViewer'"
- WMICに遭遇する可能性がある後続の
<CR>
問題解決策については、Dave BenhamのWMIC
および:末尾の問題FOR /F
の修正<CR>
。