Получаем Uptime в Windows.

uptimeКогда то давно вопрос получение uptime от серверов уже поднимался, но в предновогодние дни стоит затронуть его еще раз…

Назову причину – коллега забыл про сервер разработки и его аптайм до вчерашнего дня составил 832 дня !

Молиться надо на таких разработчиков раз они не только не уронили, но и не доставали более двух лет :)

В любом случае на цифирьки посмотреть не мешает, при большом аптайме, как минимум не установлены критические обновления. И закончится это может в любой момент и вероятность того что закончится оно «плохо» или «могло быть и лучше если бы почесались»…

Да простят меня «линуксоиды», мерится аптаймами не будем :) просто посмотрим как можно получить нужную цифру и на методики получения информации о том сколько у нас отработала система.

Примечание: Коллеги линукс-админы, это не камень в ваш огород, я знаю много отличных специалистов, но в ваших рядах затесались (в семье не без урода) те кто свято верит в то что сервер с ядром 2.2 и аптаймом в 5 лет совершенно безопасен и стабилен (при этом сервер светится как новогодняя елка во внешний мир). Я не поддерживаю такого и чаще всего просто не понимаю. Дискуссии про то что линукс мега надежен и супер стабилен и про то что виндофс  бяка поддерживать не буду. Надеюсь на понимание.

Специально для тех кто забывает про серверы…

Используем Диспетчер Задач

В Windows Vista и Windows Server 2008, в диспетчере задач есть возможность посмотреть аптайм.

  1. На таскбаре жмем мышом и выбираем Task Manager. Можно использовать комбинацию CTRL+SHIFT+ESC. Тут уж кто как привык.
  2. Выбираем вкладку Performance.
  3. В свойствах System видим нужное значение.

taskmgr

Примечание: К сожалению данная методика не доступна в Windows 2003. 

Используем утилиту systeminfo

Меня часто удивляет тот факт что про утилиту systeminfo почему то все забывают. Тем не менее она дает не только массу информации, но и нужное нам значение последней загрузки системы.

Открываем командную строку и вводим:

systeminfo | find "System Boot Time:"

systeminfo

 

Утилита Uptime

Для удобства Microsoft сделал довольно полезный инструмент который можно получить по ссылке:

http://support.microsoft.com/kb/232243

Для использования необходимо:

  • Загрузить утилиту.
  • Запихнуть ее в папку которая включена в переменную %PATH%
  • Для получения справки используйте ключ /?
  • Если справка не требуется то вводите.
    uptime.exe

uptime

Используем утилиту NET STATISTICS

В выводе команды:

net statistics workstation

Среди предоставленной информации есть время последней загрузки системы

statistics

Используем Event Viewer

Метод заключен в поиске сообщения с кодом 6005 (запуск сервиса EventLog) от источника EventLog и события с кодом 6006 (остановка сервиса EventLog)

Get-EventLog -LogName system | Where-Object {$_.EventID -eq 6005 -or $_.EventID -eq 6006} | Select TimeGenerated, EventID

Естественно эту же информацию легко получить с удаленного хоста введя команду:

Get-EventLog -LogName system -Computer HOST_NAME -Credentil (Get-Credential)| Where-Object {$_.EventID -eq 6005 -or $_.EventID -eq 6006} | Select TimeGenerated, EventID

Более просто этот метод реализуется просмотром журнала System и поиска событий с кодами 6005 и 6006.
system-uptime

Используем WMI

У WMI класса Win32_PerfFormattedData_PerfOS_System есть счетчик SystemUptime, который можно использовать для получения необходимого значения.

# указываем текущий компьютер
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * From Win32_PerfFormattedData_PerfOS_System")

For Each objOS in colOperatingSystems
# для получения минут делим SystemUpTime на 60
intSystemUptime = Int(objOS.SystemUpTime / 60)
strMessage = "System uptime is " & intSystemUptime & " minutes"
msgBox strMessage, 0, "System Uptime"
Next

Можно использовать LastBootUpTime из класса Win32_OperatingSystem, но об этом в следующем методе.

Используем PowerShell

В данном методе используется WMI класс Win32_OperatingSystem и разница по времени между LocalDateTime и LastBootUpTime.

$wmi = Get-WmiObject -Class Win32_OperatingSystem
$wmi.ConvertToDateTime($wmi.LocalDateTime)$wmi.ConvertToDateTime($wmi.LastBootUpTime)

Получаемся не совсем аккуратная «простыня»

Days              : 12
Hours             : 22
Minutes           : 18
Seconds           : 29
Milliseconds      : 912
Ticks             : 11171099124010
TotalDays         : 12,9295128750116
TotalHours        : 310,308309000278
TotalMinutes      : 18618,4985400167
TotalSeconds      : 1117109,912401
TotalMilliseconds : 1117109912,401

Более компактного вывода можно добиться командой которая дает немножко нестандартный, но все же вывод.

[math]::round(((Get-Date) - ($q=gwmi Win32_OperatingSystem).ConvertToDateTime($q.lastbootuptime)).TotalDays, 2)

Более наглядный вариант умеющий выводить в файл результаты:

$ErrorActionPreference = "SilentlyContinue"
$reportFile = "D:\Scripts\Output\LastReboot.htm"
$reportFolder = "D:\Scripts\Output"
Remove-Item $reportFolder -Recurse

$InputFile = Get-Content Servers.txt
$LastReboot = @()
foreach ($computer in $InputFile) {
$q = "" | Select-Object ‘Machine Name’,‘Last Reboot TimeStamp’,‘Reboot Initiator’,‘Reboot Reason Code’
$q.‘Machine Name’ = $computer
$q.‘Last Reboot TimeStamp’ = [Management.ManagementDateTimeConverter]::ToDateTime((Get-WmiObject -class Win32_OperatingSystem -computername $computer -namespace "root\CIMV2").LastBootUpTime)
$LastReboot += $q
}
New-Item $reportFolder -ItemType directory

$LastReboot | Sort-Object ‘Last Reboot TimeStamp’ -Descending | ConvertTo-Html | Out-File $reportFile
Invoke-Expression $reportFile

PS несмотря на обилие методик я все же предпочитаю «дедовский метод» – утилиту uptime.exe.


Информация об авторе

Сергей Мариничев.
Вы можете присоединиться ко мне в Facebook или в Twitter.

Если Вам понравилась статья, то вы можете подписаться на RSS.
А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.

Получать обновления на email

Вы можете оставить комментарий.

8 Комментариев »

 
  • 1# Fanta (31 комм.):

    в вин2003 команда systmeinfo прекрасно показывала аптайм. в 2008 нет. Почему МС убрала эту фишку – хз!

      Цитировать

  • 2# Kazun (82 комм.):

    Лично у меня метод NET STATISTICS и EventViewer,дают совсем другие цифры.

    $_.EventID -eq 6005 – два раза используется один и тот же ID.

    [math]::round – вывод просто не понятен.

    ‘Reboot Initiator’,‘Reboot Reason Code’ – зачем,если в скрипте не используются?

    -namespace «root\CIMV2″ – в чем смысл,если по умолчанию используется «root\cimv2″?

      Цитировать

    • 3# Сергей Мариничев (687 комм.):

      NET STATISTICS не дает на 100% точного результата. Вернее он дает цифру когда была запущена служба Workstation. По умолчанию она стартует вместе с системой.
      Привел для полного комплекта…

      6005.
      Спасибо. Исправил. Должно быть 6005 и 6006.

      [math]::round.
      Округление. Конечно можно и без него…

      ‘Reboot Initiator’,‘Reboot Reason Code’.
      Если оно есть в логах то должно выводится. В данном случае это ошметки от старого скрипта. Забыл подчистить :)

      -namespace «root\CIMV2″.
      Согласен. Лишнее. Подправлю.

        Цитировать

  • 4# DenisO (61 комм.):

    Fanta:
    в вин2003 команда systmeinfo прекрасно показывала аптайм. в 2008 нет. Почему МС убрала эту фишку – хз!

    Они изменили формат отображения – в 2003 показывался аптайм, а в 2008 показывает дату и время последней загрузки ОС. Кому как нравится…

      Цитировать

  • 5# Kazun (82 комм.):

    Сергей Мариничев: NET STATISTICS не дает на 100% точного результата. Вернее он дает цифру когда была запущена служба Workstation. По умолчанию она стартует вместе с системой

    Судя по моим тестам результат верности у нее 30%,собственно,как и у Event Viewer через события 6005-6

      Цитировать

    • 6# Сергей Мариничев (687 комм.):

      Хм. В первом случае это загрузка службы Wordstation, а во втором EventLog. Если хосту было плохо то ошибки вполне могут быть.

      Я бы полагался на WMI. Там данные поточнее будут.

        Цитировать

  • 7# Марат (3 комм.):

    systeminfo | find «Время работы системы» :)

      Цитировать

 

Добавить комментарий

XHTML: Вы можете использовать тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>