-1

У меня есть пакетный скрипт, который использует Защитник управления для переключения (включения и отключения) Защитника Windows. Он работает отлично, за исключением случаев, когда я добавляю его в контекстное меню правой кнопкой мыши, он не работает. Что-то не так с сценарием?

Defender Control работает с этими 2 командными строками:

Defendercontrol.exe /E - включить Защитник Windows

Defendercontrol.exe /D - отключить Защитник Windows

@echo off
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"
)

Я пытался добавить высоту, но все равно это не работает

@echo off
set ELEVATE_APP=Full command line without parameters for the app to run
set ELEVATE_PARMS=The actual parameters for the app
echo Set objShell = CreateObject("Shell.Application") >elevatedapp.vbs
echo Set objWshShell = WScript.CreateObject("WScript.Shell") >>elevatedapp.vbs
echo Set objWshProcessEnv = objWshShell.Environment("PROCESS") >>elevatedapp.vbs
echo objShell.ShellExecute "%ELEVATE_APP%", "%ELEVATE_PARMS%", "", "runas" >>elevatedapp.vbs
elveatedapp.vbs
DEL elevatedapp.vbs
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"
)

Я конвертирую BAT в EXE, используя Bat To Exe Converter

Затем я добавляю его в реестр с этим reg файлом.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\Toggle Windows Defender]
"icon"="D:\\MY APPS\\SCRIPTS\\Toggle Windows Defender\\Toggle Windows Defender.exe"


[HKEY_CLASSES_ROOT\Directory\Background\shell\Toggle Windows Defender\command]
@="D:\\MY APPS\\SCRIPTS\\Toggle Windows Defender\\Toggle Windows Defender.exe"

1 ответ1

-1

Решением заставить скрипт работать из контекстного меню было его повышение. Спасибо Шон за твой ответ

@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"
)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .