2017-11-24 4 views
0

私はpowershellバックアップスクリプトを作成しようとしています。
- 最初のステップは、(ドライブ-IDにより)特定のUSBドライブを自動検出することである
- ディスクの空き領域が
をチェックされている - - バックアップは、ハードドライブ
にコピーされ、その後、アンロック-BitLockerは(パスワードによる)
をドライブのロックを解除 - ロックビットロックがドライブを再びロックします。
- バックアップの成功に関するメールが送信されました。powershell bitlockerはドライブを正しくロック解除しません。

スクリプトが初めて実行されると、ドライブが正しくロック解除されません。私のチェックディスクスペース機能は正しいディスクスペースを見つけられないので、私はそれを知っています。スクリプトは停止しますが、ドライブはロック解除された状態で表示されます。 スクリプトを2回目に実行すると(ドライブは最初に実行されたときにロックが解除されます)、ディスクスペースが見つかるため、スクリプトは実行されたまま実行されます。

ここにコードのサンプルがありますが、ドライブのロックを解除し、コピーしてロックするためにスクリプトを2回実行する必要がある理由を知る手助けをしてください。

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

foreach ($drive in $connectedDrives) 
    foreach ($id in $validDriveIDs) 
     if ($drive.DeviceID -eq $id) 
      return $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 

これは、unlock-bitlockerがスクリプト内で正しくロック解除されないようです。 Explorerは最初の実行後にドライブがロック解除されていると言います。ロック解除機能の有無にかかわらずスクリプトを2回呼び出すと、同じ結果が得られます。そのため、最初の実行では何とかドライブのロックが解除されているはずです。 私の英語は最高ではないので、十分に問題を十分に説明できることを願っています。

ご協力いただきありがとうございます。

+4

ロックを解除した後にもう一度getUSBDriveを呼び出しますか?オブジェクトの中にメタデータがキャッシュされている可能性があります。また、更新されたデータを取得するためにOSから再度クエリする必要がありますか? –

+0

あなたは私の日を救った。今動作しています... $ backupDriveはドライブのロックを解除する前後で同じ$ backupDriveではありません。くそー。どうもありがとう! – bootsector

+1

@ArturBiesiadowski私は答えとして投稿することを提案したい – TheIncorrigible1

答えて

0

getUSBDriveの中にドライブの現在の状態の静的なコピーが表示されているようです。解決方法は、ディスクメタデータをロック解除し、以前の値を変数に上書きした後(または新しい値を使用して)、再度メタデータを取得することです。何かのように

$backupDrive = getUSBDrive $validDriveIDs 
unlockDrive $backupDrive $passwordToUnlock 
$unlockedBackupDrive = getUSBDrive $validDriveIDs 
checkFreeSpaceOnUSB $unlockedBackupDrive 
関連する問題