VBScript не работает должным образом, когда запланировано - PullRequest
0 голосов
/ 26 июня 2018

У меня есть VBScript для резервного копирования нескольких ключей реестра в один файл:

Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

arrRegPaths = Array( _
      "HKEY_CURRENT_USER\RegKey1\", _
      "HKEY_CURRENT_USER\RegKey2\", _
      "HKEY_CURRENT_USER\RegKey3\" _
      )

Const intForReading = 1
Const intUnicode = -1

strFileName = objShell.ExpandEnvironmentStrings("%UserProfile%") & "\FolderName\FileName.reg"

Set objRegFile = objFSO.CreateTextFile(strFileName, True, True)
objRegFile.WriteLine "Windows Registry Editor Version 5.00"

For Each strRegPath In arrRegPaths
      strCommand = "cmd /c REG EXPORT " & strRegPath & " " & Replace(strRegPath, "\", "_") & ".reg"
      objShell.Run strCommand, 0, True
      If objFSO.FileExists(Replace(strRegPath, "\", "_") & ".reg") = True Then
            Set objInputFile = objFSO.OpenTextFile(Replace(strRegPath, "\", "_") & ".reg", intForReading, False, intUnicode)
            If Not objInputFile.AtEndOfStream Then
                  objInputFile.SkipLine
                  objRegFile.Write objInputFile.ReadAll
            End If
            objInputFile.Close
            Set objInputFile = Nothing
            objFSO.DeleteFile Replace(strRegPath, "\", "_") & ".reg", True
      End If
Next

objRegFile.Close
Set objRegFile = Nothing

Я могу запустить его прямо из Проводника (Win10), напрямую из CMD или с помощью WScript / CScript, и он отлично работает. Требуется около 2 секунд, и выходной файл имеет все, что должен иметь.

Но когда я пытаюсь запустить его как запланированное задание, оно никогда не завершается. Я оставил его на несколько минут, а потом убил вручную. Когда я смотрю на выходной файл после этого, все, что у него есть - это первая строка, Редактор реестра Windows, версия 5.00. Так что я знаю, что скрипт находит целевой файл в порядке, и он запускает первый WriteLine. Но после этого он зависает или что-то в этом роде.

Как я могу заставить его работать как запланированное задание?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Понял, и это на самом деле не имеет ничего общего с кодом. Я выложу ответ на случай, если кто-нибудь еще столкнется с чем-то подобным. Оказывается, проблема была в самой запланированной задаче - мне нужно было поместить папку в поле «Начать с» (при указании действия, которое нужно запланировать). Я предполагаю, что это потому, что скрипт выводит временные файлы по пути, поэтому ему нужно место для их размещения. В любом случае, как только я заполнил этот пробел, он начал успешно работать.

0 голосов
/ 27 июня 2018

Не пробовал ваш код, но вы посылаете команду из командной строки в вашем скрипте. Это кажется мне нелогичным. Вы, вероятно, лучше, нажав на реестр прямо из вашего скрипта. Вы можете найти примеры того, как это сделать здесь: https://docs.microsoft.com/en-us/windows/desktop/WmiSdk/wmi-tasks--registry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...