Я работаю над сценарием, который помогает стандартизировать образ Windows 8.1 Pro. В этой части я пытаюсь проверить, зашифровал ли BitLocker диск или нет, используя следующий скрипт:

:VerifyEncryption
REM Verifies if the OS is encrypted
cls
echo Verifying if the primary drive is encrypted by BitLocker...
cd %SystemRoot%\system32
for /F "tokens=1*" %%G in ('MANAGE-BDE -STATUS ^| FIND /I "ENCRYPTION_METHOD:"') do ( 
  IF "%%H"=="NONE" (
      GOTO :ENCRYPT
  ) ELSE (
  GOTO :DONTENCRYPT
  )
)

:DONTENCRYPT
echo Encrypted.
pause
exit

:ENCRYPT
echo Not Encrypted.
pause
exit

Независимо от того, зашифрована машина или нет, я всегда получаю "Зашифровано". Несмотря на то, что я не получаю сообщения об ошибках, он по умолчанию переходит к следующей строке, фактически не выполняя проверку. Кто-нибудь может пролить свет?

2 ответа2

0

ЕСЛИ чувствителен к регистру. Вы должны использовать IF /I или соответствовать случаю вывода команды manage-bde -status:

IF "%%H"=="None"

Или, без учета регистра:

IF /I "%%H"=="NONE"

Точно так же вам также нужно сопоставить вывод команды в этой строке:

for /F "tokens=1*" %%G in ('MANAGE-BDE -STATUS ^| FIND /I "ENCRYPTION_METHOD:"') do (

Вы ищете ENCRYPTION_METHOD:, но необходимо найти метод шифрования: (удалите подчеркивание). Из-за дополнительного места вам также нужно поменять токены = 1 * на токены = 2 *::

for /F "tokens=2*" %%G in ('MANAGE-BDE -STATUS ^| FIND /I "ENCRYPTION METHOD:"') do (
0

Это работает в Windows 8, Windows 10 и Server 2012R2 (все 64-разрядные):

FOR /F "skip=10 tokens=2*" %%t in ('manage-bde c: -STATUS')

Этот работает на Windows 7 (64-разрядная версия):

FOR /F "skip=10 tokens=2*" %%t in ('manage-bde -STATUS')

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