wbadmin备份所有本地驱动器

我试图find一个适合所有的wbadmin脚本,我可以部署到各种Server 2008 R2服务器。

我遇到的问题是,虽然所有的服务器都有一个C :,有些有E :,有一个E:和一个F:有的只有一个F :.

以下命令:

 wbadmin enable backup -addtarget:\\backup1\Backups -schedule:23:00 -systemState -allCritical -vssFull -user:[email protected] -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因此可以使用:~0,2 _drive将其修剪为前2个字符(C :)。

而从wmi中查找驱动器列表的解决scheme会更好。 如果你知道你只有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:[email protected] -password:ladidada -quiet %wbinclude% 

在一堆垃圾(我讨厌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:[email protected] -password:1234password -quiet -include:!_TEMPVAR! 

解剖是:

该批的第一部分查找来自wmic volume get driveletter所有驱动器号wmic volume get driveletter 。 它通过检查:字符来检查每行是否是一个有效的驱动器号(因为输出包含一些我们不需要的详细信息)。

然后,它检查驱动器是否是D:就像我的情况一样,这些都是光驱,当在wbadmin指定时会导致错误并跳过它们。

然后,检查string是否包含内容。 如果有,则后缀为逗号( , )。 如果string是空白的,它什么也不做。

然后,它会将该驱动器号附加到该variables。

它执行wbadmin

  • wbadmin enable backup – 指定我们要设置Windows备份计划
  • -addtarget:\\enetsbackup1\Backups – 我想备份到一个networking位置,所以我在这里指定它。
  • -schedule:23:00 – 我希望备份在晚上11点运行
  • -systemState – 我想包含裸机还原的系统状态
  • -allCritical – 我希望包含所有关键系统驱动器(这很重要,因为上面的脚本只能生成可见的驱动器盘符,可能有些分区需要备份才能启动没有驱动器盘符的服务器)
  • -vssFull – 这是我们在此服务器上执行的唯一备份,因此请告诉Windows备份重置存档位。
  • -user:[email protected] – 这是该域中备份操作员组的成员帐户(也需要在本地备份操作员组中,这是微软很差的文档)
  • -password:1234password – 备份服务帐户的密码
  • -quiet – 不要做任何提示。 我将在组策略中将其作为启动脚本运行,因此提示很糟糕。
  • -include:!_TEMPVAR! – 这是最关键的部分。 它指定应备份哪些驱动器,并包括我们之前收集的驱动器的string。

只是为了确认它的工作,在GUI中检查它:

wbadmin命令的结果

事情可能会改善:不用从驱动器盘符运行,驱动器GUID可能是一个更聪明的想法,因为这不会备份没有安装盘符的驱动器 所以,如果您在NTFS分区中安装了磁盘,或者由于某种原因驱动器没有驱动器盘符,则会被跳过。