powershell bitlocker无法正确解锁驱动器

时间:2017-11-24 13:48:00

标签: powershell unlock bitlocker

我即将编写一个powershell备份脚本 - 第一步是自动检测特定的USB驱动器(通过驱动器ID)
- 然后,解锁位锁解锁驱动器(通过密码)
- 检查可用磁盘空间
- 备份被复制到硬盘驱动器
- 锁定位锁再次锁定驱动器 - 发送有关备份成功的电子邮件。

现在看来,第一次运行脚本不会正确解锁驱动器。我知道,因为我的check-disk-space函数找不到合适的磁盘空间。脚本停止,但驱动器显示为已解锁。 现在第二次运行脚本(驱动器从第一次运行开始解锁)将找到磁盘空间并且脚本继续按原样运行。

这里是一个代码示例,我希望你能帮我找出为什么我需要运行脚本2次来解锁,复制和锁定驱动器。

function getUSBDrive($validDriveIDs)
$connectedDrives = Get-WmiObject Win32_Volume

foreach ($drive in $connectedDrives) 
     foreach ($id in $validDriveIDs) 
        if ($drive.DeviceID -eq $id) 
            return $drive

所以在$ drive中我得到了有效的USB驱动器 下一个功能应解锁我的驱动器

function unlockDrive ($backupDrive, $password) 
$SecureString = ConvertTo-SecureString $password -AsPlainText -Force

$DriveLetter = $backupDrive.DriveLetter
Unlock-BitLocker -MountPoint $DriveLetter -Password $SecureString

write-Host "unlocked"

下一个功能第一次说“空间不够”,但第二次“足够空间”

function checkFreeSpaceOnUSB($backupDrive)

$freeSpace = ($backupDrive.FreeSpace / 1GB) 

if ($freeSpace -lt $minimumDiskSpace)
    write-Host "less than $minimumDiskSpace GB free Space on USB Drive"
    return 0

else 
    write-Host "Drive has enough space"
    return 1

这就是我称之为这些功能的方式:

$backupDrive = getUSBDrive $validDriveIDs
unlockDrive $backupDrive $passwordToUnlock
checkFreeSpaceOnUSB $backupDrive

所以似乎解锁 - bitlocker无法在脚本中正确解锁。 Explorer表示首次运行后驱动器已解锁。使用或不使用解锁功能第二次调用脚本会产生相同的结果 - 它可以工作。所以第一次运行必须以某种方式解锁驱动器。 由于我的英语不是最好的,我希望我能够很好地描述这个问题。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

似乎在getUSBDrive中你得到了当前驱动器状态的静态副本。解决方案是在解锁磁盘元数据并覆盖变量中的先前值(或使用新值)后再次检索磁盘元数据。像

这样的东西
$backupDrive = getUSBDrive $validDriveIDs
unlockDrive $backupDrive $passwordToUnlock
$unlockedBackupDrive = getUSBDrive $validDriveIDs
checkFreeSpaceOnUSB $unlockedBackupDrive