Опрос CDP/LLDP с ESXi через PowerShell/Python

Однажды у вас может возникнуть желание составить таблицу портов коммутаторов, к которым подключены ваши хосты.

Если у вас “гомогенное” окружение, состоящее из коммутаторов Cisco, то заморачиваться не нужно совсем (CDP настроен в Virtual Switch Standard/Distributed Virtual Switch по умолчанию).

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

  • использовать только распределенные коммутаторы;
  • включать на них поддержку LLDP;
  • с удивлением обнаружить, что в API опрос CDP и LLDP происходит по-разному.

Continue reading “Опрос CDP/LLDP с ESXi через PowerShell/Python”

Заметочка про Custom Attributes

Потребовалось проставить Custom Attribute для виртуальных машин.

На помощь, как обычно, пришел Google и подсказал следующее решение:

PowerShell, SCSILunPath и Datastore Name

Обратился ко мне за советом постоянный читатель: помоги, говорит, с моим iSCSI-массивом NetApp. Пытаюсь вывести Get-SCSILunPath, так там ни имени датастора, ни IP-адреса “таргета” в SanId нет 🙁

Посмотрел – и действительно так: в отличие, например, от Huawei, NetApp не выводит IP-адрес IQN-Target в выводе атрибутов Get-SCSILunPath. Да и привязать CanonicalName вида naa.thebeststoragearray к датастору с первого взгляда не удается…

Continue reading “PowerShell, SCSILunPath и Datastore Name”

PowerShell, REST и Excel

Обнаружили проблему: командлет Get-OrgVdcNetwork почему-то не выводит часть сетей orgVDC. Опытным путем выяснили, что ему не нравятся Shared-сети, то есть сети доступные из нескольких orgVDC.

Для решения проблемы решили воспользоваться REST API от vCloud Director.

А чтобы было не скучно, решили вывод сетей делать сразу в файл Excel, чтобы уменьшить количество ручной работы.

Оригинал PoSH-скрипта я положил на гитхаб, тут его приведу для наглядности (хотя с отступами при копипасте беда).

Скрипту понадобится список vCloud Director’ов в файле vcd_list.txt.

  1. скрипт запрашивает учетные данные для подключения к vCD;
  2. скрипт считывает список vCloud Director’ов из текстового файла;
  3. создает Excel-файл, а на нем одноименный лист по каждому vCD;
  4. заполняет список сетей по vCD на листе;
  5. сохраняет результат в файле orgvdcnet.xlsx

Что стоило бы доделать – проверку на наличие установленного Excel (например, тут – $ExcelApplication = new-object -comobject excel.application). Если Excel нет, то делать вывод в CSV-файлы по старинке…

Get-ADUser и Organization Unit

Возник вопрос: как экспортировать список пользователей из AD с организационным подразделением (Organization Unit или OU).

Get-ADUser user -Properties * показал, что OU присутствует в двух атрибутах:

  • Distinguishedname: CN=user,ou=ou1,ou=ou2,dc=domain,dc=ru;
  • CanonicalName: domain.ru/ou2/ou1/user

В готовом виде OU нет, хотя для целей сортировки удобнее использовать CanonicalName.

Так родился “однострочник”, позволяющий вытащить OU в качестве атрибута

Zerologon check (проверка)

Как вы слышали,  в августе 2020 года была обнаружена критическая уязвимость CVE-2020-1472 в протоколе проверки пользователя контроллером домена.

Критическая она потому, что для эксплуатации этой уязвимости достаточно оказаться в одной сети с контроллером домена.

Microsoft конечно же выпустил обновления, но кто ж их ставит, верно?

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

Поэтому я написал скрипт, который проверяет наличие требуемых обновлений на контроллерах домена Windows Server 2012 R2.

Список обновлений взят из статьи про уязвимость, а также Catalog MS, указывающего на более новые версии обновлений. В моем списке сентябрьское обновление, два августовских и перекрывающий их апдейт безопасности для Windows 2012 R2.

Обратите внимание, что для Windows 2016/2019 номера апдейтов другие!

Для запуска скрипта требуются права администратора домена, так как скрипт проходит по контроллерам и через WMI получает список установленных обновлений.

Результатом работы скрипта является следующий вывод:

WARNING означает, что нужно срочно бежать и ставить обновления.

Наличие сентябрьского обновления означает, что вы молодцы. Наличие августовских – ну не безнадежны, по крайней мере :-).

Приборка групп рассылок в Exchange

В нашей компании используется MS Exchange Server, в нём создано ~2000 групп рассылок: ~1700 обычных и ~300 динамических, и все это хозяйство держит под собой 2800 e-mail адресов.

Хозяев групп нет, а если и есть, то давно уволились, какого-то реестра тоже нет.

В результате, для одного департамента есть такие группы:

  • DISTRIB-Отдел;
  • Distrib_отдел;
  • Отделъ-Пермь;
  • DISTRIB_IT_Otdel.

И столько же динамических:

  • Рассылка-Отдел (Москва);
  • Рассылка-Отдел (Общая);
  • Рассылка Пермский ф-л (Отдел);
  • DST-PRM_NOT_OTDEL.

Continue reading “Приборка групп рассылок в Exchange”

Развертывание виртуальной машины vSphere через PowerSHell часть 1

Стал задаваться вопросом – как автоматизировать выполнение рутинных операций в vSphere?

Лучше бы не задавался 🙂

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

Основные проблемы, с которыми я столкнулся:

  • мною использовалась настройка кастомизации ОС “Prompt User”, спрашивающая только IP-адрес (подразумевается, что развертывание происходит в одно и то же адресное пространство). Как оказалось, проще использовать передачу “всех” параметров IP в скрипте;
  • перемещение учетной записи сервера после ее развертывания для применения групповых политик в другой контейнер Active Directory;
  • поле “Notes” получает строку. Как передать ей несколько строк, если потребуется перевод строки, я пока не разбирался;
  • за кадром остались процессы дальнейшей настройки сервера – установка обновлений и дополнительного ПО. Это будет рассмотрено в следующих частях статьи.

Вдохновлялся я скриптом, опубликованным здесь.

А вот что получил:

Данный скрипт берет гостевую кастомизацию “windows” (Guest Customization OS) и создает на ее основе временную кастомизацию “temp1”.

Затем скрипт задает настройки IP, которые должна будет получить новая ВМ.

Далее мы создаем виртуальную машину из шаблона “windows_template”, используя подготовленную кастомизацию “temp1”. Машина создается в кластере “Cluster_name” с примечанием о том, для чего нужна эта ВМ. Диски шаблона при этом клонируются на кластер хранилищ (Datastore Cluster) с названием “Datastore_Cluster”.

Затем мы включаем виртуальную машину и ждем.

Ждем мы до тех пор, пока в AD не появится учетная запись компьютера. А эта запись должна появиться там потому, что в гостевой кастомизации настроено автодобавление ПК в домен.

Как только мы этого дождались, мы перекладываем эту учетную запись ПК в соответствующую OU.

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

Затем ждем 10 секунд пока VMware Tools 100% остановятся в ходе перезагрузки, ждем пока они будут запущены и выводим на экран сообщение о том, что сервер готов.

Exchange 2013 CU22 и информация об Exchange

Я уже писал о том, что после разворачивания CU22 на Exchange 2013 вы получаете запись в реестре о том, что, оказывается, на сервере-то установлен Exchange 2013 CU20. Microsoft проблему признало и выпустило совет, как можно вручную исправить ключ реестра.

Я же по привычке делюсь скриптом, который исправит этот ключ реестра по всем вашим серверам Exchange, подразумевая что все они – Exhchange 2013 CU22.

Скрипт пройдется по всем серверам Exchange в организации, поменяет параметр реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Exchange v15\Displayname и выведет имя сервера в качестве интерактива с вами.

Если вам нужно, чтобы обрабатывались не все сервера, а только какой-то список, то:

  • список серверов нужно будет подать на вход вместо командлета Get-ExchangeServer;
  • вместо $_.name использовать более подходящий $_

P.S. История с этим апдейтом напомнила

“Здравствуйте, я бедный албанский вирус. Я пока что ничего не умею, и к сожалению, не могу причинить вред вашему компьютеру. Пожалуйста, будьте так любезны, сотрите один из важных файлов с жесткого диска вашего компьютера самостоятельно и перешлите меня 30 друзьям. И будет вам счастье. Если вы этого не сделаете я обижусь и не будет вам счастья и конфет весь следующий год! Заранее благодарен за понимание и сотрудничество”.

Проблемы с бэкапом из-за нецелого размера vmdk-диска

Обратил внимание на то, что некоторые виртуальные машины не бэкапятся через штатный VADP API. Техническая поддержка NetBackup нашла в логах, что причиной этого является дробный (нецелый) размер VMDK-диска.

Создать такой диск очень просто – указать дробный размер для терабайт в “толстом” клиенте:

Если изменить единицы измерения с терабайт на гигабайты, вы увидите, что диск занимает нецелое количество гигабайт (и соответственно, мегабайт).

Веб-клиент в этом плане получше – он сразу показывает наличие проблемы:

Лечится проблема достаточно легко:

  1. Меняете единицы измерения на мегабайты и увеличиваете размер диска в сторону ближайшего целого значения. В приведенном случае вместо 2’086’666,23925781 МБ у вас должно стать 2’086’667 МБ.
  2. Растягиваете размер файловой системы на вновь появившееся место.

Для экспресс-проверки вашей инфраструктуры вы можете воспользоваться следующим PowerCLI-скриптом:

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