Я пытаюсь найти универсальный вариант 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%