Взятие под контроль разрастания виртуальных машин (часть 16)
- Взятие под контроль разрастания виртуальных машин (часть 2)
- Взятие под контроль разрастания виртуальных машин (часть 3)
- Взятие под контроль разрастания виртуальных машин (часть 4)
- Взятие под контроль разрастания виртуальных машин (часть 5)
- Взятие под контроль разрастания виртуальных машин (часть 6)
- Взятие под контроль разрастания виртуальных машин (часть 7)
- Взятие под контроль разрастания виртуальных машин (часть 8)
- Взятие под контроль разрастания виртуальных машин (часть 9)
- Взятие под контроль разрастания виртуальных машин (часть 10)
- Взятие под контроль разрастания виртуальных машин (часть 11)
- Взятие под контроль разрастания виртуальных машин (часть 12)
- Взятие под контроль разрастания виртуальных машин (часть 13)
- Взятие под контроль разрастания виртуальных машин (часть 18)
Введение
Как вы помните, мой сценарий немного запутался в предыдущей статье этой серии. Казалось бы, простое действие по подсчету событий создания и удаления виртуальных машин на серверах привело к осложнениям, связанным с ограничениями, которые PowerShell накладывает на использование переменных. Тем не менее, я придумал исправление. Теперь пришло время интегрировать это исправление в сценарий, который мы создавали. Если вы еще не читали предыдущую статью из этой серии или если это было давно, то я настоятельно рекомендую вернуться и прочитать ее, прежде чем переходить к этой.
Сценарий в его нынешнем виде
Код, который я предоставил вам в предыдущей статье, был разработан больше для иллюстрации концепций, которые я буду использовать, а не для того, чтобы действовать непосредственно как часть нашего скрипта. Таким образом, я хотел пойти дальше и дать вам код сценария в том виде, в каком он существует прямо сейчас. Вот код:
Функция Get-MyData($Server){
#Функция для получения информации о данных журнала ВМ
Write-Host «Имя текущего сервера» -NoNewLine; Запись-хост $Server
$MySession = New-PSSession -ComputerName $Server
Invoke-Command -Session $MySession -ScriptBlock {
#январь 2016
$NumJanCreateEvents = '0'
$JanCreateEvents = ”
$NumJanDeleteEvents = '0'
$JanDeleteEvents = ”
$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} -ErrorAction 'SilentlyContinue'
$NumJanCreateEvents = $JanCreateEvents.count
$JanDeleteEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$JanStartDate;EndTime=$JanEndDate} -ErrorAction 'SilentlyContinue'
$NumJanDeleteEvents = $JanDeleteEvents.count
Пишите-Ведущий «В январе 2016 года были» -NoNewLine; Write-Host $NumJanCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».
Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumJanDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».
#февраль 2016
$NumFebCreateEvents = '0'
$FebCreateEvents = ”
$NumFebDeleteEvents = '0'
$FebDeleteEvents = ”
$FebStartDate = '01.02.2016 00:00:00'
$FebEndDate = '29.02.2016 23:59:59'
$FebCreateEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13002;StartTime=$FebStartDate;EndTime=$FebEndDate} -ErrorAction 'SilentlyContinue'
$NumFebCreateEvents = $FebCreateEvents.count
$FebDeleteEvents = Get-WinEvent –FilterHashTable @{LogName=”Microsoft-Windows-Hyper-V-VMMS-Admin”;ID=13003;StartTime=$FebStartDate;EndTime=$FebEndDate} -ErrorAction 'SilentlyContinue'
$NumFebDeleteEvents = $FebDeleteEvents.count
Пишите-Ведущий «В феврале 2016 года были» -NoNewLine; Write-Host $NumFebCreateEvents -NoNewLine; Write-Host «Созданы новые виртуальные машины».
Write-Host «В тот же период времени были» -NoNewLine; Write-Host $NumFebDeleteEvents -NoNewLine; Write-Host «виртуальные машины удалены».
Exit-PSSession
}
}
#Тело сценария
$Servers = @("Hyper-V-1", "Hyper-V-2", "Hyper-V-4", "Prod1", "Prod2")
ForEach ($Server в $Servers) {
$ServerName = $Сервер
Get-MyData $ServerName
}
Подведение итогов
Итак, теперь нам нужно изменить код таким образом, чтобы мы могли подсчитывать события создания и удаления виртуальных машин для каждого хоста. Для этого мы собираемся применить методы, которые я показал вам в предыдущей статье. Позвольте мне пойти дальше и показать вам код, а затем я объясню, что я сделал. Вот код:
Функция 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'
}
#январь 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
# Ежемесячный выпуск
Пишите-Хозяин » «
Write-Host «Сервер:» -NoNewLine; Запись-хост $Server
Write-Host «Январь Создать события:» -NoNewLine; Запись хоста $NumJanCreateEvents
Write-Host «Январские события удаления: » -NoNewLine; Узел записи $NumJanDeleteEvents
Write-Host «Февральские события: » -NoNewLine; Запись хоста $NumFebCreateEvents
Write-Host «Февральские события удаления:» -NoNewLine; Запись хоста $NumFebDeleteEvents
Пишите-Хозяин » «
}
#Тело сценария
#Инициализировать переменные
$TotalJanCreateEvents = '0'
$TotalJanDeleteEvents = '0'
$TotalFebCreateEvents = '0'
$TotalFebDeleteEvents = '0'
$Servers = @("Hyper-V-1", "Hyper-V-2", "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
}
Write-Host «Всего событий создания за январь:» -NoNewLine; Запись хоста $TotalJanCreateEvents
Write-Host «Всего событий удаления за январь: » -NoNewLine; Узел записи $TotalJanDeleteEvents
Write-Host «Всего событий за февраль: » -NoNewLine; Запись хоста $TotalFebCreateEvents
Write-Host «Всего событий удаления за февраль:» -NoNewLine; Запись хоста $TotalFebDeleteEvents
На первый взгляд может показаться, что код был полностью изменен. Однако самые большие изменения заключаются в том, что я изменил несколько вещей и добавил несколько новых строк, которые выводят значения переменных по мере выполнения скрипта. Таким образом, вы можете убедиться, что скрипт работает правильно. Хотите верьте, хотите нет, но я мало что сделал с кодом с точки зрения функциональности.
Прежде чем я расскажу о том, как работает код, я хочу показать вам, как выглядит вывод сценария. Как вы можете видеть на рисунке A, мой сценарий перечисляет имена всех серверов, которые он анализирует, а также количество событий создания и удаления за каждый месяц. Как вы помните, в настоящее время мы изучаем только январь и февраль, чтобы код был коротким. Я добавлю в другие месяцы позже. В конце вывода сценарий подсчитывает общее количество событий создания и удаления на всех серверах за каждый месяц.
Рисунок A: Вот результат моего скрипта.
Итак, давайте поговорим о коде. Я не буду вдаваться в исчерпывающие подробности, потому что мало что изменилось. Тело скрипта начинается с инициализации переменных, в которых будет храниться общее количество событий создания и удаления на всех серверах за каждый месяц. После инициализации этих переменных я добавляю имена своих серверов в переменную $Servers, а затем запускаю цикл сценария.
Цикл передает имена серверов функции Get-MyData одно за другим. Функция определяет сеанс для указанного сервера, а затем инициализирует ряд различных переменных. Эти переменные инициализируются на удаленном сервере, а не в локальной системе.
После инициализации переменных функция начинает собирать информацию о событиях создания и удаления для указанного сервера. Для каждого месяца предусмотрен отдельный процесс сбора. Этот раздел работает почти так же, как и раньше, но я сделал два важных изменения. Команды, которые назначают события создания и удаления переменной, теперь включают командлет Invoke-Command и ссылаются на удаленный сеанс. Именно это позволяет присваивать данные переменной в локальной системе.
Другое большое изменение заключается в том, что переменные, которые подсчитывают события создания и удаления, теперь определены как глобальные. Таким образом, содержимое переменной можно использовать в основном блоке скрипта.
Когда функция возвращается, основная часть скрипта подсчитывает количество событий создания и удаления за каждый месяц. Для этой цели в теле скрипта используются переменные, имена которых начинаются с $Total. Эти переменные были инициализированы 0 в самом начале скрипта. Теперь количество событий создания добавляется к переменной для каждого сервера отдельно, пока переменная не будет содержать общую сумму событий на всех серверах.
Кстати, вы заметите, что строки кода, которые подсчитывают общее количество событий создания и удаления, используют [int]. [int] указывает PowerShell обрабатывать содержимое переменных как целые числа. В противном случае содержимое переменных обрабатывается как текст и объединяется, а не суммируется.
Вывод
Теперь у нас есть сценарий, который подсчитывает события создания и удаления виртуальных машин в центре обработки данных. В следующей статье серии мы добавим оставшиеся месяцы, а затем поработаем над выводом значений на диаграмму.
- Взятие под контроль разрастания виртуальных машин (часть 2)
- Взятие под контроль разрастания виртуальных машин (часть 3)
- Взятие под контроль разрастания виртуальных машин (часть 4)
- Взятие под контроль разрастания виртуальных машин (часть 5)
- Взятие под контроль разрастания виртуальных машин (часть 6)
- Взятие под контроль разрастания виртуальных машин (часть 7)
- Взятие под контроль разрастания виртуальных машин (часть 8)
- Взятие под контроль разрастания виртуальных машин (часть 9)
- Взятие под контроль разрастания виртуальных машин (часть 10)
- Взятие под контроль разрастания виртуальных машин (часть 11)
- Взятие под контроль разрастания виртуальных машин (часть 12)
- Взятие под контроль разрастания виртуальных машин (часть 13)
- Взятие под контроль разрастания виртуальных машин (часть 18)