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

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

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

До сих пор в этой серии статей я потратил много времени на то, чтобы показать вам, как получить данные о создании и удалении виртуальных машин из журналов событий Windows Server. В этой статье я хочу показать вам, как можно анализировать данные за несколько лет, чтобы определить разрастание виртуальных машин или общие тенденции роста.

Ближе к концу моей предыдущей статьи я объяснил, что собираюсь создать скрипт, который использует около 48 различных переменных. Далее я объяснил, что есть способы выполнить ту же задачу с использованием гораздо меньшего количества переменных, но я хотел избежать слишком сложного кода PowerShell. Готовясь к написанию этой статьи, я понимаю, что моя первоначальная оценка переменной была неверной. Этот скрипт фактически будет использовать 72 переменные.

Почему так много переменных? Это потому, что мы собираемся анализировать данные за год, и мне нужно иметь несколько переменных для данных за каждый месяц. Вместо того, чтобы сразу начинать и объявлять все эти переменные, я хочу показать вам, что я имею в виду на каждый месяц. Вот небольшой блок кода, который я написал для анализа создания и удаления виртуальных машин за январь 2016 года:

#январь 2016

$JanStartDate = '01.01.2016 00:00:00'

$JanEndDate = '30.01.2016 23:59:59'

$JanCreateEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$JanStartDate;EndTime=$JanEndDate}

$NumJanCreateEvents = $JanCreateEvents.count

$JanDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$JanStartDate;EndTime=$JanEndDate}

$NumJanDeleteEvents = $JanDeleteEvents.count

Пишите-Ведущий «В январе 2016 года были» -NoNewLine; Write-Host $NumJanCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumJanDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

Вы можете увидеть результат этого кода на рисунке A.

Изображение 14784
Рисунок A. Это результат работы кода, приведенного выше.

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

Переменные, которые я использую, говорят сами за себя. Первые две переменные, которые я объявляю, это $JanStartDate и $JanEndDate. Эти переменные определяют первый день января и последний день января. Я также объявляю переменные с именами $JanCreateEvents и $JanDeleteEvents. Эти переменные извлекают все события создания или удаления виртуальной машины, которые произошли между датой начала и датой окончания. Наконец, я объявил переменные $NumJanCreateEvents и $NumJanDeleteEvents. Эти переменные отслеживают количество виртуальных машин, созданных и удаленных в январе. Остальные строки кода просто отображают количество созданных и удаленных виртуальных машин за месяц. Если бы я хотел отобразить сами события, я мог бы легко сделать это, вызвав переменные $JanCreateEvents и $JanDeleteEvents следующим образом:

#январь 2016

$JanStartDate = '01.01.2016 00:00:00'

$JanEndDate = '30.01.2016 23:59:59'

$JanCreateEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$JanStartDate;EndTime=$JanEndDate}

$NumJanCreateEvents = $JanCreateEvents.count

$JanDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$JanStartDate;EndTime=$JanEndDate}

$NumJanDeleteEvents = $JanDeleteEvents.count

$JanCreateEvents

Пишите-Ведущий «В январе 2016 года были» -NoNewLine; Write-Host $NumJanCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

$JanDeleteEvents

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumJanDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

Вы можете увидеть результат на рисунке B.

Изображение 14785
Рисунок B: Вот фактические события создания и удаления виртуальных машин за январь 2016 года.

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

#январь 2015

 

$JanStartDate = '01.01.2016 00:00:00'

$JanEndDate = '30.01.2016 23:59:59'

$JanCreateEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$JanStartDate;EndTime=$JanEndDate}

$NumJanCreateEvents = $JanCreateEvents.count

$JanDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$JanStartDate;EndTime=$JanEndDate}

$NumJanDeleteEvents = $JanDeleteEvents.count

Пишите-Ведущий «В январе 2015 года были» -NoNewLine; Write-Host $NumJanCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumJanDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#февраль 2015

 

$FebStartDate = '01.02.2015, 00:00:00'

$FebEndDate = '28.02.2015 23:59:59'

$FebCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$FebStartDate;EndTime=$FebEndDate}

$NumFebCreateEvents = $JanCreateEvents.count

$FebDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$FebStartDate;EndTime=$FebEndDate}

$NumFebDeleteEvents = $JanDeleteEvents.count

Пишите-Ведущий «В феврале 2015 года были» -NoNewLine; Write-Host $NumFebCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumFebDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#март 2015

 

$MarStartDate = '01.03.2015 00:00:00'

$MarEndDate = '31.03.2015 23:59:59'

$MarCreateEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$MarStartDate;EndTime=$MarEndDate}

$NumMarCreateEvents = $MarCreateEvents.count

$MarDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$MarStartDate;EndTime=$MarEndDate}

$NumMarDeleteEvents = $MarDeleteEvents.count

Пишите-Ведущий «В марте 2015 года были» -NoNewLine; Write-Host $NumMarCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumMarDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#апрель 2015

 

$AprStartDate = '01.04.2015 00:00:00'

$AprEndDate = '30.04.2015 23:59:59'

$AprCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$AprStartDate;EndTime=$AprEndDate}

$NumAprCreateEvents = $AprCreateEvents.count

$AprDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$AprStartDate;EndTime=$AprEndDate}

$NumAprDeleteEvents = $АпрУдалитьEvents.count

Пишите-Ведущий «В апреле 2015 года были» -NoNewLine; Write-Host $NumAprCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumAprDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#май 2015

 

$MayStartDate = '01.05.2015 00:00:00'

$MayEndDate = '31.05.2015 23:59:59'

$MayCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$MayStartDate;EndTime=$MayEndDate}

$NumMayCreateEvents = $MayCreateEvents.count

$MayDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$MayStartDate;EndTime=$MayEndDate}

$NumMayDeleteEvents = $MayDeleteEvents.count

Пишите-Ведущий «В мае 2015 года были» -NoNewLine; Write-Host $NumMayCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumMayDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#июнь 2015

 

$JunStartDate = '01.06.2015, 00:00:00'

$JunEndDate = '30.06.2015 23:59:59'

$JunCreateEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$JunStartDate;EndTime=$JunEndDate}

$NumJunCreateEvents = $JunCreateEvents.count

$JunDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$JunStartDate;EndTime=$JunEndDate}

$NumJunDeleteEvents = $JunDeleteEvents.count

Пишите-Ведущий «В июне 2015 года были» -NoNewLine; Write-Host $NumJunCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumJunDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#июль 2015

 

$JulStartDate = '01.07.2015, 00:00:00'

$JulEndDate = '31.07.2015 23:59:59'

$JulCreateEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$JulStartDate;EndTime=$JulEndDate}

$NumJulCreateEvents = $JulCreateEvents.count

$JulDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$JulStartDate;EndTime=$JulEndDate}

$NumJulDeleteEvents = $JulDeleteEvents.count

Пишите-Ведущий «В июле 2015 года были» -NoNewLine; Write-Host $NumJulCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumJulDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#август 2015

 

$AugStartDate = '01.08.2015 00:00:00'

$AugEndDate = '31.08.2015 23:59:59'

$AugCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$AugStartDate;EndTime=$AugEndDate}

$NumAugCreateEvents = $AugCreateEvents.count

$AugDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$AugStartDate;EndTime=$AugEndDate}

$NumAugDeleteEvents = $AugDeleteEvents.count

Пишите-Ведущий «В августе 2015 года были» -NoNewLine; Write-Host $NumAugCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumAugDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#сентябрь 2015

 

$SepStartDate = '01.09.2015, 00:00:00'

$SepEndDate = '30.09.2015 23:59:59'

$SepCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$SepStartDate;EndTime=$SepEndDate}

$NumSepCreateEvents = $SepCreateEvents.count

$SepDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$SepStartDate;EndTime=$SepEndDate}

$NumSepDeleteEvents = $SepDeleteEvents.count

Пишите-Ведущий «В сентябре 2015 года были» -NoNewLine; Write-Host $NumSepCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumSepDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#октябрь 2015

 

$OctStartDate = '01.10.2015, 00:00:00'

$OctEndDate = '31.10.2015 23:59:59'

$OctCreateEvents = Get-WinEvent –FilterHashTable
@{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13002;StartTime=$OctStartDate;EndTime=$OctEndDate}

$NumOctCreateEvents = $OctCreateEvents.count

$OctDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$OctStartDate;EndTime=$OctEndDate}

$NumOctDeleteEvents = $OctDeleteEvents.count

Пишите-Ведущий «В октябре 2015 года были» -NoNewLine; Write-Host $NumOctCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumOctDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#ноябрь 2015

 

$NovStartDate = '01.11.2015, 00:00:00'

$NovEndDate = '30.11.2015 23:59:59'

$NovCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$NovStartDate;EndTime=$NovEndDate}

$NumNovCreateEvents = $NovCreateEvents.count

$NovDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$NovStartDate;EndTime=$NovEndDate}

$NumNovDeleteEvents = $NovDeleteEvents.count

Пишите-Ведущий «В ноябре 2015 года были» -NoNewLine; Write-Host $NumNovCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumNovDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

 

#декабрь 2015

 

$DecStartDate = '01.12.2015 00:00:00'

$DecEndDate = '31.12.2015 23:59:59'

$DecCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$DecStartDate;EndTime=$DecEndDate}

$NumDecCreateEvents = $DecCreateEvents.count

$DecDeleteEvents = Get-WinEvent –FilterHashTable @{LogName="Microsoft-Windows-Hyper-V-VMMS-Admin";ID=13003;StartTime=$DecStartDate;EndTime=$DecEndDate}

$NumDecDeleteEvents = $DecDeleteEvents.count

Пишите-Ведущий «В декабре 2015 года были» -NoNewLine; Write-Host $NumDecCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».

Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumDecDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».

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

Изображение 14786
Рисунок C: PowerShell отображает множество ошибок.

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

$JanCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$JanStartDate;EndTime=$JanEndDate} -ErrorAction 'SilentlyContinue'

$NumJanCreateEvents = $JanCreateEvents.count

$JanDeleteEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$JanStartDate;EndTime=$JanEndDate}-ErrorAction 'SilentlyContinue'

Как вы можете видеть на рисунке D, вывод стал более разборчивым.

Изображение 14787
Рисунок D: Избавление от ошибок облегчает чтение вывода.

Вывод

В следующей статье этой серии я покажу вам, как адаптировать скрипт для компиляции данных с нескольких серверов. После этого я планирую показать вам, как отображать данные на диаграмме. Я могу даже зайти так далеко, чтобы экспортировать все данные в отчет на основе HTML или электронную таблицу Excel.

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