通过批处理脚本和 Net View 获取 Bitlocker 状态

Getting Bitlocker status via batch script and Net View

我一直在尝试为我的团队创建一种更简单的方法来获取我们网络上设备的 bitlocker 状态。在检查了这里和其他站点上的一系列单独答案后,我设法拼凑了一个 almost 工作批处理脚本,但它似乎没有正确提取条目。代码如下:

@echo off
color a
title BitLocker Checking
:start
cls
setlocal EnableDelayedExpansion

set i=0
for /F %%a in ('net view') do (
   set line=%%a
   if "!line:~0,2!" equ "\" (
      set /A i+=1
      echo [!i!]        !line:~2!
      set comp[!i!]=!line:~2!
   )
)

echo.
echo.
echo Choose a computer.
choice /c 12345678 >nul
set name=!comp[%errorlevel%]!

cls
for /f "tokens=1,2 delims=[]" %%A in ('manage-bde -status -computername %name% ^| find "Conversion Status"') do set derp=%%B
if "%name%"=="" goto start
echo The status of %name% is %derp%
echo.
echo.
echo %derp% | clip
echo. %derp% copyied to clipboard.
echo.
echo Press any key.
pause 
goto start

当我单独使用 manage-bde -status -computername %name% | find "Conversion Status" 行并为其提供计算机名时,它似乎正确地提取了转换状态行(例如 "Conversion Status : Fully Decrypted" 如果计算机上的 bitlocker 已关闭)。 但是,如果留在批处理文件的上下文中,它会输出 "The status of computernamegoeshere is" 然后是空白,就好像它没有将 Find 命令中的数据放入变量 %B.

有人有什么建议吗?好久没写批处理命令了,有点生疏

我认为输出中多余的白色 space 让您感到困惑。在 Win10 命令行上,这对我有用:

for /f "tokens=1,*" %A in ('manage-bde -status -computername %COMPUTERNAME% ^| findstr Conversion') do echo %A %B

导致输出(减去提示噪音):

Conversion Status:    Fully Decrypted
Conversion Status:    Fully Decrypted
Conversion Status:    Fully Decrypted

因此您需要删除 delims=[],将 tokens=1,2 更改为 tokens=1,*,使用 find 还是 findstr 由您决定。我的偏好是 findstr.