TrimStart() 错误地截断字符串

TrimStart() 错误地截断字符串

我编写了一个脚本来将 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 会这样做,因为它还没有遇到任何不存在于数组中的字符。

将来,请先阅读有关该方法的文档。

相关内容