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

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

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

Самым значительным дополнением к коду стала новая функция Display-Output. Вы можете увидеть функцию здесь:

Функция Display-Output($Msg){
# Функция для вывода вывода на экран и записи его в файл.
 
Write-Host $Msg
$ Сообщение | Добавить содержимое C:DataVMReport.txt
}

Причина, по которой я создал эту функцию, заключается в том, что командлет Write-Host не может вывести выходные данные в файл. Данные записываются только на экран. Поэтому я переписал каждую строку кода в скрипте, предназначенном для вывода текста на экран. Теперь вместо того, чтобы отображать этот текст с помощью write-host, я добавляю текст в переменную с именем $Msg. Затем я передаю эту переменную функции $Msg. Функция использует Write-Host для отображения содержимого переменной на экране, а также записывает текст в файл с именем C:DataVMReport.txt.

Вы заметите, что функция записывает данные в файл с помощью командлета Add-Content, а не командлета Out-File. Командлет Out-File перезаписывает текстовый файл, тогда как Add-Content добавляет существующий файл.

Мне также пришлось создать блок кода для создания файла отчета. Вот как выглядит этот блок кода:

# Создать файл отчета
 
Remove-Item C:DataVMReport.txt -ErrorAction SilentlyContinue
$Msg = "Отчет о виртуальной машине"
Write-Host $Msg
$Сообщение | Исходящий файл C:DataVMReport.txt
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
$Msg="------------------------------- ----"
Отображение-вывод $Msg
$Msg=" События создания и удаления ВМ на уровне хоста"
Отображение-вывод $Msg
$Msg="------------------------------- ----"
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg

Первое, что делает этот блок кода, — удаляет файл C:DataVMReport.txt, если он уже существует. Я использовал параметр -ErrorAction SilentlyContinue, чтобы предотвратить отображение сообщений об ошибках в случае, если текстовый файл еще не существует.

Следующие три строки кода важны, потому что они создают файл отчета. Я начинаю с добавления слов Virtual Machine Report в переменную $Msg. Однако я не вызываю функцию Display-Output. Вместо этого я использую Write-Host для вывода текста на экран и использую командлет Out-File для записи текста в файл отчета. Однако после этого любой текст, который необходимо отобразить, добавляется в переменную $Msg и отправляется в функцию Display-Output.

Еще я создал раздел кода, который вычисляет общее количество созданий и удалений виртуальных машин на всех серверах. Этот блок кода не только отображает общие итоги, но также использует переменную с именем $Trend для вычисления разницы между количеством созданных и удаленных виртуальных машин. Таким образом, скрипт может сказать вам, больше или меньше виртуальных машин у вас, чем было год назад. Вот как выглядит код:

# Расчет и отображение общего количества событий
 
$ TotalCreate = $ totalJancReateEvents + $ totalFeBreateEvents + $ totalMarcreateeVents + $ totalAprCreateeVents + $ totalMayCreateeVents + $ totalJunCreateEvents + $ totalJulCreateEvents + $ totalAugcreateevents + $ alteSpreateeventscreateventscreateventscreateventscreateventscreateventscreate.
$TotalDelete = $TotalJanDeleteEvents + $TotalFebDeleteEvents + $TotalMarDeleteEvents + $TotalAprDeleteEvents + $TotalMayDeleteEvents + $TotalJunDeleteEvents + $TotalJulDeleteEvents + $TotalAugDeleteEvents + $TotalSepDeleteEvents + $TotalOctDeleteEvents + $TotalNovDeleteEvents + $TotalDecDeleteEvents
 
$ сообщение = " "
Отображение-вывод $Msg
$Msg="----------------------------"
Отображение-вывод $Msg
$Msg=" Общие итоги"
Отображение-вывод $Msg
$Msg="----------------------------"
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
$Msg="Всего созданных виртуальных машин за последний год: " + $TotalCreate
Отображение-вывод $Msg
$Msg="Всего удалений виртуальных машин за последний год: " + $TotalDelete
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
 
Если ($TotalCreate -GT $TotalDelete){
$Trend = $TotalCreate - $TotalDelete
$Msg="Сейчас в вашей организации " + $Trend + " больше виртуальных машин, чем год назад."
Отображение-вывод $Msg
}
 
Если ($TotalCreate -LT $TotalDelete){
$Trend = $TotalDelete - $TotalCreate
$Msg="Сейчас в вашей организации " + $Trend + " меньше ВМ, чем год назад."
Отображение-вывод $Msg
}
 
$ сообщение = " "
Отображение-вывод $Msg

Наконец, я добавил код, предназначенный для отображения всех данных на диаграмме. Этот код почти идентичен тому, что я показывал вам в одной из предыдущих статей этой серии. Самое большое изменение коснулось назначений переменных $DataSource1 и $DataSource2. Вы можете увидеть эти две строки кода ниже:

$DataSource1 = [заказано]@{July=$TotalJulCreateEvents; Август=$TotalAugCreateEvents; Сентябрь=$TotalSepCreateEvents; Октябрь=$TotalOctCreateEvents; ноябрь=$TotalNovCreateEvents; Декабрь=$TotalDecCreateEvents; Январь=$TotalJanCreateEvents; Февраль=$TotalFebCreateEvents; март=$TotalMarchCreateEvents; апрель=$TotalAprCreateEvents; Май=$TotalMayCreateEvents; Июнь=$TotalJunCreateEvents}
 
$DataSource2 = [заказано]@{July=$TotalJulDeleteEvents; Август=$TotalAugDeleteEvents; Сентябрь=$TotalSepDeleteEvents; Октябрь=$TotalOctDeleteEvents; ноябрь=$TotalNovDeleteEvents; Декабрь=$TotalDecDeleteEvents; Январь=$TotalJanDeleteEvents; Февраль=$TotalFebDeleteEvents; март=$TotalMarDeleteEvents; апрель=$TotalAprDeleteEvents; Май=$TotalMayDeleteEvents; Июнь=$TotalJunDeleteEvents}

Эти две строки кода создают хеш-таблицы, содержащие названия месяцев и количество виртуальных машин, которые были созданы или удалены в течение этих месяцев. Хотя это звучит достаточно просто (и это так), есть две вещи, на которые я должен обратить внимание.

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

Еще хочу отметить, что данные начинаются с июля. Причина этого в том, что я пишу эту статью в июне 2016 года. Следовательно, мой диапазон дат начинается с июля 2015 года и продолжается до июня 2016 года. Июль отображается в начале хеш-таблицы, потому что данные за июль 2015 года Старейший.

Большинство других изменений, которые я внес в код, существуют только для того, чтобы очистить вывод и сделать его более презентабельным. Итак, с учетом сказанного, вот окончательный код целиком:

Функция Display-Output($Msg){
# Функция для вывода вывода на экран и записи его в файл.
 
Write-Host $Msg
$Сообщение | Добавить содержимое C:DataVMReport.txt
}
 
 
Функция Get-MyData($Server){
#Функция для получения информации о данных журнала ВМ
 
 
$MySession = New-PSSession -ComputerName $Server
 
 
#Инициализировать переменные
 
Invoke-Command -Session $MySession -ScriptBlock {
 
#январь
 
$NumJanCreateEvents = '0'
$JanCreateEvents = ''
$NumJanDeleteEvents = '0'
$JanDeleteEvents = ''
$JanStartDate = '01.01.2016 00:00:00'
$JanEndDate = '30.01.2016 23:59:59'
 
#февраль
 
$NumFebCreateEvents = '0'
$FebCreateEvents = ''
$NumFebDeleteEvents = '0'
$FebDeleteEvents = ''
$FebStartDate = '01.02.2016 00:00:00'
$FebEndDate = '29.02.2016 23:59:59'
 
#Маршировать
 
$NumMarCreateEvents = '0'
$MarCreateEvents = ''
$NumMarDeleteEvents = '0'
$MarDeleteEvents = ''
$MarStartDate = '01.03.2016 00:00:00'
$MarEndDate = '30.03.2016 23:59:59'
 
#Апреля
 
$NumAprCreateEvents = '0'
$AprCreateEvents = ''
$NumAprDeleteEvents = '0'
$Апрудалетевентс = ''
$AprStartDate = '01.04.2016 00:00:00'
$AprEndDate = '30.04.2016 23:59:59'
 
#Май
 
$NumMayCreateEvents = '0'
$MayCreateEvents = ''
$NumMayDeleteEvents = '0'
$MayDeleteEvents = ''
$MayStartDate = '01.05.2016 00:00:00'
$MayEndDate = '31.05.2016 23:59:59'
 
#Июнь
 
$NumJunCreateEvents = '0'
$JunCreateEvents = ''
$NumJunDeleteEvents = '0'
$JunDeleteEvents = ''
$JunStartDate = '01.06.2016 00:00:00'
$JunEndDate = '30.06.2016 23:59:59'
 
#Июль
 
$NumJulCreateEvents = '0'
$JulCreateEvents = ''
$NumJulDeleteEvents = '0'
$JulDeleteEvents = ''
$JulStartDate = '01.07.2015, 00:00:00'
$JulEndDate = '31.07.2015 23:59:59'
 
#Август
 
$NumAugCreateEvents = '0'
$AugCreateEvents = ''
$NumAugDeleteEvents = '0'
$AugDeleteEvents = ''
$AugStartDate = '01.08.2015 00:00:00'
$AugEndDate = '31.08.2015 23:59:59'
 
#Сентябрь
 
$NumSepCreateEvents = '0'
$SepCreateEvents = ''
$NumSepDeleteEvents = '0'
$SepDeleteEvents = ''
$SepStartDate = '01.09.2015, 00:00:00'
$SepEndDate = '30.09.2015 23:59:59'
 
#октябрь
 
$NumOctCreateEvents = '0'
$OctCreateEvents = ''
$NumOctDeleteEvents = '0'
$OctDeleteEvents = ''
$OctStartDate = '01.10.2015, 00:00:00'
$OctEndDate = '31.10.2015 23:59:59'
 
#ноябрь
 
$NumNovCreateEvents = '0'
$NovCreateEvents = ''
$NumNovDeleteEvents = '0'
$NovDeleteEvents = ''
$NovStartDate = '01.11.2015, 00:00:00'
$NovEndDate = '30.11.2015 23:59:59'
 
#Декабрь
 
$NumDecCreateEvents = '0'
$DecCreateEvents = ''
$NumDecDeleteEvents = '0'
$ DecDeleteEvents = ''
$DecStartDate = '01.12.2015 00:00:00'
$DecEndDate = '31.12.2015 23:59:59'
               
}
 
 
 
 
# январь 2016 г.
 
$JanCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$JanStartDate;EndTime=$JanEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumJanCreateEvents = $JanCreateEvents.count
$JanDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$JanStartDate;EndTime=$JanEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumJanDeleteEvents = $JanDeleteEvents.count
 
 
# февраль 2016 г.
 
 
$FebCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$FebStartDate;EndTime=$FebEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumFebCreateEvents = $FebCreateEvents.count
$FebDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$FebStartDate;EndTime=$FebEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumFebDeleteEvents = $FebDeleteEvents.count
 
 
# март 2016 г.
 
 
$MarCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$MarStartDate;EndTime=$MarEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumMarCreateEvents = $MarCreateEvents.count
$MarDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$MarStartDate;EndTime=$MarEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumMarDeleteEvents = $MarDeleteEvents.count
 
# апрель 2016 г.
 
 
$AprCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$AprStartDate;EndTime=$AprEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumAprCreateEvents = $AprCreateEvents.count
$AprDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$AprStartDate;EndTime=$AprEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumAprDeleteEvents = $AprDeleteEvents.count
 
# май 2016 г.
 
 
$MayCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$MayStartDate;EndTime=$MayEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumMayCreateEvents = $MayCreateEvents.count
$MayDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$MayStartDate;EndTime=$MayEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumMayDeleteEvents = $MayDeleteEvents.count
 
# июнь 2015 г.
 
 
$JunCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$JunStartDate;EndTime=$JunEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumJunCreateEvents = $JunCreateEvents.count
$JunDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$JunStartDate;EndTime=$JunEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumJunDeleteEvents = $JunDeleteEvents.count
 
# июль 2015 г.
 
 
$JulCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$JulStartDate;EndTime=$JulEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumJulCreateEvents = $JulCreateEvents.count
$JulDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$JulStartDate;EndTime=$JulEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumJulDeleteEvents = $JulDeleteEvents.count
 
# август 2015 г.
 
 
$AugCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$AugStartDate;EndTime=$AugEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumAugCreateEvents = $AugCreateEvents.count
$AugDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$AugStartDate;EndTime=$AugEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumAugDeleteEvents = $AugDeleteEvents.count
 
# сентябрь 2015 г.
 
 
$SepCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$SepStartDate;EndTime=$SepEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumSepCreateEvents = $SepCreateEvents.count
$SepDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$SepStartDate;EndTime=$SepEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumSepDeleteEvents = $SepDeleteEvents.count
 
# Октябрь 2015 г.
 
 
$OctCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$OctStartDate;EndTime=$OctEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumOctCreateEvents = $OctCreateEvents.count
$OctDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$OctStartDate;EndTime=$OctEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumOctDeleteEvents = $OctDeleteEvents.count
 
# ноябрь 2015 г.
 
 
$NovCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$NovStartDate;EndTime=$NovEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumNovCreateEvents = $NovCreateEvents.count
$NovDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$NovStartDate;EndTime=$NovEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumNovDeleteEvents = $NovDeleteEvents.count
 
# декабрь 2015 г.
 
 
$DecCreateEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$DecStartDate;EndTime=$DecEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumDecCreateEvents = $DecCreateEvents.count
$DecDeleteEvents = Invoke-Command -Session $MySession -ScriptBlock {Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$DecStartDate;EndTime=$DecEndDate} -ErrorAction 'Продолжить молча'}
$Global:NumDecDeleteEvents = $DecDeleteEvents.count
 
 
 
# Ежемесячный выпуск
 
$ сообщение = " "
Отображение-вывод $Msg
 
$Msg="Сервер: " + $Сервер
Отображение-вывод $Msg
 
$Сообщение="--------------------------------"
Отображение-вывод $Msg
 
$Msg="Январские события создания: " + $NumJanCreateEvents
Отображение-вывод $Msg
$Msg="Январские события удаления: " + $NumJanDeleteEvents
Отображение-вывод $Msg
 
$Msg="События создания за февраль: " + $NumFebCreateEvents
Отображение-вывод $Msg
$Msg="Февральские события удаления: " + $NumFebDeleteEvents
Отображение-вывод $Msg
 
$Msg="Мартовские события создания: " + $NumMarCreateEvents
Отображение-вывод $Msg
$Msg="Мартовские события удаления: " + $NumMarDeleteEvents
Отображение-вывод $Msg
 
$Msg="Апрельские события создания: " + $NumAprCreateEvents
Отображение-вывод $Msg
$Msg="Апрельские события удаления: " + $NumAprDeleteEvents
Отображение-вывод $Msg
 
$Msg="Может создавать события: " + $NumMayCreateEvents
Отображение-вывод $Msg
$Msg="Можно удалять события: " + $NumMayDeleteEvents
Отображение-вывод $Msg
 
$Msg="Июньские события создания: " + $NumJunCreateEvents
Отображение-вывод $Msg
$Msg="Июньские события удаления: " + $NumJunDeleteEvents
Отображение-вывод $Msg
 
$Msg="События создания июля: " + $NumJulCreateEvents
Отображение-вывод $Msg
$Msg="Июльские события удаления: " + $NumJulDeleteEvents
Отображение-вывод $Msg
 
$Msg="События создания в августе: " + $NumAugCreateEvents
Отображение-вывод $Msg
$Msg="События удаления за август: " + $NumAugDeleteEvents
Отображение-вывод $Msg
 
$Msg="Сентябрьские события создания: " + $NumSepCreateEvents
Отображение-вывод $Msg
$Msg="Сентябрьские события удаления: " + $NumSepDeleteEvents
Отображение-вывод $Msg
 
$Msg="События создания октября: " + $NumOctCreateEvents
Отображение-вывод $Msg
$Msg="События удаления за октябрь: " + $NumOctDeleteEvents
Отображение-вывод $Msg
 
$Msg="События создания ноября: " + $NumNovCreateEvents
Отображение-вывод $Msg
$Msg="События удаления за ноябрь: " + $NumNovDeleteEvents
Отображение-вывод $Msg
 
$Msg="Декабрьские события создания: " + $NumDecCreateEvents
Отображение-вывод $Msg
$Msg="Декабрьские события удаления: " + $NumDecDeleteEvents
Отображение-вывод $Msg
 
$ сообщение = " "
Отображение-вывод $Msg
}
 
 
 
 
 
 
#Тело сценария
 
#Инициализировать переменные
$TotalJanCreateEvents = '0'
$TotalJanDeleteEvents = '0'
$TotalFebCreateEvents = '0'
$TotalFebDeleteEvents = '0'
$TotalMarCreateEvents = '0'
$TotalMarDeleteEvents = '0'
$TotalAprCreateEvents = '0'
$TotalAprDeleteEvents = '0'
$TotalMayCreateEvents = '0'
$TotalMayDeleteEvents = '0'
$TotalJunCreateEvents = '0'
$TotalJunDeleteEvents = '0'
$TotalJulCreateEvents = '0'
$TotalJulDeleteEvents = '0'
$TotalAugCreateEvents = '0'
$TotalAugDeleteEvents = '0'
$TotalSepCreateEvents = '0'
$TotalSepDeleteEvents = '0'
$TotalOctCreateEvents = '0'
$TotalOctDeleteEvents = '0'
$TotalNovCreateEvents = '0'
$TotalNovDeleteEvents = '0'
$TotalDecCreateEvents = '0'
$TotalDecDeleteEvents = '0'
 
 
 
# Создать файл отчета
 
ЦЛС
Remove-Item C:DataVMReport.txt -ErrorAction SilentlyContinue
$Msg = "Отчет о виртуальной машине"
Write-Host $Msg
$Сообщение | Исходящий файл C:DataVMReport.txt
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
$Msg="------------------------------------------------------------ ----"
Отображение-вывод $Msg
$Msg=" События создания и удаления ВМ на уровне хоста"
Отображение-вывод $Msg
$Msg="------------------------------------------------------------ ----"
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
 
 
# Собираем информацию о ВМ
 
$Servers = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-3", "Hyper-V-4", "Prod1", "Prod2")
ForEach ($Server в $Servers) {
 
$ServerName = $Сервер
Get-MyData $ServerName
$TotalJanCreateEvents = [int]$TotalJanCreateEvents + [int]$NumJanCreateEvents
$TotalJanDeleteEvents = [int]$TotalJanDeleteEvents + [int]$NumJanDeleteEvents
$TotalFebCreateEvents = [int]$TotalFebCreateEvents + [int]$NumFebCreateEvents
$TotalFebDeleteEvents = [int]$TotalFebDeleteEvents + [int]$NumFebDeleteEvents
$TotalMarCreateEvents = [int]$TotalMarCreateEvents + [int]$NumMarCreateEvents
$TotalMarDeleteEvents = [int]$TotalMarDeleteEvents + [int]$NumMarDeleteEvents
$TotalAprCreateEvents = [int]$TotalAprCreateEvents + [int]$NumAprCreateEvents
$TotalAprDeleteEvents = [int]$TotalAprDeleteEvents + [int]$NumAprDeleteEvents
$TotalMayCreateEvents = [int]$TotalMayCreateEvents + [int]$NumMayCreateEvents
$TotalMayDeleteEvents = [int]$TotalMayDeleteEvents + [int]$NumMayDeleteEvents
$TotalJunCreateEvents = [int]$TotalJunCreateEvents + [int]$NumJunCreateEvents
$TotalJunDeleteEvents = [int]$TotalJunDeleteEvents + [int]$NumJunDeleteEvents
$TotalJulCreateEvents = [int]$TotalJulCreateEvents + [int]$NumJulCreateEvents
$TotalJulDeleteEvents = [int]$TotalJulDeleteEvents + [int]$NumJulDeleteEvents
$TotalAugCreateEvents = [int]$TotalAugCreateEvents + [int]$NumAugCreateEvents
$TotalAugDeleteEvents = [int]$TotalAugDeleteEvents + [int]$NumAugDeleteEvents
$TotalSepCreateEvents = [int]$TotalSepCreateEvents + [int]$NumSepCreateEvents
$TotalSepDeleteEvents = [int]$TotalSepDeleteEvents + [int]$NumSepDeleteEvents
$TotalOctCreateEvents = [int]$TotalOctCreateEvents + [int]$NumOctCreateEvents
$TotalOctDeleteEvents = [int]$TotalOctDeleteEvents + [int]$NumOctDeleteEvents
$TotalNovCreateEvents = [int]$TotalNovCreateEvents + [int]$NumNovCreateEvents
$TotalNovDeleteEvents = [int]$TotalNovDeleteEvents + [int]$NumNovDeleteEvents
$TotalDecCreateEvents = [int]$TotalDecCreateEvents + [int]$NumDecCreateEvents
$TotalDecDeleteEvents = [int]$TotalDeleteEvents + [int]$NumDecDeleteEvents
}
 
 
 
 
 
 
 
$ сообщение = " "
Отображение-вывод $Msg
$Msg="------------------------------------------------------------ ---"
Отображение-вывод $Msg
$Msg=" Всего событий создания и удаления ВМ"
Отображение-вывод $Msg
$Msg="------------------------------------------------------------ ---"
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
$Msg="Всего событий создания за январь: " + $TotalJanCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за январь: " + $TotalJanDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий создания за февраль: " + $TotalFebCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за февраль: " + $TotalFebDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий создания за март: " + $TotalMarCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за март: " + $TotalMarDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий создания за апрель: " + $TotalAprCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за апрель: " + $TotalAprDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий, которые могут быть созданы: " + $TotalMayCreateEvents
Отображение-вывод $Msg
$Msg="Всего возможных событий удаления: " + $TotalMayDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий Create в июне: " + $TotalJunCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления в июне: " + $TotalJunDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий Create за июль: " + $TotalJulCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за июль: " + $TotalJulDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий Create за август: " + $TotalAugCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за август: " + $TotalAugDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий создания за сентябрь: " + $TotalSepCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за сентябрь: " + $TotalSepDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий создания за октябрь: " + $TotalOctCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за октябрь: " + $TotalOctDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий Create за ноябрь: " + $TotalNovCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за ноябрь: " + $TotalNovDeleteEvents
Отображение-вывод $Msg
$Msg="Всего событий создания за декабрь: " + $TotalDecCreateEvents
Отображение-вывод $Msg
$Msg="Всего событий удаления за декабрь: " + $TotalDecDeleteEvents
Отображение-вывод $Msg
 
 
 
 
# Расчет и отображение общего количества событий
 
 
 
$ TotalCreate = $ totalJancReateeVents + $ totalFeBreateEvents + $ totalMarcreateEvents + $ totalAprCreateeVents + $ totalMayCreateEvents + $ totalJunCreateEvents + $ totalJulCreateEvents + $ totalAugcreateevents + $ alteSpreateeventscreateventscreateventscreateventscreateventscreateventscreate.
$TotalDelete = $TotalJanDeleteEvents + $TotalFebDeleteEvents + $TotalMarDeleteEvents + $TotalAprDeleteEvents + $TotalMayDeleteEvents + $TotalJunDeleteEvents + $TotalJulDeleteEvents + $TotalAugDeleteEvents + $TotalSepDeleteEvents + $TotalOctDeleteEvents + $TotalNovDeleteEvents + $TotalDecDeleteEvents
 
$ сообщение = " "
Отображение-вывод $Msg
$Msg="----------------------------"
Отображение-вывод $Msg
$Msg=" Общие итоги"
Отображение-вывод $Msg
$Msg="----------------------------"
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
$Msg="Всего созданных виртуальных машин за последний год: " + $TotalCreate
Отображение-вывод $Msg
$Msg="Всего удалений виртуальных машин за последний год: " + $TotalDelete
Отображение-вывод $Msg
$ сообщение = " "
Отображение-вывод $Msg
 
Если ($TotalCreate -GT $TotalDelete){
$Trend = $TotalCreate - $TotalDelete
$Msg="Сейчас в вашей организации " + $Trend + " больше виртуальных машин, чем год назад."
Отображение-вывод $Msg
}
 
Если ($TotalCreate -LT $TotalDelete){
$Trend = $TotalDelete - $TotalCreate
$Msg="Сейчас в вашей организации " + $Trend + " меньше виртуальных машин, чем год назад."
Отображение-вывод $Msg
}
 
$ сообщение = " "
Отображение-вывод $Msg
 
 
 
# Создать диаграмму
 
$DataSource1 = [заказано]@{July=$TotalJulCreateEvents; Август=$TotalAugCreateEvents; Сентябрь=$TotalSepCreateEvents; Октябрь=$TotalOctCreateEvents; ноябрь=$TotalNovCreateEvents; Декабрь=$TotalDecCreateEvents; Январь=$TotalJanCreateEvents; Февраль=$TotalFebCreateEvents; март=$TotalMarchCreateEvents; апрель=$TotalAprCreateEvents; Май=$TotalMayCreateEvents; Июнь=$TotalJunCreateEvents}
$DataSource2 = [заказано]@{July=$TotalJulDeleteEvents; Август=$TotalAugDeleteEvents; Сентябрь=$TotalSepDeleteEvents; Октябрь=$TotalOctDeleteEvents; ноябрь=$TotalNovDeleteEvents; Декабрь=$TotalDecDeleteEvents; Январь=$TotalJanDeleteEvents; Февраль=$TotalFebDeleteEvents; март=$TotalMarDeleteEvents; апрель=$TotalAprDeleteEvents; Май=$TotalMayDeleteEvents; Июнь=$TotalJunDeleteEvents}
 
 
 
 
 
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")
 
 
 
$scriptpath = Split-Path-parent $MyInvocation.MyCommand.Definition
 
# объект диаграммы
$chart1 = Новый объект System.Windows.Forms.DataVisualization.Charting.Chart
$chart1.Ширина = 1000
$chart1.Высота = 1000
$chart1.BackColor = [System.Drawing.Color]::Белый
 
# заглавие
[void]$chart1.Titles.Add("Виртуальные машины созданы и удалены")
$chart1.Titles[0].Font = "Arial, 13pt"
$chart1.Titles[0].Alignment = "topLeft"
 
# область диаграммы
$chartarea = Новый объект System.Windows.Forms.DataVisualization.Charting.ChartArea
$chartarea.Name = "ОбластьДиаграммы1"
$chartarea.AxisY.Title = "Виртуальные машины"
$chartarea.AxisX.Title = "Время"
$chartarea.AxisY.Interval = 1
$chartarea.AxisX.Interval = 1
$chart1.ChartAreas.Add($chartarea)
 
# легенда
$legend = система нового объекта.Windows.Forms.DataVisualization.Charting.Legend
$legend.name = "Легенда1"
$chart1.Легенды.Добавить($легенда)
 
 
# Созданные виртуальные машины ряды данных
[void]$chart1.Series.Add("VM_Created")
$chart1.Series["VM_Created"].ChartType = "Линия"
$chart1.Series["VM_Created"].BorderWidth = 3
$chart1.Series["VM_Created"].IsVisibleInLegend = $true
$chart1.Series["VM_Created"].chartarea = "ChartArea1"
$chart1.Series["VM_Created"].Legend = "Легенда1"
$chart1.Series["VM_Created"].color = "Зеленый"
$Chart1.Series["VM_Created"].Points.DataBindXY($DataSource1.keys, $DataSource1.Values)
 
# Виртуальные машины удалили серию данных
[void]$chart1.Series.Add("VM_Deleted")
$chart1.Series["VM_Deleted"].ChartType = "Линия"
$chart1.Series["VM_Deleted"].IsVisibleInLegend = $true
$chart1.Series["VM_Deleted"].BorderWidth = 3
$chart1.Series["VM_Deleted"].chartarea = "ChartArea1"
$chart1.Series["VM_Deleted"].Legend = "Легенда1"
$chart1.Series["VM_Deleted"].color = "Синий"
$Chart1.Series["VM_Deleted"].Points.DataBindXY($DataSource2.keys, $DataSource2.Values)
 
# отображаем диаграмму на форме
 
$Form = Новый объект Windows.Forms.Form
$Form.Text = "Разрастание ВМ"
$Форма.Ширина = 1000
$Форма.Высота = 1000
$Form.controls.add($Chart1)
$Form.Add_Shown({$Form.Activate()})
$Форма.ШоуДиалог()
 
# Сохранить график
$chart1.SaveImage("C:DataChart.png","png")

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

Изображение 14627
Это то, что вы видите на экране при запуске скрипта.

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

Изображение 14628
PowerShell также создает диаграмму данных.

Наконец, PowerShell создает два файла. Самая последняя строка кода в скрипте сохраняет диаграмму в файл.PNG. Файл называется C:DataChart.png. Файл отчета сохраняется как C:DataVMReport.txt. Полный текст отчета с моих серверов вы можете увидеть ниже:

Отчет о виртуальной машине
Отчет о виртуальной машине
 
--------------------------------------------------
События создания и удаления ВМ на уровне хоста
--------------------------------------------------
 
 
Сервер: Hyper-V-1
--------------------------------
Январь Создать События: 0
Январь Удаление событий: 0
Февральские события создания:
Февральские события удаления: 2
Мартовские события:
Мартовские события удаления:
Апрель Создание событий: 0
Апрель Удаление событий: 0
Может создавать события: 0
Может удалить события: 0
Июньские события создания: 2
Июнь Удаление событий: 0
Июль Создание событий: 0
Июль Удаление событий: 0
Август Создание событий: 0
Август Удалить События: 0
Сентябрь Создание событий: 0
Сентябрь Удалить События: 0
Октябрь Создание событий: 0
Октябрь Удаление событий: 0
Ноябрьские события создания: 5
Ноябрь Удалить События: 0
Декабрь Создать события: 0
Декабрь Удаление событий: 0
 
 
Сервер: Hyper-V-2
--------------------------------
Январь Создать События: 0
Январь Удаление событий: 0
Событий создания в феврале: 4
Февральские события удаления: 5
Мартовские события создания: 2
Мартовские события удаления:
Апрель Создание событий: 0
Апрель Удаление событий: 0
Может создавать события: 0
Может удалить события: 0
Июнь Создание событий: 0
Июнь Удаление событий: 0
Июль Создание событий: 0
Июль Удаление событий: 0
Август Создание событий: 0
Август Удалить События: 0
Сентябрь Создание событий: 0
Сентябрь Удалить События: 0
Октябрь Создание событий: 0
Октябрь Удаление событий: 0
Ноябрь Создание событий: 3
Ноябрьские события удаления: 3
Декабрь Создать события: 0
Декабрь Удаление событий: 0
 
 
Сервер: Hyper-V-3
--------------------------------
Январь Создать События: 0
Январь Удаление событий: 0
Февральские события создания:
Февральские события удаления:
Мартовские события создания: 2
Мартовские события удаления:
Апрель Создание событий: 0
Апрель Удаление событий: 0
Может создавать события: 0
Может удалить события: 0
Июньские события создания: 2
Июньские события удаления:
Июль Создание событий: 0
Июль Удаление событий: 0
Август Создание событий: 0
Август Удалить События: 0
Сентябрь Создание событий: 0
Сентябрь Удалить События: 0
Октябрь Создание событий: 0
Октябрь Удаление событий: 0
Ноябрь Создать События: 0
Ноябрь Удалить События: 0
Декабрь Создать события: 0
Декабрь Удаление событий: 0
 
 
Сервер: Hyper-V-4
--------------------------------
Январь Create Events: 36
Январь Удаление событий: 31
Февральские события создания: 6
Февраль Удаление событий: 0
Мартовские события создания: 3
Мартовские события удаления: 5
Апрель Создание событий:
Апрель Удаление событий: 0
Может создавать события:
Может удалить события: 0
Июньские события создания: 3
Июньские события удаления:
Июль Создание событий: 0
Июль Удаление событий: 0
Август Создание событий: 0
Август Удалить События: 0
Сентябрь Создание событий: 0
Сентябрь Удалить События: 0
Октябрь Создание событий: 0
Октябрь Удаление событий: 0
Ноябрь Создать События: 0
Ноябрь Удалить События: 0
Декабрь Создать события: 0
Декабрь Удаление событий: 0
 
 
Сервер: Prod1
--------------------------------
Январь Создать События: 0
Январь Удаление событий: 0
Февраль Создание событий: 0
Февраль Удаление событий: 0
Март Создать события: 0
Март Удалить События: 0
Апрель Создание событий: 0
Апрель Удаление событий: 0
Может создавать события: 0
Может удалить события: 2
Июнь Создание событий: 0
Июнь Удаление событий: 0
Июль Создание событий: 0
Июль Удаление событий: 0
Август Создание событий: 0
Август Удалить События: 0
Сентябрь Создание событий: 0
Сентябрь Удалить События: 0
Октябрь Создание событий: 0
Октябрь Удаление событий: 0
Ноябрьские события создания:
Ноябрьские события удаления: 3
Декабрь Создать события: 0
Декабрь Удаление событий: 0
 
 
Сервер: Прод2
--------------------------------
Январь Создать События: 0
Январь Удаление событий: 0
Февраль Создание событий: 0
Февраль Удаление событий: 0
Март Создать события: 0
Март Удалить События: 0
Апрель Создание событий: 0
Апрель Удаление событий: 0
Может создавать события: 0
Может удалять события:
Июнь Создание событий: 0
Июнь Удаление событий: 0
Июль Создание событий: 0
Июль Удаление событий: 0
Август Создание событий: 0
Август Удалить События: 0
Сентябрь Создание событий: 0
Сентябрь Удалить События: 0
Октябрь Создание событий: 0
Октябрь Удаление событий: 0
Ноябрь Создать События: 0
Ноябрь Удалить События: 0
Декабрь Создать события: 0
Декабрь Удаление событий: 0
 
 
--------------------------------------------------
Всего событий создания и удаления ВМ
--------------------------------------------------
 
Всего за январь Create Events: 36
Всего событий удаления в январе: 31
Всего за февраль Create Events: 10
Всего событий удаления за февраль: 7
Всего мартовских событий Create: 7
Всего мартовских событий удаления: 5
Всего событий создания за апрель: 0
Всего событий удаления за апрель: 0
Всего может создать событий: 0
Всего может быть удалено событий: 2
Всего июньских событий Create: 7
Всего событий удаления в июне: 0
Всего июльских событий Create: 0
Всего июльских событий удаления: 0
Всего созданных событий в августе: 0
Всего событий удаления в августе: 0
Всего в сентябре Create Events: 0
Всего событий удаления в сентябре: 0
Всего октябрьских событий Create: 0
Всего событий удаления в октябре: 0
Всего ноябрьских событий Create: 8
Всего ноябрьских событий удаления: 6
Всего декабрьских событий Create: 0
Всего декабрьских событий удаления: 0
 
-------------------------------------------
Общие итоги
-------------------------------------------
 
Всего создано виртуальных машин за последний год: 68
Всего удалений виртуальных машин за последний год: 51.

Сейчас в вашей организации на 17 виртуальных машин больше, чем год назад.

Заворачиваем…

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

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