使用批处理从“manage-bde -get”获取ID

时间:2013-03-20 00:44:03

标签: batch-file

我正在尝试使用批处理文件自动将特定密钥发送到AD。不幸的是,我无法使用任何其他语言。我正在使用以下结果:

manage-bde -protectors c: -get

并使用下一个代码中的数字密码ID:

manage-bde -protectors -adbackup c: -id {numerical password ID}

这是我到目前为止所做的事情(只是想获得正确的密钥):

@echo off  
manage-bde -protectors c: -get  
echo+  
echo+  
echo+
for /f "tokens=1,*" %%a in (' "manage-bde -protectors c: -get" ^| findstr ID') do set npi=%%b
echo+
echo+
echo My Numerical Password ID:
echo %npi%
echo+
pause

我得到的是:

BitLocker驱动器加密:配置工具版本6.1.7601
版权所有(C)Microsoft Corporation。保留所有权利。

卷C:[]
所有钥匙保护器

数字密码:
ID:{DEDAF9BC-C42A-45A4-BB5D-609ED1898923} - 我想要这个 -
密码:
648712-106084-513103-486041-654894-310619-687401-654068

TPM:
ID:{DEDAF9BC-C42A-45A4-BB5D-609ED1898923}


我的数字密码ID:
{DEDAF9BC-C42A-45A4-BB5D-609ED1898923}

按任意键继续 。 。 。

我认为它只会抓住第一个“ID”,但它一直指向TPM下的第二个。

知道我做错了吗?

感谢您的帮助,

Ĵ

3 个答案:

答案 0 :(得分:1)

...
echo+
(set npi=)
for /f "tokens=1,*" %%a in (
' "manage-bde -protectors c: -get" ^| findstr ID'
) do IF NOT DEFINED npi set npi=%%b
...

如果具有现有值,则额外的SET强制npi为UNSET。对语句进行括号化可确保npi不会设置为该行的任何尾随空格。

FOR / F处理每一行输入,因此npi首先设置为第一个值,然后设置为第二个值。如果IF NOT DEFINED为er,则添加npi可确保SET发生,但尚未定义,因此它会保留遇到的FIRST值。

答案 1 :(得分:1)

if not defined之前添加set。如上面的脚本,set被调用两次,因为有两行匹配findstr "ID"。你最终会得到第二个,因为那是最后一个被解析的。 if not defined捕获第一个,然后忽略所有其他。

在次要注意事项上,当您想要的只是第二个令牌时,没有理由捕获token=1,*

@echo off  
manage-bde -protectors c: -get  
echo+  
echo+  
echo+
set npi=
for /f "tokens=2" %%a in ('manage-bde -protectors c: -get ^| findstr "ID:"') do if not defined npi set "npi=%%a"
echo+
echo+
echo My Numerical Password ID:
echo %npi%
echo+
pause

想要在你的时候脱掉牙箍吗?将for行替换为以下内容。

for /f "tokens=2 delims={}" %%a in ('manage-bde -protectors c: -get ^| findstr "ID:"') do if not defined npi set "npi=%%a"

答案 2 :(得分:0)

我知道这是一个老话题,但是我昨天才发现它,对我很有帮助。我只是想补充rojo的答案。

在Windows 10-1809中工作时,我发现返回的ID的顺序可能因计算机而异。如果您想要一个仅提取恢复密钥并将其发送到AD的脚本,则可以在您的manage-bde命令中添加-type(或-t)RecoveryPassword。

rojo的更新代码如下:

@echo off    
manage-bde -protectors c: -get -t RecoveryPassword
echo+  
echo+  
echo+
set npi=
for /f "tokens=2" %%a in ('manage-bde -protectors c: -get -t RecoveryPassword ^| findstr "ID:"') do set "npi=%%a"
echo+
echo+
echo My Numerical Password ID:
echo %npi%
echo+

manage-bde -protectors -adbackup c: -ID %npi%
pause