Получаем Uptime в Windows.
Когда то давно вопрос получение uptime от серверов уже поднимался, но в предновогодние дни стоит затронуть его еще раз…
Назову причину – коллега забыл про сервер разработки и его аптайм до вчерашнего дня составил 832 дня !
Молиться надо на таких разработчиков раз они не только не уронили, но и не доставали более двух лет
В любом случае на цифирьки посмотреть не мешает, при большом аптайме, как минимум не установлены критические обновления. И закончится это может в любой момент и вероятность того что закончится оно «плохо» или «могло быть и лучше если бы почесались»…
Да простят меня «линуксоиды», мерится аптаймами не будем
просто посмотрим как можно получить нужную цифру и на методики получения информации о том сколько у нас отработала система.
Примечание: Коллеги линукс-админы, это не камень в ваш огород, я знаю много отличных специалистов, но в ваших рядах затесались (в семье не без урода) те кто свято верит в то что сервер с ядром 2.2 и аптаймом в 5 лет совершенно безопасен и стабилен (при этом сервер светится как новогодняя елка во внешний мир). Я не поддерживаю такого и чаще всего просто не понимаю. Дискуссии про то что линукс мега надежен и супер стабилен и про то что виндофс бяка поддерживать не буду. Надеюсь на понимание.
Специально для тех кто забывает про серверы…
Используем Диспетчер Задач
В Windows Vista и Windows Server 2008, в диспетчере задач есть возможность посмотреть аптайм.
- На таскбаре жмем мышом и выбираем Task Manager. Можно использовать комбинацию CTRL+SHIFT+ESC. Тут уж кто как привык.
- Выбираем вкладку Performance.
- В свойствах System видим нужное значение.

Примечание: К сожалению данная методика не доступна в Windows 2003.
Используем утилиту systeminfo
Меня часто удивляет тот факт что про утилиту systeminfo почему то все забывают. Тем не менее она дает не только массу информации, но и нужное нам значение последней загрузки системы.
Открываем командную строку и вводим:
systeminfo | find "System Boot Time:"

Утилита Uptime
Для удобства Microsoft сделал довольно полезный инструмент который можно получить по ссылке:
http://support.microsoft.com/kb/232243
Для использования необходимо:
- Загрузить утилиту.
- Запихнуть ее в папку которая включена в переменную %PATH%
- Для получения справки используйте ключ /?
- Если справка не требуется то вводите.
uptime.exe

Используем утилиту NET STATISTICS
В выводе команды:
net statistics workstation
Среди предоставленной информации есть время последней загрузки системы

Используем Event Viewer
Метод заключен в поиске сообщения с кодом 6005 (запуск сервиса EventLog) от источника EventLog и события с кодом 6006 (остановка сервиса EventLog)
Естественно эту же информацию легко получить с удаленного хоста введя команду:
Более просто этот метод реализуется просмотром журнала System и поиска событий с кодами 6005 и 6006.

Используем 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.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
Более компактного вывода можно добиться командой которая дает немножко нестандартный, но все же вывод.
Более наглядный вариант умеющий выводить в файл результаты:
$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. |
А также бесплатно подписаться по E-mail и получать актуальную информацию в числе первых.
Вы можете оставить комментарий.
в вин2003 команда systmeinfo прекрасно показывала аптайм. в 2008 нет. Почему МС убрала эту фишку – хз!
FantaЦитировать
Лично у меня метод NET STATISTICS и EventViewer,дают совсем другие цифры.
$_.EventID -eq 6005 – два раза используется один и тот же ID.
[math]::round – вывод просто не понятен.
‘Reboot Initiator’,‘Reboot Reason Code’ – зачем,если в скрипте не используются?
-namespace «root\CIMV2″ – в чем смысл,если по умолчанию используется «root\cimv2″?
KazunЦитировать
NET STATISTICS не дает на 100% точного результата. Вернее он дает цифру когда была запущена служба Workstation. По умолчанию она стартует вместе с системой.
Привел для полного комплекта…
6005.
Спасибо. Исправил. Должно быть 6005 и 6006.
[math]::round.
Округление. Конечно можно и без него…
‘Reboot Initiator’,‘Reboot Reason Code’.
Если оно есть в логах то должно выводится. В данном случае это ошметки от старого скрипта. Забыл подчистить
-namespace «root\CIMV2″.
Согласен. Лишнее. Подправлю.
Сергей МариничевЦитировать
Они изменили формат отображения – в 2003 показывался аптайм, а в 2008 показывает дату и время последней загрузки ОС. Кому как нравится…
DenisOЦитировать
Судя по моим тестам результат верности у нее 30%,собственно,как и у Event Viewer через события 6005-6
KazunЦитировать
Хм. В первом случае это загрузка службы Wordstation, а во втором EventLog. Если хосту было плохо то ошибки вполне могут быть.
Я бы полагался на WMI. Там данные поточнее будут.
Сергей МариничевЦитировать
systeminfo | find «Время работы системы»
МаратЦитировать
В русских системах именно так.
Спасибо за комментарий.
Сергей МариничевЦитировать