Обнаружение / ожидание простоя в Powershell-Script - PullRequest
0 голосов
/ 30 апреля 2019

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

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

Для лучшей наглядности смотрите скриншот примера CPU-графика: График производительности

  1. Последовательность установки
  2. Установка завершена.Компьютер не используется в течение нескольких секунд
  3. Рабочая нагрузка в течение нескольких минут

(*) Извините, график не является подлинным.Просто для наглядности.

Я ищу решение PowerShell для обнаружения простоя.После установки последнего программного пакета я хочу запустить его, и он должен подождать, пока компьютер не будет готов.

Он должен быть динамическим - я не хочу использовать такие вещи, как ...

Start-Sleep -Seconds 300

... и надеюсь, что задачи завершены.

Это не должно зависеть от имени процесса или чего-то подобного.

РЕДАКТИРОВАТЬ # 1:

На основании ваших комментариев я создал следующий код в качестве первого теста:

$Start = Get-Date

do {

    $LoadPercentage = Get-Counter -Counter "\prozessor(_total)\prozessorzeit (%)" -SampleInterval 1 -MaxSamples 5 | Select-Object -ExpandProperty CounterSamples | Group-Object -Property InstanceName | `
                  ForEach-Object { 
                    $_ | Select-Object -Property @{ n='Average'; e={ [math]::Round( ( $_.Group.CookedValue | Measure-Object -Average ).Average, 1 ) } };
                  } | Select-Object -ExpandProperty Average

   $LoadPercentage

} until ( ( $LoadPercentage -lt 15 ) -or ( ( Get-Date ) -gt $Start.AddMinutes(1) ) )
  • Мне не нравится, что командлет "Get-Counter"не нейтральный к культуре, и я не хочу использовать много кода, чтобы обойти это.(например, this )
  • Является ли счетчик " \ Processor (_Total) \% Processor Time " лучшим для этого сценария?
  • Буду ли яполучить этот счетчик также с помощью «Get-CimInstance»?
  • Должны ли системы с несколькими ядрами процессора (например, 16 ядер) обрабатываться по-разному?
  • Есть ли улучшения по моему запросу?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...