Настройка многодискового Macrium Auto Restore .vbs file - PullRequest
1 голос
/ 30 октября 2019

Предыдущая команда, в которой я работаю, создала скрипт vbs, который может автоматически запустить восстановление файла образа Macrium, расположенного на вставленном оптическом носителе. Проблема в том, что файл образа Macrium теперь слишком велик для одного диска, и теперь мы разбили его на 2 отдельных диска, поэтому теперь скрипт vbs работает не так, как должен.

Когда запускается автоматическое восстановление, он должен обнаружить диск 1, который заканчивается на 00.00.mrimg, и знать, что он является частью многодисковой установки, после чего он запрашивает следующий диск, заканчивающийся на 00-01.mrimg.

Я знаю, что это, вероятно, не имеет смысла, особенно если кто-то читает, не знакомый с Macrium. Но я сделаю все возможное, чтобы ответить на любые вопросы.

Я бы обычно подключался и пытался сам разобраться, но я не очень знаком с VBS, и проблема довольно чувствительна ко времени. Буду очень признателен за любую помощь.

Открыл скрипт AutoRestore.vbs, чтобы посмотреть, смогу ли я решить проблему, но я не знаю достаточно о vbs, чтобы ее исправить.

'AutoRestore.vbs
Dim fso, d, dc, s, n , Root, u, racine, folder, folderName, restoreString, foundFile, cdDrive
Dim wipe
Dim objShell

Set objShell = WScript.CreateObject("WScript.shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set dc = fso.Drives
foundFile = false
restoreString = "00-00.mrimg"

For Each d in dc
  Root = d.Driveletter & ":"
  racine = d.Driveletter & ":\"

  u= Detect(Root)
  if (( u="CD-ROM") ) then
    cdDrive = cdDrive & racine & " "
    if (d.isReady) then
      folderName = racine & "IAS\"
      Set folder = fso.GetFolder(folderName)
    end if
  end if
Next

If IsNull(folder) or IsEmpty(folder) Then
  MsgBox "Could not locate IAS folder containing restore image." & vbCrLf & "The following optical disk drives were searched: " & cdDrive & vbCrLf & "Please verify the media is the drive or use manual restore.", 48, "Folder Not Found" 
Else
  For each file in folder.Files
    If instr(1,file.Name, restoreString, vbTextCompare) > 0 Then
      return = objShell.run("""%ProgramFiles%\macrium\diskrestore.exe""" & folderName & file.Name & " -r -g -u --targetnum 0 --reboot --eject",1,false)
      foundFile = true
      Exit For
    End If
  Next

  if (foundFile = false) Then
    MsgBox "Cannot locate .mrimg file in " & folderName & "." & vbCrLf & "Please use manual restore.", 48, "File Not Found"
  End If
End If

Function Detect(DrivePath)
Dim fso, d, s, t
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(DrivePath)))
Select Case d.DriveType
Case 0: t = "Unknown"
Case 1: t = "Removable"
Case 2: t = "Fixed"
Case 3: t = "Network"
Case 4: t = "CD-ROM"
Case 5: t = "RAM Disk"
End Select
Detect = t
End Function

Ожидаемые результаты: Запустите AutoRestore.vbs, скрипт увидит файл 00-00.mrimg в папке IAS на оптическом носителе, а затем предложит вставить оптический носитель, содержащий файл 00-01.mrimg.

Фактические результаты: Запустите AutoRestore.vbs, затем Macrium сообщает: «Резервное копирование не завершено. Возможно, отсутствует хотя бы один файл».

1 Ответ

0 голосов
/ 31 октября 2019

Вы можете сначала скопировать все файлы mrimg во временную папку на жестком диске машины. После того, как они у вас есть, вы можете запустить Восстановление диска с этой папкой вместо привода CD-ROM.

Большая часть существующего кода будет работать. После цикла For Each d in dc вы знаете дисковод, в который вставляются диски. Вы можете добавить еще один цикл:

Dim tempFolder
Set tempFolder = fso.GetFolder("C:\AutoRestore\")

Do While MsgBox("Please insert disc and click OK. When all discs have been inserted, click Cancel", vbOKCancel, "Auto Restore") = vbOK

    For Each file In folder.Files
        If InStr(1, file.Name, ".mrimg") > 0 Then
            ' Copy file to Temp folder
            fso.CopyFile file.Path, tempFolder.Path & "\", True
        End If
    Next

Loop

После этого у вас должны быть все файлы mrimg в папке tempFolder. Я не знаком с параметрами, которые ожидает команда Marcium, но здесь вы должны указать новую папку:

objShell.run("""%ProgramFiles%\macrium\diskrestore.exe""" & tempFolder.Path & "\" & file.Name & " -r -g -u --targetnum 0 --reboot --eject",1,false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...