Depois de um monte de mucking ao redor (eu odeio DOS batching), eu vim com o seguinte. Parece funcionar bem:
@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:[email protected] -password:1234password -quiet -include:!_TEMPVAR!
Uma dissecação é:
A primeira parte do lote encontra todas as letras de unidade de wmic volume get driveletter
. Ele verifica se cada linha é realmente uma letra de unidade válida (pois a saída inclui algumas informações detalhadas que não são necessárias) verificando o caractere :
.
Em seguida, ele verifica se a unidade é a D:
, pois, na minha situação, todas são unidades óticas, que causam erros quando especificadas em wbadmin
e as ignoram.
Em seguida, ele verifica se a string tem conteúdo. Em caso afirmativo, sufixa uma vírgula ( ,
). Se a string está em branco, não faz nada.
Em seguida, vai e acrescenta a letra da unidade à variável.
O, executa wbadmin
:
-
wbadmin enable backup
- especifica que queremos configurar um agendamento do Backup do Windows
-
-addtarget:\enetsbackup1\Backups
- Eu quero fazer backup em um local de rede, então estou especificando aqui.
-
-schedule:23:00
- Eu quero que os backups sejam executados às 23h todas as noites
-
-systemState
- Eu quero o estado do sistema incluído para restaurações bare-metal
-
-allCritical
- Eu quero todas as unidades de sistema críticas incluídas (isso é importante porque o script acima apenas constrói letras de unidade visíveis . Pode haver partições que precisem de backup para inicializar o servidor que não tem letras de unidade)
-
-vssFull
- Este é o backup somente que estamos fazendo neste servidor, portanto, informe ao Windows Backup para redefinir o bit arquivado.
-
-user:[email protected]
- Essa é a conta que é membro do grupo Operadores de backup no domínio (e também precisa estar no grupo de operadores de cópia local . Isso é muito mal documentado pela Microsoft)
-
-password:1234password
- A senha da conta do serviço de backup
-
-quiet
- não faz nenhum aviso. Eu vou estar executando isso como um script de inicialização em uma política de grupo, então os prompts são ruins.
-
-include:!_TEMPVAR!
- Esta é a parte mais crítica. Ele especifica quais unidades devem ser submetidas a backup e inclui a cadeia de unidades que coletamos anteriormente.
E apenas para confirmar que funcionou, verifique na GUI:
Coisas que provavelmente podem ser melhoradas: em vez de executar letras de unidade, o GUID da unidade pode ser uma ideia mais inteligente, porque não fará backup de unidades que não estejam montadas com letras de unidade . Portanto, se você montou um disco dentro de uma partição NTFS, ou se a unidade não tiver uma letra de unidade por algum motivo, ela será ignorada.