Взятие под контроль разрастания виртуальных машин (часть 10)

Опубликовано: 18 Апреля, 2023

  • Взятие под контроль разрастания виртуальных машин (часть 2)
  • Взятие под контроль разрастания виртуальных машин (часть 3)
  • Взятие под контроль разрастания виртуальных машин (часть 4)
  • Взятие под контроль разрастания виртуальных машин (часть 5)
  • Взятие под контроль разрастания виртуальных машин (часть 6)
  • Взятие под контроль разрастания виртуальных машин (часть 7)
  • Взятие под контроль разрастания виртуальных машин (часть 8)
  • Взятие под контроль разрастания виртуальных машин (часть 9)
  • Взятие под контроль разрастания виртуальных машин (часть 11)
  • Взятие под контроль разрастания виртуальных машин (часть 12)

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

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

Изображение 14797
Рисунок A: Это результат работы скрипта на данный момент.

В этой статье я хочу использовать код, который у нас уже есть, чтобы извлечь события создания виртуальной машины из журнала событий и поместить информацию в какой-то осмысленный формат.

Сейчас у нас есть три отдельных блока кода, которые были созданы. Первый блок кода подсчитывает количество созданных виртуальных машин и количество удаленных виртуальных машин. Этот блок кода:

$CreateEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13002»}

$DeleteEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13003»}

$CreateEvents.count

$DeleteEvents.count

Второй блок кода отображает сообщение о создании виртуальной машины и SID создавшего ее пользователя. Код, который я использовал для этого, был:

$CreateEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13002»}

$Создать события | Сообщение Select-Object, UserID

Третий блок кода, который я создал, сообщал имена пользователей, создавших виртуальные машины. Это блок кода, вывод которого я показал вам на рисунке A. Код, который я использовал для создания этого вывода, был следующим:

Get-WinEvent -LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID -EQ «13002»} | ForEach-Object -Process {

$ObjSID = $_.UserID.Value;

$ОбжСИД

$Object = Новый объект System.Security.Principal.SecurityIdentifier ($ObjSID)

$ObjUser = $Object.Translate([System.Security.Principal.NTAccount])

$ObjUser.value

}

Итак, с учетом сказанного, первое, что я хочу сделать, это объединить эти три блока кода во что-то, что даст нам наполовину осмысленный вывод. Как только я это сделаю, я хочу провести вас через код. После этого я адаптирую код для многосерверного мониторинга и покажу, как использовать фильтрацию для отслеживания тенденций создания виртуальных машин. Так что впереди у нас много работы, а пока вот объединенный скрипт:

ЦЛС

$CreateEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13002»}

$DeleteEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13003»}

Написать-Host «Были»-NoNewLine; Write-Host $CreateEvents.count -NoNewLine; Write-Host «виртуальные машины созданы».

Написать-Host «Были»-NoNewLine; Write-Host $DeleteEvents.count -NoNewLine; Write-Host «виртуальные машины удалены».

Пишите-Хозяин » «

 

$Создать события | ForEach-Object -Process {

Пишите-Хозяин » «

$ObjSID = $_.UserID.Value;

$Object = Новый объект System.Security.Principal.SecurityIdentifier ($ObjSID)

$ObjUser = $Object.Translate([System.Security.Principal.NTAccount])

$_.Сообщение

Write-Host «От:» -NoNewLine; Запись хоста $ObjUser.value

}

Некоторые части этого скрипта покажутся вам знакомыми, а другие — нет. Как я уже сказал, моей целью было не просто объединить блоки кода, но и превратить вывод во что-то значимое. Итак, давайте поговорим о том, как работает код. Вот код еще раз. На этот раз я добавил номер строки перед каждой строкой. На самом деле код не будет работать с номерами строк, но номера строк облегчат мне объяснение того, что происходит. Если вы хотите запустить скрипт для себя, используйте приведенный выше код, а не приведенный ниже. С учетом сказанного, вот скрипт с добавленными номерами строк:

  1. ЦЛС
  2. $CreateEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13002»}
  3. $DeleteEvents = Get-WinEvent –LogName Microsoft-Windows-Hyper-V-VMMS-Admin | Где {$_.ID –eq «13003»}
  4. Написать-Host «Были»-NoNewLine; Write-Host $CreateEvents.count -NoNewLine; Write-Host «виртуальные машины созданы».
  5. Написать-Host «Были»-NoNewLine; Write-Host $DeleteEvents.count -NoNewLine; Write-Host «виртуальные машины удалены».
  6. Пишите-Хозяин » «
  7. $Создать События | ForEach-Object -Process {
  8. Пишите-Хозяин » «
  9. $ObjSID = $_.UserID.Value;
  10. $Object = Новый объект System.Security.Principal.SecurityIdentifier ($ObjSID)
  11. $ObjUser = $Object.Translate([System.Security.Principal.NTAccount])
  12. $_.Сообщение
  13. Write-Host «От:» -NoNewLine; Запись хоста $ObjUser.value
  14. }

Первые шесть строк кода отображают количество созданных и удаленных виртуальных машин. Строка 1 — это просто команда очистки экрана. Это позволяет нам каждый раз начинать с нового дисплея.

Строка 2 захватывает все события создания виртуальной машины и записывает их в переменную с именем $CreateEvents. Точно так же строка 3 фиксирует все события удаления виртуальной машины и записывает их в переменную с именем $DeleteEvents.

В строках 4, 5 и 6 используется команда, которую вы, возможно, раньше не видели. Эта команда называется Write-Host. Write-Host просто позволяет нам печатать текст или содержимое переменной на экране. Итак, в случае строки 4 мы отображаем текст «Было создано X виртуальных машин». X будет заменен числовым значением, отражающим общее количество созданных виртуальных машин. Строка 5 делает то же самое для удаленных виртуальных машин. В строке 6 просто отображается пустая строка, прежде чем мы начнем отображать сведения о созданных виртуальных машинах.

Итак, как вы, наверное, догадались, строки 7-14 отображают события создания виртуальной машины и их создателя. Строка 7 ссылается на переменную $CreateEvents, которую мы настроили в строке 2. Помните, что эта переменная содержит все записи журнала событий, относящиеся к созданию виртуальных машин. Затем мы используем команду ForEach-Object для запуска цикла, который позволяет нам работать с каждой из этих записей журнала событий по отдельности. Конец строки 7 содержит символ {. Точно так же строка 14 содержит символ }. Весь код, который существует между этими двумя символами, обрабатывается циклом и поэтому повторяется для каждой записи в журнале.

Строка 8 вставляет пустую строку на экран, а затем строки 9, 10 и 11 преобразуют SID, связанный с текущей записью журнала, в имя пользователя. Это имя пользователя хранится в переменной с именем $ObjUser. В строке 12 отображается текст сообщения для текущей записи журнала событий. Это текст, указывающий имя созданной виртуальной машины. Наконец, в строке 13 командлет Write-Host и переменная $ObjUser используются для отображения имени пользователя, создавшего виртуальную машину.

Если вам интересно, вы можете увидеть, как скрипт выглядит в действии на рисунке B.

Изображение 14798
Рисунок B: Вот как это выглядит, когда я запускаю скрипт.

Вывод

Этот сценарий — хорошее начало, но мы можем сделать гораздо больше. В следующей статье этой серии я покажу вам, как запустить скрипт на нескольких хостах Hyper-V. Оттуда я хочу показать вам, как фильтровать выходные данные в соответствии с диапазонами дат и как отслеживать ежемесячные тенденции создания виртуальных машин.

  • Взятие под контроль разрастания виртуальных машин (часть 2)
  • Взятие под контроль разрастания виртуальных машин (часть 3)
  • Взятие под контроль разрастания виртуальных машин (часть 4)
  • Взятие под контроль разрастания виртуальных машин (часть 5)
  • Взятие под контроль разрастания виртуальных машин (часть 6)
  • Взятие под контроль разрастания виртуальных машин (часть 7)
  • Взятие под контроль разрастания виртуальных машин (часть 8)
  • Взятие под контроль разрастания виртуальных машин (часть 9)
  • Взятие под контроль разрастания виртуальных машин (часть 11)
  • Взятие под контроль разрастания виртуальных машин (часть 12)