Взятие под контроль разрастания виртуальных машин (часть 13)
- Взятие под контроль разрастания виртуальных машин (часть 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.
Рисунок 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.
Рисунок 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.
Рисунок 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, вывод стал более разборчивым.
Рисунок D: Избавление от ошибок облегчает чтение вывода.
Вывод
В следующей статье этой серии я покажу вам, как адаптировать скрипт для компиляции данных с нескольких серверов. После этого я планирую показать вам, как отображать данные на диаграмме. Я могу даже зайти так далеко, чтобы экспортировать все данные в отчет на основе HTML или электронную таблицу Excel.
- Взятие под контроль разрастания виртуальных машин (часть 2)
- Взятие под контроль разрастания виртуальных машин (часть 3)
- Взятие под контроль разрастания виртуальных машин (часть 4)
- Взятие под контроль разрастания виртуальных машин (часть 5)
- Взятие под контроль разрастания виртуальных машин (часть 6)
- Взятие под контроль разрастания виртуальных машин (часть 7)
- Взятие под контроль разрастания виртуальных машин (часть 8)
- Взятие под контроль разрастания виртуальных машин (часть 9)
- Взятие под контроль разрастания виртуальных машин (часть 10)
- Взятие под контроль разрастания виртуальных машин (часть 11)
- Взятие под контроль разрастания виртуальных машин (часть 18)