Коллега написал краткий, но содержательный пост для корпоративного блога, который сегодня и предлагается вашему вниманию (правильнее было бы назвать его «авторская русскоязычная версия, с изменениями и дополнениями»).

День добрый,
Меня зовут Владимир Ерёмин, я работаю в компании Veeam Software на позиции product manager. Одной из вверенных мне областей является PowerShell оснастка к нашему продукту Veeam Backup and Replication, и именно о работе с оной и пойдет речь далее.




Начнем с небольшого лирического отступления.
По ходу своей деятельности я неоднократно сталкивался с мнением, что скрипты и все, что с ними связано — это удел хардкорных бородачей, и, как говорил персонаж известного мультфильма, лучше не касаться их и десятиметровой палкой. В реальности, как это обычно водится, все выглядит несколько по-другому.
При должной сноровке знание PowerShell’a сильно облегчает жизнь – берешь задачу, выполнение которой потенциально могло занять N-ое количество часов, и, благодаря автоматизации, сводишь ее до нескольких минут. Избавляешь себя любимого от рутины, предотвращаешь фактор человеческой ошибки, вдобавок, учишься всякому новому и ранее неизведанному в процессе написания скриптов. Не стоит также забывать, что работа с тем же Nano Server’ом будет строиться исключительно через PowerShell. Поэтому, друзья, если вы не изучали PowerShell ранее, настоятельно рекомендую приступить к его изучению прямо сейчас.

Бесплатно не значит плохо


Как и у каждой уважающей себя софтверной компании, у нас есть свой флагманский продукт, в нашем случае — всем известный и горячо любимый Veeam Backup & Replication. Чтобы никто не ушел обиженным, выпускается он в нескольких версиях, начиная от Free и заканчивая Enterprise Plus.
Главная особенность, которой может похвастаться бесплатная версия, — функция упрощённого бэкапа, называемая VeeamZIP.
Несмотря на всю свою простоту и удобство, была у VeeamZIP одна раздражающая деталь, которая заставляла пользователей вновь и вновь проливать скупые и не очень слёзы на наших форумах, а именно — невозможность создавать бэкапы по расписанию.
Все поменялось, когда с выпуском Veeam Backup & Replication v8 Update 2 мы отдали на откуп общественности несколько PowerShell командлетов. Используя их, пользователь был в состоянии написать простой скрипт, с помощью которого создавался бэкап одной или нескольких машин. Помимо этого, благодаря Task Scheduler, скрипту можно было выставить какое угодно расписание.
Прекрасно понимания, что для некоторых пользователей комбинация слов “простой” и “скрипт” выглядит слегка странной, я написал небольшой пример (скачать его можно тут и тут). Ниже мы разберем его немного более подробно.

От слов к делу. Параметры


Как было сказано ранее, скрипт позволяет создавать бэкапы выбранных виртуальных машин. Машины могут находиться как на обычных хостах/кластерах, так и тех, что управляются vCenter’ом (да, в качестве разбора был выбран пример для VMware).
У скрипта есть три обязательных параметра: имена виртуалок, хосты/кластеры/vCenter, на которых они восседают, и папку, в которую положатся бэкапы.
Остальные параметры носят опциональный характер.

##################################################################
# Переменные, определяемые пользователем
##################################################################
# Имена ВМ для бэкапа. При наличии нескольких имён следует использовать запятую (обязательный параметр). Например, $VMNames = “VM1”,”VM2”
$VMNames = ""
# Имя сервера vCenter или хоста, кластера, где находятся ВМ (обязательный параметр)
$HostName = ""
# Папка для бэкапов. Например, C:\Backup (обязательный параметр)
$Directory = ""


В зависимости от желаний и предпочтений можно поменять уровень компрессии, время, в течение которого должен храниться бэкап, настройки VMware Quiescence, а также параметры уведомлений:

# Уровень компрессии(опционально; возможные значения: 0 – выкл., 4 – рекомендованный для дедупликационных хранилищ, 5 - оптимальный, 6 - высокий, 9 - максимальный)
$CompressionLevel = "5"
# VMware Tools Quiescence. «Заморозить» ВМ при создании снапшота (опционально; на машине должны быть установлены VMware Tools. Возможные значения: $True/$False)
$EnableQuiescence = $True
# Время хранения (опционально; по умолчанию, файлы VeeamZIP не удаляются, а хранятся в указанной папке неограниченное время.
# Возможные значения: Never, Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month)
$Retention = "Never"


Если есть необходимость получать отчёт о проделанной работе, можно поиграться с настройками уведомлений:

##################################################################
# Настройки уведомлений
##################################################################
# Включить уведомления (опционально)
$EnableNotification = $True
# Сервер SMTP
$SMTPServer = ""
# Отправитель
$EmailFrom = ""
# Получатель
$EmailTo = ""
# Тема
$EmailSubject = ""



Отчёт выглядит следующим образом:



Экспериментируя со значениями переменных, можно найти ту комбинацию, которая удовлетворит именно вашему представлению о прекрасном. К примеру, если вы хотите, чтобы бэкапы были удалены через две недели, поставьте переменной $Retention значение “In2Weeks” и так далее.
Для пущего удобства я снабдил переменные в скрипте кратким описанием, поэтому острой необходимости описывать здесь каждую настройку в отдельности и ее возможные значения, на мой взгляд, нет.

Расписание. Надежное, как швейцарские часы


Прежде чем ставить выполнение скрипта на поток, советую убедиться, что с ним в порядке, запустив его пару раз вручную.
Самый простой из известных мне способов запускать скрипты по расписанию – это Windows Task Scheduler.
Открываем его и переходим к созданию Basic Task.



Не забываем про то, что задания неплохо снабжать многозначительными именами и описаниями, чтобы не тратить впоследствии драгоценное время, гадая, что же это такое выполняется, а главное – с какой целью.
Следующая страница – Task Trigger.
Здесь всё просто и интуитивно понятно. Нужно решить, как часто нам хотелось бы создавать бэкапы (в английском под это дело есть умная аббревиатура – RPO, Recovery Point Objective), и отразить наши желания в виде заданных настроек.
Самый распространенный вариант – создание бэкапа раз в сутки.



Далее ставим время выполнения скрипта. Чтобы избежать излишних нагрузок на серверы в рабочее время, часто выбирают вечерние часы.



На следующей странице указываем запуск программы в качестве необходимого действия и следуем дальше.



В соответствующее поле вводим следующую команду:
Powershell –file “Путь к файлу Veeamzip.ps1”




Ну, вот и всё! Если вдруг вспомнили, что нужно внести кое-какие изменения в только что созданную задачу, то ставим флажок “Open the Properties” перед тем, как нажать “Finish”.



Есть серьезное подозрение, что в подавляющем большинстве случаев скрипт будет выполняться на сервере в то время, когда ответственный пользователь и не залогинен вовсе. В связи с чем рекомендуется указать логин и пароль, что позволит скрипту совершать свое черное дело без пользовательского логина в системе.



Т.к. мы люди мнительные, не будет лишним после создания задачи щелкнуть по ней правой кнопкой мыши и прогнать ее в тестовом режиме. (“Run”)

Вместо послесловия


Засим наше увлекательное путешествие в мир скриптов можно считать оконченным. Долгожданная цель (бэкапы по расписанию) достигнута, а интерес к PowerShell пробужден, по крайней мере, я искреннее надеюсь на это. Не стесняйтесь по всем возникшим вопросам обращаться к нам как здесь, так и на наших форумах (forums.veeam.com).
До новых встреч!

Полезные ссылки


Комментарии (11)


  1. navion
    01.03.2016 13:42

    Где задаются параметры аутентификации для папки или чьи разрешения наследуются?
    Зачем реализовывать уведомления в скрипте, если работают (если в девятке их не сломали) стандартные из настроек VBR по завершении задания?
    И самое главное, зачем напрямую перечислять имена ВМ, когда есть (был в v8) Find-VBRViEntity с фильтром по тагам и именам?


    1. Loxmatiymamont
      01.03.2016 15:26
      +2

      • наследуются права пользователя с которыми запускается veeam backup сервис
      • очевидно, что уведомления можно слать разным людям и по разным поводам
      • select * или select name. Выбор за вами.


    1. polarowl
      01.03.2016 17:04
      +1

      Пара уточнений и пояснений от автора скрипта:

      1. Запускаемся под аккаунтом, под которым запущена служба Veeam Backup Service (как уже сказал коллега). Поэтому именно этот аккаунт должен иметь права на необходимую папку.
      2. Речь в статье идет о бесплатной версии продукта, в котором уведомлений нет.
      3. Командлет никуда не пропал, а активно используется в самом скрипте. Просто есть предположение, что большинству пользователей наши PS командлеты неизвестны, в противовес именам машинок, которые они хотят забекапить.


      1. navion
        03.03.2016 01:05

        Спасибо за развёрнутый ответ. Второй пункт надо будет проверить, а пока сижу на триалке и думаю покупать или нет — даже Essentials Standard выходит в три раза дороже любого софта, который развёрнут на сервере.


  1. dazran
    01.03.2016 14:03

    Ссылки на скрипты ведут в никуда, не поленился нашел на оригинал записи но и там ссылки на скрипты всё-равно дохлые
    Попутно заметил что во многих статьях в блоге отсутствуют изображения.


    1. polarowl
      01.03.2016 14:21

      Спасибо, как раз проверяем, в чем проблема. Как только починим — сразу сигнализируем.


    1. polarowl
      01.03.2016 16:56
      +1

      Ссылки починили, можно пользоваться.


  1. Ethril
    01.03.2016 17:47
    +1

    Пошто в v9 поломали Start-VBRZip -BackupRepository, ироды!


    1. navion
      01.03.2016 23:15
      +1

      Не сломали, а починили!


  1. VahMaster
    02.03.2016 18:04

    как бекапить на сетевую шару, где подключение с альтернативными кредами?


    1. polarowl
      04.03.2016 14:01

      На сегодня возможности указать конкретный аккаунт в командлете нет, так что нужно обеспечить наличие всех необходимых прав у аккаунта Veeam Backup Service (в частности, убедиться, что он имеет доступ до этой шары).

      И еще фидбэк от автора скрипта:

      • Можно замапить network драйв под какими-нибудь кредами, предварительно дав аккаунту компа пермиссии на запись на эту шару. И попробовать залить на замапленный диск через VeeamZIP (не проверял лично). Теперь думаем над тем, чтобы прокинуть параметры
        –NetworkCredentials для командлета Start-VBRZIP. Спасибо за вопрос, натолкнувший на полезную идею!