0

我正在尝试使用批处理文件自动将特定密钥发送到 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 下的第二个。

知道我做错了什么吗?

谢谢您的帮助,

Ĵ

4

3 回答 3

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
...

如果 npi 具有现有值,则额外的 SET 强制 npi 为 UNSET。为语句加上括号可确保 npi 未设置为行上的任何尾随空格。

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

于 2013-03-20T00:52:57.797 回答
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"
于 2013-03-20T00:54:08.867 回答
0

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

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

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
于 2019-02-14T19:23:58.290 回答