TrimStart()不正确地截断string

我写了一个脚本来将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 } 

见http://i.imgur.com/yryoDHM.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 } 

见http://i.imgur.com/IY3cwri.png 。 注意“d”是如何作为第一个字符出现的。

查看TrimStart的文档:

“TrimStart方法从当前string中删除trimChars参数中的所有主要字符。当遇到不在trimChars中的字符时,trim操作停止。

“D”是要移除的字符数组中的字符,所以TrimStart会这样做,因为它没有遇到任何不在数组中的字符。

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