Эта статья рассказывает о том, как определить uptime в Windows (uptime — это время с момента загрузки компьютера, чаще используется на серверах для контроля, сколько сервер работает без перезагрузки)..

Значение uptime в Winfows можно посмотреть в интерфейсе пользователя в Диспетчере задач:

Окно Диспетчера задач Windows с отображением значения uptime

Но часто задача состоит в том, чтобы получить это значение в скрипте или bat файле.

Скрипт uptime на JScript / WSH

Базовый вариант скрипта считывает значение uptime из класса Win32_PerfFormattedData_PerfOS_System и выводит его в виде числа:

var pcname=".";
var wmi = GetObject("winmgmts:"+
    "{impersonationLevel=impersonate}!\\\\" + pcname + "\\root\\cimv2");

var p = wmi.ExecQuery("select * from Win32_PerfFormattedData_PerfOS_System");
var e = new Enumerator(p);
WScript.Echo("System UpTime: " + e.item().SystemUpTime);

Вывод скрипта содержит uptime в секундах:

Этот скрипт работает на любом компьютере, начиная с Windows XP, т.к. не требуется установка на компьютер каких-либо компонентов или библиотек, потому что Windows Script Host (WSH) уже предустановлен.

Скрипт uptime с форматированием значения

Получение значения uptime в секундах не очень-то удобно для просмотра, поэтому лучше использовать вариант скрипта с преобразованием значения в секундах в значение в днях, часах и минутах:

function seconds_to_string(_n)
{
    var s = "";

    var d = Math.floor( _n/86400 );
    var h = Math.floor( (_n % 86400)/3600 );
    var m = Math.floor( (_n % 3600)/60 );
    var sec = Math.floor( _n % 60 ); 

    if ( d >= 1 )
        s += d.toFixed(0) + "d";

    if ( s.length || h >= 1 )
        s += h.toFixed(0) + "h";

    if ( s.length || ( m >= 1 ) )
        s += m.toFixed(0) + "m";

    s += sec.toFixed(0) + "s";

    return s;
}

var pcname=".";
var wmi = GetObject("winmgmts:"+
    "{impersonationLevel=impersonate}!\\\\" + pcname + "\\root\\cimv2");

var p = wmi.ExecQuery("select * from Win32_PerfFormattedData_PerfOS_System");
var e = new Enumerator(p);
var uptime = e.item().SystemUpTime;
WScript.Echo("System UpTime: " + uptime + 
    " (" + seconds_to_string(uptime) + ")");

Функция seconds_to_string() выполняет преобразование из секунда в формат XdXhXmXs:

А, например, вместо 3377355 будет выведено:

System UpTime: 39d2h9m15s

В зависимости от требуемого оформления, можно доработать функцию преобразования:

  • вставить пробелы между элементами,
  • заменить сокращения на полные названия (чтобы выводилось, например, 3 days 6 hours 15 minutes 45 seconds)
  • перевести на русский язык
  • секунды можно исключить из вывода, для uptime они не так важны.

Скрипт uptime с выводом в виде окна

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

wscript //nologo uptime.js

Тот же текст будет представлен в форме графического окна:

Запуск скрипта из bat файла

Этот скрипт можно запускать и в bat файле, используя ту же саму. команду

cscript //nologo uptime.js

Для того, чтобы в bat файле можно было обработать значение uptime, нужно в конце скрипта добавить передачу значения uptime как выходного значения (return code):

WScript.Quit(uptime);

Тогда значение uptime в секундах можно будет получить в bat файле в переменной errorlevel и как-то обработать, например, если компьютер работает долго без перезагрузки, то отправить сообщение администратору или сразу перезагрузить компьютер:

cscript //nologo uptime.js
rem Если uptime больше 1 недели, то ...
if errorlevel 604800 ...

Дополнительные возможности

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

Особенности uptime

Как именно считается uptime

Результат, возвращаемый uptime, включает время, когда компьютер находится в спящем режиме или режиме гибернации, то есть это время с момента загрузки компьютера. Для серверов это неважно, так как они работают в режиме 24×7, а для рабочих станций или ноутбуков разница может быть существенная (между uptime и временем в активном состоянии).

Как ещё посмотреть uptime

Встроенная программа systeminfo выводит время загрузки, по которому можно определить время работы. Параметр так и называется «Время загрузки системы»..

Узнать больше

Этот и другие скрипты доступны для скачивания

Все скрипты с использованием WMI

Наши соцсети

uptime в командной строке Windows
Метки:         

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *