Мне нужен простой скрипт Toggle для Windows-приложения под названием Defender Control - PullRequest
0 голосов
/ 02 февраля 2019

Я использую это приложение под названием Защитник управления .Он работает с ключами командной строки «DefenderControl.exe / D» для отключения Защитника Windows и «DefenderControl.exe / E» для включения Защитника Windows.Я попытался создать и изменить другие сценарии переключения, но я не могу заставить одну работу.У меня очень мало знаний о сценариях.Я планирую добавить его в контекстное меню, вызываемое правой кнопкой мыши, чтобы быстро отключить Защитник Windows, не запуская и не отключая приложение.Заранее спасибо.

DefenderControl.exe /D

DefenderControl.exe /E

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Решением для работы скрипта из контекстного меню было его повышение.

@echo off
CLS
ECHO.

:init
setlocal DisableDelayedExpansion
set "batchPath=%~0"
for %%k in (%0) do set batchName=%%~nk
set "vbsGetPrivileges=%temp%\OEgetPriv_%batchName%.vbs"
setlocal EnableDelayedExpansion

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (echo ELEV & shift /1 & goto gotPrivileges)
ECHO.

ECHO Set UAC = CreateObject^("Shell.Application"^) > "%vbsGetPrivileges%"
ECHO args = "ELEV " >> "%vbsGetPrivileges%"
ECHO For Each strArg in WScript.Arguments >> "%vbsGetPrivileges%"
ECHO args = args ^& strArg ^& " "  >> "%vbsGetPrivileges%"
ECHO Next >> "%vbsGetPrivileges%"
ECHO UAC.ShellExecute "!batchPath!", args, "", "runas", 1 >> "%vbsGetPrivileges%"
"%SystemRoot%\System32\WScript.exe" "%vbsGetPrivileges%" %*
exit /B

:gotPrivileges
setlocal & pushd .
cd /d %~dp0
if '%1'=='ELEV' (del "%vbsGetPrivileges%" 1>nul 2>nul  &  shift /1)

REM get current status:
<"%userprofile%\defendercontrol.status" set /p status=
echo Currently: %status%
if "%status%"=="D" (
   defendercontrol.exe /E
   echo E>"%userprofile%\defendercontrol.status"
) else (
   defendercontrol.exe /D
   echo D>"%userprofile%\defendercontrol.status"
)
0 голосов
/ 02 февраля 2019

Это записывает статус в альтернативный поток данных (технически это файл, но привязан к пакетному файлу), поэтому статус сохраняется после перезагрузки:

@echo off
REM get current status:
<"%~f0:status" set /p status=
echo Currently: %status%
if "%status%"=="D" (
   defendercontrol.exe /E
   echo E>"%~f0:status"
) else (
   defendercontrol.exe /D
   echo D>"%~f0:status"
)

Для самого первого запуска статуспусто и обрабатывается так же, как и E (переходит в ветку else)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...