Продолжительность безотказной работы компьютеров — важный статистический показатель, который помогает администратору обеспечивать эффективное управление системами. Существует несколько способов определения времени безотказной работы вычислительных систем (хочу отметить, что данный список ни в коем случае нельзя считать исчерпывающим):

  1. Продолжительность безотказной работы компьютера в днях, часах, минутах и секундах отображается на вкладке Performance диспетчера задач.
  2. Утилита командной строки Systeminfo показывает время последней перезагрузки компьютера.
  3. Время последней перезагрузки компьютера фиксируется в системном журнале регистрации событий под идентификатором события ID 6005.
  4. Класс Win32_OperatingSystem инструментария управления Windows имеет свойство LastBootUpTime, содержащее время последней перезагрузки компьютера.

Каждый из перечисленных приемов имеет свои достоинства и недостатки. Так, диспетчер задач обеспечивает возможность быстрого просмотра времени безотказной работы одного компьютера, а журнал регистрации событий содержит дополнительную информацию о событии 6005, которая может дать представление о характере отказа системы. Пожалуй, первые три варианта не могут использоваться в целях автоматизации (скажем, для организации опроса группы серверов с целью выявления времени их безотказной работы), так что давайте обратимся к WMI. Но первым делом нам нужно разобраться с тем, как WMI возвращает информацию по времени безотказной работы.

Выявление продолжительности безотказной работы системы с помощью WMI

Существует несколько способов извлечения сведений о времени безотказной работы компьютера средствами WMI. До появления на рынке технологии Windows PowerShell один из наиболее очевидных способов состоял в использовании команды WMIC. Например, таким образом:

wmic path Win32_OperatingSystem
   get LastBootUpTime

Эта команда считывает свойство LastBootUpTime размещенного на соответствующем компьютере экземпляра класса Win32_OperatingSystem. В среде PowerShell мы используем не WMIC, а команду Get-WmiObject:

Get-WmiObject Win32_OperatingSystem
   | Select-Object LastBootUpTime

Попробуйте запустить обе команды, и вы увидите, что результат не обязательно будет «удобочитаемым». Дело в том, что дата и время, выраженные в свойстве LastBootUpTime, представлены в виде строки даты и времени по модели CIM (Common Information Model). Например:

20160512154836.125599=360

Эта строка даты и времени читается так: 12 мая 2016 года, 15:48:36. Фрагмент 125599 — это число микросекунд (его мы игнорируем), а -360 представляет выраженное в минутах отклонение от стандартного времени по Гринвичскому меридиану (GMT). В нашем примере -360 означает «по времени GMT + 6 часов». Аналогичным образом +180 означало бы «на 3 часа раньше, чем по Гринвичу».

Чтобы пользоваться строкой даты и времени по CIM было удобнее, нам придется конвертировать ее в другой формат (объект DateTime). В среде PowerShell это сделать просто: статический метод ToDate

Time класса System.Management.ManagementDateTimeConverter.NET преобразует строку даты и времени по CIM в объект DateTime, который мы можем с легкостью использовать в оболочке PowerShell. Пример такого преобразования представлен на экране 1. Здесь переменная $dateTime содержит дату и время последней загрузки текущего компьютера. Чтобы получить время бесперебойной работы (вместо даты и времени последней загрузки), мы можем вычесть значение этой переменной из значения текущего времени (Get-Date), в результате чего получим объект TimeSpan, содержащий искомую разность. На экране 2 показан пример такой операции. Здесь первая команда...

Это не вся статья. Полная версия доступна только подписчикам журнала. Пожалуйста, авторизуйтесь либо оформите подписку.
Купить номер с этой статьей в PDF