Взятие под контроль разрастания виртуальных машин (часть 10)
- Взятие под контроль разрастания виртуальных машин (часть 2)
- Взятие под контроль разрастания виртуальных машин (часть 3)
- Взятие под контроль разрастания виртуальных машин (часть 4)
- Взятие под контроль разрастания виртуальных машин (часть 5)
- Взятие под контроль разрастания виртуальных машин (часть 6)
- Взятие под контроль разрастания виртуальных машин (часть 7)
- Взятие под контроль разрастания виртуальных машин (часть 8)
- Взятие под контроль разрастания виртуальных машин (часть 9)
- Взятие под контроль разрастания виртуальных машин (часть 11)
- Взятие под контроль разрастания виртуальных машин (часть 12)
В предыдущей статье этой серии мы работали над созданием сценария PowerShell, который показывал бы вам, кто в последнее время создавал виртуальные машины. Правда, скрипт не совсем готов для общего использования. Есть еще ряд вопросов, которые нам предстоит решить.
Как вы, возможно, помните, нашим большим достижением в предыдущей статье было преобразование SID пользователя в имя пользователя, чтобы мы могли выяснить, кто создал виртуальную машину. На данный момент выходные данные скрипта выглядят примерно так, как вы видите на рисунке A.
Рисунок 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
}
Некоторые части этого скрипта покажутся вам знакомыми, а другие — нет. Как я уже сказал, моей целью было не просто объединить блоки кода, но и превратить вывод во что-то значимое. Итак, давайте поговорим о том, как работает код. Вот код еще раз. На этот раз я добавил номер строки перед каждой строкой. На самом деле код не будет работать с номерами строк, но номера строк облегчат мне объяснение того, что происходит. Если вы хотите запустить скрипт для себя, используйте приведенный выше код, а не приведенный ниже. С учетом сказанного, вот скрипт с добавленными номерами строк:
- ЦЛС
- $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. Точно так же строка 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.
Рисунок B: Вот как это выглядит, когда я запускаю скрипт.
Вывод
Этот сценарий — хорошее начало, но мы можем сделать гораздо больше. В следующей статье этой серии я покажу вам, как запустить скрипт на нескольких хостах Hyper-V. Оттуда я хочу показать вам, как фильтровать выходные данные в соответствии с диапазонами дат и как отслеживать ежемесячные тенденции создания виртуальных машин.
- Взятие под контроль разрастания виртуальных машин (часть 2)
- Взятие под контроль разрастания виртуальных машин (часть 3)
- Взятие под контроль разрастания виртуальных машин (часть 4)
- Взятие под контроль разрастания виртуальных машин (часть 5)
- Взятие под контроль разрастания виртуальных машин (часть 6)
- Взятие под контроль разрастания виртуальных машин (часть 7)
- Взятие под контроль разрастания виртуальных машин (часть 8)
- Взятие под контроль разрастания виртуальных машин (часть 9)
- Взятие под контроль разрастания виртуальных машин (часть 11)
- Взятие под контроль разрастания виртуальных машин (часть 12)