Время работы сервера windows

Посмотреть время работы компьютера после перезагрузки

Иногда хочется (или необходимо) увидеть, сколько компьютер работал времени без перезагрузки. В данной инструкции приведены примеры команд для Windows и Linux.

Для определения возраста компьютера или ноутбука, не стоит полагаться на 100% на данную информацию — система может быть переустановлена, а вместе с этим, сбивается общее время работы системы.

Windows

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

Для этого нажимаем комбинацию клавиш Win + R и в появившемся окне вводим cmd:

И нажимаем OK. Откроется командная строка.

1. Команда net stats

Введем команду net stats srv

Среди результатов увидим Статистика после .

Это и будет, так называемый, uptime windows или время работы с момента последнего запуска.

2. Команда systeminfo

Для более детальной информации также можно ввести следующую команду:

Она покажет детальную информацию, в том числе общее (суммарное) время работы компьютера:

* где дата установки — дата и время, когда система была запущена в первые; время загрузки системы — дата и время, когда система была перезагружена последний раз.

Время выключения Windows

Открываем журнал Windows (команда eventvwr) и находим последнее событие с кодом 6006:

Linux

Любая из приведенных ниже команд позволит посмотреть общее время работы Linux:

1. Uptime

13:28:16 up 27 days, 2:46, 1 user, load average: 0.00, 0.02, 0.05

* где 13:28:16 — текущее время; up 27 days — дней с последней перезагрузки.

* по сути, ответ тот же, что и после ввода команды uptime, с подробными сведениями подключения пользователей.

3. Top

Команда top предназначена для отображения состояния загруженности Linux, но она также показывает, сколько компьютер работал после перезагрузки:

top — 13:35:15 up 27 days, 2:53, 1 user, load average: 0.03, 0.03, 0.05
Tasks: 116 total, 1 running, 115 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.2 st
KiB Mem : 1016040 total, 77052 free, 591528 used, 347460 buff/cache
KiB Swap: 524284 total, 231264 free, 293020 used. 237288 avail Mem

* в данном случае, нас интересует верхняя строчка, которая нам напоминает вывод, все той же, uptime.

Время работы сервера windows

Добрый день уважаемые читатели блога pyatilistnik.org, сегодня хочется рассказать, о том как определить время работы системы (UP time) без выключения, на примере windows server 2008 R2. Случается и такое, что нужно определить например для доказательства, что сервер не перезагружался а работал как швейцарские часы, для этого Microsoft не поскупилась на способы определения, хорошо, что во первых все делаем встроенными средствами, а во вторых разнообразие, каждый найдет самый актуальный для него метод. Итак открываем Диспетчер устройств в windows server 200R2

Как узнать uptime windows систем

Первый Способ узнавать uptime windows

И так давайте научимся с вами узнавать uptime windows операционных систем, на примере Windows Server 2008 R2, но все проделанные средства подойдут и для других редакций.

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Переходим на вкладку Быстродействие и видим, что время работы системы 2 дня 4 часа 54 минуты

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Второй способ узнавать uptime windows

2 Способ определить время работы Windows без выключения. Еще один весьма простой способ получить информацию о времени работы операционной системой- запустить командную строку «Пуск» — «Программы» — «Стандартные» — «Командная строка» или воспользоваться сочетанием горячишь клавиш «Win» + «R» в строке поиска ввести «CMD» и нажать клавишу Enter, так же советую прочитать Как открыть командную строку Windows / 10 способов открыть командную строку.

В командной строке введите команду: net statistics workstation. В результате вы увидите время начала работы ОС Windows.

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Третий способ узнавать uptime windows

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

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Но чтобы быть более кратким введем

для англоязычной версии операционной системы systeminfo | find «System Boot Time:»

для русскоязычной версии операционной системы systeminfo | find «Время загрузки системы:».

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Читайте также:  Network bridge mac os

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Четвертый способ узнавать uptime windows

4 способ как проверить время работы компьютера это через Центр управления сетями и общим доступом. Для этого правым кликом по значку сети

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Или будем учить оснастки через пуск, вводим ncpa.cpl

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

В любом случае вы попадете на ваш сетевой интерфейс, от которого нам нужны свойства и строка Длительность.

Пятый способ узнавать uptime windows

Так же информацию можно найти в Журналах Windows (Event Viewer). Для этого: Пуск-Администрирование-Просмотр событий или просто в пуске ввести просмотр событий или eventvwr.msc.

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Переходим в систему и делаем фильтр текущего журнала и вводим в нужное поле 6005

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Видим отфильтровалось и осталось гораздо меньше логов. Открываем его.

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

В итоге находим нужное сообщение, о том когда была запущена система.

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Шестой способ узнавать uptime windows

Ну собственно можно воспользоваться WMI и PowerShell. Выяснить время старта ОС можно вот так:

$wmi = Get-WmiObject Win32_OperatingSystem
$wmi.LastBootUpTime

Время выводится в несколько неудобном формате, поэтому сконвертируем его:

И выведем время работы с точностью до миллисекунды, вычтя из текущей даты дату последней загрузки:

Как определить UP time (время работы системы) без выключения на примере windows server 2008 R2

Надеюсь вы как и я что то для себя повторили, а кто то и просто узнал. Все спасибо, что были тут, будут вопросы жду в комментариях. Материал сайта Pyatilistnik.org

Вычисление времени работы сервера

Посетителей: 5634 | Просмотров: 7197 (сегодня 0) Шрифт:

Ну и что в этом особенного? Казалось бы, можно воспользоваться теми двумя свойствами класса инструментария WMI Win32_OperatingSystem, которые с легкостью решают задачу: LastBootUpTime и LocalDateTime. Все, что нужно сделать — вычесть LastBootUptime из LocalDateTime, тогда всё в мире станет хорошо, а перед ужином можно будет сыграть небольшую партию в гольф.

С этими мыслями вы запускаете Windows PowerShell, чтобы выполнить запрос к классу Win32_OperatingSystem WMI и выбрать два его свойства, как показано здесь:

Но после запуска этой команды вместо бодрого ответа со временем работы сервера вы получите унылое сообщение об ошибке, которое показано на рис. 1.

Рис. 1 Ошибка, возвращаемая при попытке вычитания значений времени в формате UTC инструментария WMI

Сообщение об ошибке несколько обескураживает: «Bad numeric constant». Что? Понятно, что такое число; понятно, что такое константа; но какое отношение это имеет ко времени?

Если вы сталкиваетесь со странным сообщением об ошибке, то прежде всего нужно проверить данные, которые пытается анализировать сценарий. Более того, работая с Windows PowerShell, обычно имеет смысл проверить, какие типы данных используются.

Чтобы выяснить, какие типы данных используются в сценарии, их можно просто вывести на экран. Вот что получается:

Число выглядит довольно странно. Как такое значение может быть датой? Воспользуемся методом GetType, чтобы это выяснить. Что хорошо в методе GetType — он почти всегда доступен. Нужно просто вызвать его. А вот и причина ошибки: значение свойства LocalDateTime имеет строковый тип вместо типа System.DateTime:

Если вам требуется вычесть из одного времени другое, убедитесь сначала, что вы имеете дело со значениями времени, а не строками. Используйте метод ConvertToDateTime, который Windows PowerShell добавляет ко всем классам инструментария WMI:

Когда из одной величины типа времени вычитается другая величина такого же типа, получается экземпляр класса System.TimeSpan, что позволяет выбрать способ вывода информации о времени работы сервера на экран, не прибегая к арифметическим вычислениям. Достаточно выбрать, какое свойство выводить на экран (надеемся, что время работы ваших серверов выражается в TotalDays, а не в TotalMilliseconds). Ниже показан вывод объекта System.TimeSpan по умолчанию:

Проблема этого метода расчета в том, что он позволяет узнать только время работы сервера после последней перезагрузки. Этим способом нельзя вычислить время простоя. В этом и состоит сложность задачи: чтобы вычислить время работы, сначала нужно определить время простоя.

Как же определить, сколько времени не работал сервер? Для этого нужно знать, когда сервер включался и выключался. Эта информация находится в журнале системных событий. Служба «журнал событий» — один из самых первых процессов, которые запускаются при загрузке сервера или рабочей станции, и один из самых последних, которые останавливаются при выключении сервера. Каждое из событий включение/выключения создает запись с кодом события 6005 при запуске службы журнала событий и 6006 при остановке службы журнала событий. На рис. 2 показан пример запуска службы журнала событий.

Читайте также:  Ножницы для windows пропали

Рис. 2 Служба журнала событий запускается вскоре после загрузки компьютера

Собрав события 6005 и 6006 в журнале событий, упорядочив их и вычтя времена запусков из времен выключений, можно определить время между перезапусками, когда сервер находился в простое. Если получившуюся величину отнять от количества минут в данном периоде времени, то можно сосчитать процент рабочего времени сервера. Этот подход и применен в сценарии CalculateSystemUpTimeFromEventLog.ps1, текст которого показан на рис. 3.

Рис. 3 CalculateSystemUpTimeFromEventLog 3

Сценарий начинается с оператора Param, который определяет пару параметров командной строки, величины которых передаются в сценарий. Первый, $NumberOfDays, позволяет указать количество дней для отчета по времени работы сервера. (Значение по умолчанию для этого параметра установлено и равно 30 дням, поэтому сценарий можно вызывать без определения этого параметра. Если нужно, этот параметр можно заменить).

Второй параметр, [switch]$debug, это переключатель, который, будучи указан в командной строке, включает отладочную печать сценария. Эта информация позволяет удостовериться в правильности результатов, выдаваемых сценарием. Возможны ситуации, когда сообщение о событии остановки службы 6006 отсутствует в журнале. Такое может произойти в случае внезапного отказа сервера, когда запись в журнал не попадает, в результате в сценарии из одного времени работы вычитается другое время работы, и результаты расчета искажаются.

Переменная $debug, полученная из командной строки, находится на «накопителе» Variable: . Переменная $debugPreference в таком случае устанавливается в значение «continue», при этом сценарий продолжает работать, а все значения, переданные оператору Write-Debug, выводятся на экран. Обратите внимание, что значение по умолчанию переменной $debugPreference равно «silentlycontinue». В этом случае сценарий выполняется, но никакие значения, переданные оператору Write-Debug, не выводятся на экран.

В выходных данных сценария перечислены все события журнала с кодами 6005 и 6006 (что отражено на рис. 4) и результат вычисления времени работы. С помощью этой информации можно проверить точность результатов.

Рис. 4 В отладочном режиме выводится величина каждого отрезка времени, который прибавляется к искомой величине времени работы

Затем создается объект System.TimeSpan. Создать объект типа timespan, который будет использоваться при вычислении разности дат, можно при помощи командлета New-Object:

Но в Windows PowerShell для создания таких объектов есть специальный командлет New-TimeSpan, поэтому имеет смысл использовать именно его. Использование специализированного командлета облегчает чтение сценария, а созданный с его помощью объект ничем не отличается от объекта, созданного командлетом New-Object.

Теперь нужно инициализировать несколько переменных, начиная с переменной $currentTime, в которой будут храниться текущие дата и время. Текущую дату можно получить командлетом Get-Date:

Затем присвоим начальные значения двум переменным, в которых будут храниться идентификаторы событий запуска и останова. Хотя этого можно и не делать, однако намного проще читать и искать ошибки в таком коде, в котором эти идентификаторы представлены символьными переменными.

Затем создается переменная $minutesInPeriod, содержащая количество минут в периоде расчета времени работы:

И последней создается переменная $startingDate, которой присваивается объект System.DateTime, представляющий собой время начала отчетного периода. Эта дата рассчитывается как дата полночи начала периода:

После создания всех переменных необходимо извлечь события из журнала событий и сохранить результаты запроса в переменную $events. Для запроса к журналу событий используется командлет Get-EventLog с указанием названия журнала «system». В Windows PowerShell версии 2.0 можно было бы использовать параметр –source, чтобы сократить объем данных, фильтруемых через командлет Where-Object. Но в Windows PowerShell версии 1.0 такой возможности нет, поэтому приходится фильтровать все события, возвращенные запросом. События передаются по конвейеру командлету Where-Object, который и выбирает нужные записи журнала событий. Если вы посмотрите на фильтр Where-Object, то поймете, почему сценаристы рекомендуют для хранения параметров создавать переменные.

Команда читается гораздо лучше, чем при использовании строковых литералов. Идентификаторы событий, которые надо выбрать, равны или $startUpID, или $shutDownID. А значение свойства timeGenerated каждого события из журнала должно быть больше или равно значению $startingDate:

Имейте в виду, что все эти команды выполняются только локально. В Windows PowerShell версии 2.0 для удаленного исполнения команд можно будет использовать параметр –computerName.

Затем нужно создать упорядоченный список объектов. Почему, спросите вы? Потому что при последовательном переборе коллекции событий не гарантируется, что они будут встречаться в том же порядке, в котором происходили. Даже если полученные из журнала объекты передать по конвейеру командлету Sort-Object и сохранить результаты в переменной, выполняя итерацию по объектам и сохраняя результат в таблице хэш-кодов, нельзя быть уверенным, что упорядоченность результата сохранится в списке.

Чтобы обойти эти сложные в отладке проблемы, создадим экземпляр объекта System.Collections.SortedList, используя его конструктор по умолчанию. Конструктор по умолчанию определяет хронологический порядок для дат. Сохраним пустой упорядоченный список объектов в переменной $sortedList:

Созданный список объектов надо заполнить. Для этого с помощью оператора ForEach нужно перебрать все элементы коллекции событий журнала, сохраненной в переменной $entries. По мере перебора коллекции переменная $event указывает на текущий элемент. Методом add к объекту System.Collections.SortedList можно добавить новый элемент, который включает в себя два свойства: ключ и значение. (так же, как и к объекту Dictionary, за исключением того, что в списке к объектам можно обращаться по индексу, как в массиве). В качестве ключа будет использовано свойство события timegenerated, а в качестве величины — свойство eventID:

Читайте также:  Как соединить разделы жесткого диска при установке windows

Теперь рассчитаем время работы сервера. Чтобы это сделать, выберем последнее событие журнала в упорядоченном списке. У этого события всегда будет идентификатор 6005, потому что если последним является событие с идентификатором 6006, то сервер ещё не работает. Индекс самого последнего события равен count –1, потому что он считается от 0.

Чтобы получить значение времени, нужно найти соответствующий ключ в упорядоченном списке. Чтобы получить значение индекса, нужно вычесть единицу из значения свойства count. Затем вычтем из текущего времени, сохраненного в переменной $currenttime, то время, когда было создано событие с идентификатором 6005. В отладочном режиме результаты этих вычислений можно распечатать. Код показан здесь:

Теперь можно перебрать упорядоченный список объектов и рассчитать время работы сервера. Использование списка System.Collections.Sorted позволяет обращаться к элементам списка по индексу, для чего и служит оператор for. Индексу присваивается значение count –2, так как count –1 уже использовался для вычисления текущего времени работы.

Для расчета времени работы список будет перебираться в обратном порядке, поэтому условием окончания цикла и вторым элементом оператора for будет «больше или равно нулю». В третьей позиции оператора используется оператор —, который уменьшает величину переменной цикла $item на единицу. Если запустить сценарий с параметром –debug, то командлетом Write-Debug будет выведено значение индекса. При выводе величины времени отступ табуляции можно определить символом `t. Вот соответствующая часть кода

Если значение кода события равно 6005, то есть идентификатору события запуска, то значение времени работы рассчитывается вычитанием из времени, когда произошло это событие, времени предыдущего окончания работы. Это значение сохраняется в переменной $uptime. В отладочном режиме командлетом Write-Debug эти значения можно вывести на экран:

Наконец, можно создавать отчет. Название компьютера получается из переменной среды операционной системы «computer». Текущее время сохранено в переменной $startingdate. Время работы для данного периода выводится в минутах. Чтобы вывести число с двумя цифрами, используется описатель формата <0:n2>. Затем путем деления общего времени работы в минутах на продолжительность отчетного периода в минутах вычисляется процент простоя. Для вывода этого же значения с двумя десятичными знаками можно использовать этот же описатель формата. Можно вычислить долю времени работы и вывести обе величины:

А теперь, сценаристы, вернемся к исходному вопросу: Когда работа — это простой? Теперь понятно, что, не зная времени простоя, нельзя ничего утверждать об общем времени работы. Если вам интересна эта тема, почитайте другие статьи в рубрике «Эй, сценаристы!» на TechNet или в Центре сценариев.

Проблемы с версиями

Тестируя сценарий CalculateSystemUptimeFromEventLog.ps1 на своем переносном компьютере, пишущий редактор Майкл Мерголо (Michael Murgolo) столкнулся с самой противной ошибкой. Я дал попробовать сценарий моему другу Джиту, и у него возникла та же ошибка. Какая же это ошибка? Вот она:

Эта ошибка, «Cannot index into a null array» («Нельзя проиндексировать пустой массив»), указывает на то, что массив создался неправильно. Я проанализировал код, который создает массив:

С кодом все было в порядке. Из-за чего тогда возникает ошибка?

Затем я внимательно изучил объект SortedList. Чтобы это сделать, я написал простой сценарий, который создает экземпляр класса System.Collections.SortedList и вносит в него какие-то данные. Чтобы распечатать ключи, я воспользовался свойством keys. Вот код:

На моем компьютере это нормально работает. На компьютере Джита происходил сбой. Скверная история. Но по крайней мере это направило меня в нужную сторону. Как оказалось, проблема в том, что в Windows PowerShell версии 1.0 в классе System.Collections.SortedList есть ошибка. А я запускал последнюю сборку Windows PowerShell версии 2.0, в которой эта ошибка уже исправлена, потому код и работал нормально.

Что же теперь делать с нашим сценарием? Выяснилось, что у класса SortedList есть метод GetKey, который нормально работает в обеих версиях Windows PowerShell. Поэтому для версии 1.0 сценарий нужно изменить так, чтобы вместо обхода всех ключей коллекции использовать метод GetKey. Сценарий для версии 2.0 помечен как требующий Windows PowerShell версии 2.0. Если запустить его на машине с версией Windows PowerShell 1.0, он просто завершится без ошибки.

Майкл указал еще и на то, что не является явной ошибкой, но что нужно принимать во внимание при проектировании. Он заметил, что сценарий неправильно определяет время работы в случае перевода компьютера в режим гибернации или в режим сна. Это так, потому что сценарий пропускает эти события.

Оцените статью