バッチファイルを用いて、OSがWindows 10のPCからSymantec Endpoint Protection(以下SEP)を
アンインストール(できればサイレントで)して、新しいセキュリティソフトをインストールしたいです。
作業の順番としては先に新しいソフトを入れてからSEPをアンインストールしたいと考えています。
色々と検索しながらプロトタイプを作りましたが、改善したい部分が複数ございます。
作成したプロトタイプは以下の通りです。
bat
1@echo off 2 3set MYDIR=%~dp0 4 5rem 新しいソフトが稼働しているか確認 6 7sc qc "○○○○" >nul 8if not errorlevel 1 ( 9 goto no_install 10) else ( 11 goto newsoft_install 12) 13 14:no_install 15echo ○○○○は既にインストール済みです。 16timeout /t 3 /nobreak > nul 17echo. 18goto SEP_confirmation 19 20 21:SEP_confirmation 22rem SEPが稼働しているか確認 23 24sc qc "SISIPSService" >nul 25if not errorlevel 1 ( 26 goto SEP_exist 27) else ( 28 goto SEP_not_exist 29) 30 31 32:SEP_exist 33echo Symantec Endpoint Protectionがインストールされています。 34timeout /t 3 /nobreak > nul 35echo. 36goto SEP_uninstall 37 38 39:SEP_not_exist 40echo Symantec Endpoint Protectionはインストールされていません。 41timeout /t 3 /nobreak > nul 42echo. 43goto End 44 45 46:SEP_uninstall 47echo Symantec Endpoint Protectionをアンインストールします。 48timeout /t 3 /nobreak > nul 49echo. 50 51 52set Soft=Symantec Endpoint Protection 53if "%PROCESSOR_ARCHITECTURE%"=="x86" goto x86 54reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" | find "%Soft%">nul 55if %errorlevel% equ 0 ( 56 set Regpath1=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall 57 goto START 58) else ( 59 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" | find "%Soft%">nul && ( 60 set Regpath1=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 61 goto START 62 ) 63) 64 65:x86 66reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" | find "%Soft%">nul 67if %errorlevel% equ 0 ( 68 set Regpath1=HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 69) else ( 70 echo Application Program not found 71 exit /b 72) 73 74:START 75for /f "delims=[]" %%i in ('reg query "%Regpath1%" /s ^| findstr "%Regpath1% DisplayName %Soft%" ^| find /n /v "" ^| find "DisplayName" ^| find "%Soft%"') do ( 76 set /a cnt=%%i-1 77) 78 79:LOOP 80for /f "tokens=1* delims=[] " %%b in ('reg query %Regpath1% /s ^| findstr "%Regpath1% DisplayName %Soft%" ^| find /n /v "" ^| findstr /r "^[%cnt%]"') do ( 81 echo %%c | find "%Regpath1%">nul && ( 82 set Regpath2=%%c 83 goto SUB 84 ) 85) 86set /a cnt-=1 87goto LOOP 88 89:SUB 90for /f "tokens=2*" %%a in ('reg query "%Regpath2%" ^| find "UninstallString"') do ( 91 set UIS=%%b 92) 93rem --- %UIS% に、UninstallString値が入っている。 --- 94 95msiexec /x %UIS:~14% /passive SYMREBOOT=ReallySuppress REMOVE=ALL 96 97 98rem SEPが稼働しているか確認 99 100sc qc "SISIPSService" >nul 101if not errorlevel 1 ( 102 goto uninstall_failed 103) else ( 104 goto uninstall_successful 105) 106 107 108:uninstall_failed 109echo Symantec Endpoint Protectionはアンインストールされていません。 110timeout /t 3 /nobreak > nul 111echo. 112goto End 113 114 115:uninstall_successful 116echo Symantec Endpoint Protectionはアンインストールされました。 117timeout /t 3 /nobreak > nul 118echo. 119goto End 120 121 122:newsoft_install 123echo ○○○○をインストールします。 124timeout /t 3 /nobreak > nul 125echo. 126 127 128rem インストーラの存在を確認 129 130if not exist %MYDIR%\○○○○.exe ( 131 goto no_exe 132) else ( 133 goto yes_exe 134) 135 136 137:no_exe 138echo 同じフォルダにインストーラがありません。 139timeout /t 3 /nobreak > nul 140echo. 141goto End 142 143:yes_exe 144rem 新しいソフトをサイレントインストール 145 146%MYDIR%\○○○○.exe /install /quiet /norestart 147 148 149rem 新しいソフトが稼働しているか確認 150 151sc qc "○○○○" >nul 152if not errorlevel 1 ( 153 goto install_successful 154) else ( 155 goto install_failed 156) 157 158 159:install_successful 160echo 新しいソフトがインストールされました。 161timeout /t 3 /nobreak > nul 162echo. 163goto SEP_uninstall 164 165 166:install_failed 167echo 新しいソフトはインストールされていません。 168timeout /t 3 /nobreak > nul 169echo. 170 171 172 173 174:End 175echo batを終了します。 176timeout /t 3 /nobreak > nul
改善したい部分は2点ございます。
- sc qcではなく、sc queryでRUNNING状態か否かで分岐させるようにしたい
- バッチファイルを置いているのと同じフォルダ内に実行結果を出力したい
以上2点について色々と検索してみたのですが、どこをどう変えればいいのかよく分かりませんでした。
どなたか知恵をお貸しください。
(以下は可能であれば)
最初はSEPをサイレントでアンインストールしたくてmsiexecの行に/qnや/quietを付けてみたのですが
一向にアンインストールされず、やむを得ず現状の無人モード(/passive)で記述したところ、無事に
アンインストールが進みました。
いくら調べてもなぜ/qnや/quietではダメだったのか、どうすればよかったのかが分かりませんでした。
もしこれの解決方法をご存知の方がいれば、ご教示いただけると幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。