2015-10-06 3 views
0

Я ищу способ создания моментального снимка VSS для всех дисков на сервере, чтобы гарантировать, что функциональность работает должным образом - после чего мне нужно будет удалить моментальные снимки - так что Я просто держал его в покое.Пакетный файл: Автоматизация проверки моментальных снимков VSS

vssadmin create shadow /for=C: >> C:\temp\vssoutput.txt 
vssadmin create shadow /for=E: >> C:\temp\vssoutput.txt 

vssadmin delete shadows /for=C: 
vssadmin delete shadows /for=E: 

, как проходит время, я уже начинаю приходить на серверах с F: \, G: \ или даже точки SQL монтировании - так что я ищу, чтобы автоматизировать этот сценарий немного больше.

В идеале я хотел бы запустить проверку на дисках (wmic Volume get Capacity, Name), а затем установить их как переменную и запустить команду vssadmin на основе этой переменной, пройдя все до завершения.

любые идеи, с чего начать?

ответ

1

Вы можете использовать for /F для анализа вывода команды, например, командной строки wmic.

Во-первых, нам нужно собрать подходящую wmic команду:

wmic LOGICALDISK WHERE (DriveType=3 AND Size^>0) GET Name /VALUE 

Давайте использовать LOGICALDISK, а не чем VOLUME, потому что последний возвращает также детали без буквы диска и системных разделов зарезервирован.
Фильтр DriveType=3 включает только локальные диски; фильтр Size>0 исключает неформатные элементы (> должен быть экранирован как ^> в командной строке, потому что > имеет специальное значение - перенаправление).
Коммутатор /VALUE сообщает wmic, чтобы вернуть линии, такие как Name=C:.

Затем мы оборачиваем вокруг правильного for /F команды (см также for /? для справки):

for /F "tokens=2 delims==" %%V in (' 
    wmic LOGICALDISK WHERE ^(DriveType^=3 AND Size^^^>0^)^
     GET Name /VALUE 
') do for /F "delims=" %%L in ("%%V") do (
    echo.%%L 
    rem Here you may add your `vssadmin` command lines: 
    vssadmin create shadow /for=%%L >> C:\temp\vssoutput.txt 
    :: 
    vssadmin delete shadows /for=%%L 
) 

Есть на самом деле два вложенных for /F петли: внешний один разбирает вывод wmic командной строки и перечислены все найденные диски; внутренняя итерация выполняется ровно один раз на диск и предназначена для удаления символов возврата каретки, которые могут быть добавлены командой wmic.

Для использования построенной выше командной строки wmic в пределах for /F необходимо выделить несколько специальных символов; это объясняет дополнительные символы ^.


включить также в точках монтирования вывода команды wmic, вы можете использовать следующую командную строку:

wmic VOLUME WHERE (DriveType=3 AND FileSystem^>"" AND SystemVolume=FALSE) GET Name 

Фильтр DriveType=3 включает только локальных дисков; фильтр FileSystem>"" исключает неформатные элементы; фильтр SystemVolume=FALSE исключает системные зарезервированные разделы.

Чтобы проанализировать выходные данные с помощью for /F, вам необходимо избежать специальных символов на ^, как указано выше.

+0

Привет, спасибо за отклик - я вижу, что это работает шармом для логических дисков, однако моя основная проблема здесь - mounpoints - к сожалению, Logicaldisk не предоставляет информацию об этом - следовательно, ссылка на использование команды wmic volume. любые идеи о том, как это можно разместить? – Vanelder

+1

См. Мой [edit] (http://stackoverflow.com/revisions/32979578/2): я добавил командную строку 'wmic VOLUME', поэтому теперь должны быть включены точки монтирования; обратите внимание, что диски с единственными буквами, такими как 'D:', теперь передаются в 'vssadmin' с завершающим' \ ', поэтому' D: \ ', противоположным варианту' wmic LOGICALDISK', где передается 'D:'. .. – aschipfl

+0

Perfect, спасибо !! – Vanelder