我编写了一个脚本来将 BitLocker 密钥备份到 Active Directory。除非密码 ID 以“D”开头,否则该脚本运行良好。以下是脚本
#Get recovery info
$recoveryinfo = manage-bde -protectors -get c:
#Check if bitlocker key could be located
If ($recoveryinfo -match 'All Key Protectors')
{
$recoveryinfo
$arr = $recoveryinfo | Select-String -Pattern 'ID:'
$arr[1] = $arr[1].ToString().TrimStart('ID: {')
$arr[1] = $arr[1].ToString().TrimEnd('}')
$key = $arr[1]
$key = '{' + $key + '}'
#Backup bitlocker key to active directory
manage-bde -protectors -adbackup C: -id $key
}
Else
{
$recoveryinfo
}
看https://i.stack.imgur.com/kFPs4.png。请注意 $key 缺少第一个字符“d”。
我已经修改了脚本,它似乎适用于所有密码 ID,但我想了解为什么我的第一次尝试失败,以便在以后的脚本中避免错误。以下是改进的脚本:
#Get recovery info
$recoveryinfo = manage-bde -protectors -get c:
#Check if bitlocker key could be located
If ($recoveryinfo -match 'All Key Protectors')
{
$recoveryinfo
$arr = $recoveryinfo | Select-String -Pattern 'ID:'
$arr[1] = $arr[1].ToString().Substring(11, 36)
$key = $arr[1]
$key = '{' + $key + '}'
#Backup bitlocker key to active directory
manage-bde -protectors -adbackup C: -id $key
}
Else
{
$recoveryinfo
}
看https://i.stack.imgur.com/cldPc.png。注意“d”是如何作为第一个字符出现的。
答案1
查看文档修剪开始:
“TrimStart 方法从当前字符串中删除 trimChars 参数中的所有前导字符。当遇到不在 trimChars 中的字符时,修剪操作将停止。”
“D” 是要删除的字符数组中的一个字符,因此 TrimStart 会这样做,因为它还没有遇到任何不存在于数组中的字符。
将来,请先阅读有关该方法的文档。