Назад | Перейти на главную страницу

wbadmin делает резервную копию всех локальных дисков

Я пытаюсь найти универсальный вариант wbadmin сценарий, который я могу развернуть на различных серверах Server 2008 R2.

Уловка, с которой я сталкиваюсь, заключается в том, что, хотя на всех серверах есть C :, некоторые имеют E :, некоторые E: и F: а некоторые имеют только F :.

Следующая команда:

wbadmin enable backup -addtarget:\\backup1\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:backupservice@domain.local -password:ladidada -quiet

Копирует только C :, и я не вижу никаких опций в wbadmin для резервного копирования всех локальных дисков. И, конечно, если я попробую снять проблему из пулемета (добавив -include:c:,d:,e:,f:... и тд) тогда получаем ERROR - The path specified by 'g:' was not found.

Пожалуйста, не говорите мне, что я должен перечислить все локальные диски и сделать это таким образом. Есть ли способ сказать wbadmin включать все локальные диски при резервном копировании?

Вот вариант, который автоматически избегает cd / dvd. Он намеренно выполняет резервное копирование только жестких дисков.

@echo off

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

set remotebackup=\\backupserver\path

for /F "usebackq eol=: skip=1 tokens=1" %%a in (
  `wmic logicaldisk where "drivetype=3" get deviceid`
) do (
  set "_drive=%%a:"
  set "_HDL=!_HDL!!_drive:~0,2!,"
)
if "%_HDL:~-1%"=="," (set _HDL=%_HDL:~0,-1%)
if "%_HDL:~-2%"==",:" (set _HDL=%_HDL:~0,-2%)

echo Found: %_HDL%

wbadmin start backup -backuptarget:%remotebackup% -include:!_HDL! -allCritical -vssCopy -quiet -systemState

Это часть запланированной задачи, поэтому wbadmin start используется, а не wbadmin enable.

Интересные здесь "drivetype=3" и используя usebackq (обязательный).

Код Марка помог отследить это.

Операторы if удаляют последнюю запятую или запятую и двоеточие, если они существуют. Не мог придумать более простого способа сделать это. %%a копируется в _drive поэтому его можно обрезать до первых двух символов (C :) с помощью :~0,2 синтаксис.

После кучи возни (я ненавижу пакетирование DOS), я придумал следующее. Вроде хорошо работает:

@echo off

SETLOCAL ENABLEEXTENSIONS
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /f %%I IN (
 'wmic volume get driveletter'
) DO (
  ECHO %%I | FIND ":"
  IF ERRORLEVEL 1 (
   echo Failed: %%I
  ) ELSE (
   ECHO %%I | FIND "D:"
   IF ERRORLEVEL 1 (
     IF NOT [!_TEMPVAR!]==[] SET _TEMPVAR=!_TEMPVAR!,
     SET _TEMPVAR=!_TEMPVAR!%%I
    ) ELSE (
      echo Skipping CD-ROM
    )
  )

)

wbadmin enable backup -addtarget:\\backupserver\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:backupservice@domain.local -password:1234password -quiet -include:!_TEMPVAR!

Рассечение - это:

Первая часть пакета находит все буквы дисков из wmic volume get driveletter. Он проверяет, действительно ли каждая строка является допустимой буквой диска (поскольку вывод включает некоторую подробную информацию, которая нам не нужна), проверяя наличие : персонаж.

Затем он проверяет, является ли диск D: поскольку в моей ситуации это все оптические приводы, которые вызывают ошибки, если они указаны в wbadmin и пропускает их.

Затем он проверяет, есть ли в строке содержимое. Если да, то добавляется запятая (,). Если строка пуста, она ничего не делает.

Затем он добавляет к переменной букву диска.

Он исполняет wbadmin:

  • wbadmin enable backup - указывает, что мы хотим настроить расписание резервного копирования Windows
  • -addtarget:\\enetsbackup1\Backups - Я хочу выполнить резервное копирование в сетевое расположение, поэтому указываю его здесь.
  • -schedule:23:00 - Я хочу, чтобы резервное копирование запускалось каждую ночь в 23:00
  • -systemState - Я хочу, чтобы состояние системы было включено для восстановления с нуля
  • -allCritical - Я хочу, чтобы были включены все критически важные системные диски (это важно, потому что приведенный выше сценарий только создает видимый буквы дисков. Могут быть разделы, которые нуждаются в резервном копировании для загрузки сервера, у которых нет букв дисков)
  • -vssFull - Это только резервное копирование, которое мы делаем на этом сервере, поэтому сообщите Windows Backup сбросить бит архива.
  • -user:backupservice@domain.local - Это учетная запись, которая входит в группу операторов резервного копирования в домене (и также должна быть в местный Группа «Операторы резервного копирования». Это очень плохой документ от Microsoft)
  • -password:1234password - Пароль для учетной записи службы резервного копирования.
  • -quiet - Не делайте никаких подсказок. Я собираюсь запустить это как сценарий запуска в групповой политике, поэтому подсказки плохие.
  • -include:!_TEMPVAR! - Это самая важная часть. Он определяет, для каких дисков требуется резервное копирование, и включает в себя набор дисков, которые мы собрали ранее.

И просто чтобы убедиться, что это сработало, проверьте это в графическом интерфейсе:

Вещи, которые, вероятно, можно улучшить: вместо того, чтобы запускать буквы дисков, GUID диска может быть более разумной идеей, потому что это не будет создавать резервные копии дисков, которые не смонтированы с буквами дисков. Поэтому, если вы смонтировали диск внутри раздела NTFS или на диске по какой-либо причине нет буквы, он будет пропущен.

в то время как решение, которое просматривает список дисков от wmi, было бы лучше. Если вы знаете, что у вас есть только e: f: и g: тогда это будет работать нормально.

set wbinclude=
if exist e:\*.* set wbinclude=e:\
if exist f:\*.* set wbinclude=%wbinclude% f:\
if exist g:\*.* set wbinclude=%wbinclude% f:\
if not "%wbinclude%"=="" set wbinclude=-includes %wbinclude%

echo wbadmin enable backup -addtarget:\\backup1\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:backupservice@domain.local -password:ladidada -quiet %wbinclude%