我即将编写一个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表示首次运行后驱动器已解锁。使用或不使用解锁功能第二次调用脚本会产生相同的结果 - 它可以工作。所以第一次运行必须以某种方式解锁驱动器。 由于我的英语不是最好的,我希望我能够很好地描述这个问题。
非常感谢您的帮助!
答案 0 :(得分:0)
似乎在getUSBDrive中你得到了当前驱动器状态的静态副本。解决方案是在解锁磁盘元数据并覆盖变量中的先前值(或使用新值)后再次检索磁盘元数据。像
这样的东西$backupDrive = getUSBDrive $validDriveIDs
unlockDrive $backupDrive $passwordToUnlock
$unlockedBackupDrive = getUSBDrive $validDriveIDs
checkFreeSpaceOnUSB $unlockedBackupDrive