首页 > 解决方案 > 通过批处理脚本和网络视图获取 Bitlocker 状态

问题描述

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

@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"线路并为其提供计算机名时,它似乎正确地拉动了转换状态行(例如,如果机器上的 bitlocker 已关闭,则“转换状态:完全解密”)。但是,如果留在批处理文件的上下文中,它会输出“计算机名称goeshere 的状态是”,然后是一个空白,就好像它没有将 Find 命令中的数据获取到变量 %B 中一样。

有人有什么建议吗?自从我编写批处理命令以来已经有一段时间了,所以有点生疏。

标签: batch-filepipelinebitlocker

解决方案


我认为输出中多余的空白会让您感到困惑。在 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,2tokens=1,*,以及是否使用 find 或 findstr 由您决定。我的偏好是 findstr。


推荐阅读