0

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

现在看来,第一次运行脚本不会正确解锁驱动器。我知道,因为我的检查磁盘空间功能找不到正确的磁盘空间。脚本停止,但驱动器显示为未锁定。现在第二次运行脚本(驱动器从第一次运行时解锁)将找到磁盘空间并且脚本继续运行。

这是代码示例,希望您能帮助我找出为什么我需要运行脚本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"

next 函数第一次说“没有足够的空间”,但第二次说“足够的空间”

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

因此,似乎 unlock-bitlocker 无法在脚本中正确解锁。资源管理器说驱动器在第一次运行后解锁。在有或没有解锁功能的情况下第二次调用脚本会产生相同的结果 - 它可以工作。所以第一次运行必须以某种方式解锁驱动器。由于我的英语不是最好的,我希望我能足够好地描述这个问题。

非常感谢您的帮助!

4

1 回答 1

0

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

$backupDrive = getUSBDrive $validDriveIDs
unlockDrive $backupDrive $passwordToUnlock
$unlockedBackupDrive = getUSBDrive $validDriveIDs
checkFreeSpaceOnUSB $unlockedBackupDrive 
于 2017-11-25T23:51:25.773 回答