Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Ответить
Настройки темы
VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


Доброго времени суток.

получаю дату LastBootUpTime вида 20150529171135.595198+180


для того чтобы получить время работы сервера необходимо видимо вычесть от текущей даты, а формат данной даты не тот.
Как красиво и правильно преобразовать и получить UPTime ?
для JS.

Спасибо

Отправлено: 15:37, 17-11-2015

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


andr_mozg, на JS (без WMI):
Код: Выделить весь код
(function() {
  var enc, arr, i, s = '', std,
      loc = {
        419 : ['019', '1251'],
        409 : ['009', '1252']
      };
  
  Array.prototype.to_s = function() {
    var s = '';
    
    for (var i = 0; i < this.length; i++) {
      s += i === 0 ? parseInt(this[i]) + '.'
        : (parseInt(this[i]) < 10 ? '0' + parseInt(this[i]) : parseInt(this[i])) + ':';
    }
    return s.replace(/\:$/, '');
  };
  
  with (new ActiveXObject('WScript.Shell')) {
    enc = Number(RegRead('HKCU\\Control Panel\\International\\Locale'));
    arr = RegRead(
      'HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\' +
      'PerfLib\\' + loc[enc][0] + '\\Counter'
    ).toArray();
    
    for (i = 0; i < arr.length; i++) {
      if (parseInt(arr[i]) === 2 || parseInt(arr[i]) === 674) {
        s += '\\' + arr[i + 1];
      }
    }
    
    std = Exec('cmd /c chcp');
    i = std.StdOut.ReadAll().match(/\d+/);
    std = Exec('cmd /q /k echo off');
    std.StdIn.WriteLine('chcp ' + loc[enc][1]);
    std.StdIn.WriteLine('typeperf "' + s + '" -sc 1');
    std.StdIn.WriteLine('chcp ' + i + '&exit');
    s = parseInt(std.StdOut.ReadAll().match(/\d+\.\d+/g)[2]);
  };
  WScript.echo([s / 86400, s / 3600 % 24, s % 3600 / 60, s % 60].to_s());
}());
Советую еще почитать в консоли typeperf /?

P.S.Можно uptime получить и на чистом cmd:
Код: Выделить весь код
@echo off
  setlocal
    chcp 1251>nul
    for /f "tokens=3 delims=.," %%i in (
      'typeperf "\Система\Время работы системы" -sc 1^
       ^| findstr /rc:"\:"'
    ) do set "t=%%~i"
    set /a "ss=t%%60", "t/=60", "mm=t%%60", "t/=60", "hh=t%%24", "dd=t/24"
    if %hh% lss 10 set "hh=0%hh%"
    if %mm% lss 10 set "mm=0%mm%"
    if %ss% lss 10 set "ss=0%ss%"
    echo:%dd%.%hh%:%mm%:%ss%
  endlocal&chcp 866>nul
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:01, 17-11-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо, но как получить аптайм я знаю, мне нужно именно использовать то что есть.
я пользую селект WMI и иначе делать не могу.

нужно просто преобразовать то значение что описал и отнять от текущего времени.
Как примерно действовать я знаю, мне нужно получить в другом формате дату а тут проблема.

Отправлено: 16:14, 17-11-2015 | #3


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата andr_mozg:
мне нужно получить в другом формате дату а тут проблема
Подробнее: какая дата, какой формат? Суть задачи вроде как сводилась к получению uptime или что-то еще, что из Вас нужно клещами тянуть?

Отправлено: 16:23, 17-11-2015 | #4


Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


Сводится к получению uptime, в часах минутах дело десятое.

получаю текущее время new Date() но отнять от него свое время я не могу формат не совпадает, вот и вся проблема.
нечего тянуть не надо два раза написал что и зачем

Отправлено: 16:34, 17-11-2015 | #5


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата andr_mozg:
получаю текущее время new Date() но отнять от него свое время я не могу формат не совпадает
Тю! Только и всего то?!
Код: Выделить весь код
(function(srv) {
  var e = new Enumerator(
    GetObject('winmgmts:\\\\' + srv + '\\root\\CIMV2').ExecQuery(
      'SELECT * FROM Win32_OperatingSystem', 'WQL', 0x10 | 0x20
    )
  );
  var dt = new ActiveXObject('WbemScripting.SWbemDateTime');
  
  for (; !e.atEnd(); e.moveNext()) {
    dt.Value = e.item().LastBootUpTime;
  }
  
  WScript.echo(new Date() - dt.GetVarDate());
}(
  WScript.Arguments.length !== 1
  ? (function() {
    WScript.echo('An error has been occured.');
    WScript.Quit(1);
  }())
  : WScript.Arguments.Unnamed(0)
));
Покажет то, что нужно.

Последний раз редактировалось greg zakharov, 17-11-2015 в 17:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:51, 17-11-2015 | #6


Пользователь


Сообщения: 86
Благодарности: 2

Профиль | Отправить PM | Цитировать


я видимо сегодня не в ударе
объясняю более точно.

есть переменная LastBootUpTime ="20150529171135.595198+180"
есть вторая time = new date()

uptime = time- LastBootUpTime

но так как LastBootUpTime имеет другой формат вычесть не получится.
а надо ))

вопрос как преобразовать переменную LastBootUpTime так что бы я смог получить разницу дат переменных
LastBootUpTime и time

селекты и активХобджекты не подходят...
переменная уже есть и вторая то же надо просто преобразовать и вычесть.
вобщем имеем что имеем без доп запросов и обработак!

вроде теперь все объяснил

спасибо

Отправлено: 17:11, 17-11-2015 | #7


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата andr_mozg:
я видимо сегодня не в ударе
Постом выше Вам буквально "разжевали" как превести LastBootUpTime к типу Date, чтобы можно было вычесть последний из текущей даты. Ежели Вам не по нраву ActiveXObject и SELECT, то юзайте PowerShell.
Код: Выделить весь код
$w.ConvertToDateTime(($w = gwmi Win32_OperatingSystem).LocalDateTime) - $w.ConvertToDateTime($w.LastBootUpTime)

Последний раз редактировалось greg zakharov, 17-11-2015 в 17:38.


Отправлено: 17:19, 17-11-2015 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата andr_mozg:
селекты и активХобджекты не подходят... »
Простите, а как Вы тогда с Wbem работаете? Он не через Automation берётся, а откуда-то из воздуха? Что «new ActiveXObject», что «GetObject» пользуют один и тот же механизм.

Отправлено: 18:28, 17-11-2015 | #9


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Iska, видать камрад через wmic извлек LastBootUpTime, а хочет его конвертануть через WSH в TimeSpan или что-то в этом роде.

Отправлено: 18:36, 17-11-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - преобразование формата даты в текстовом файле slnt Скриптовые языки администрирования Windows 10 23-05-2015 20:23
V. 2010 - [решено] Получение списка всех smtp-адресов сервера Riiku Microsoft Exchange Server 3 31-07-2012 18:10
Настройка WSUS сервера на получение обновлений для самого себя TrueAlex WSUS 3 13-12-2011 16:40
CMD/BAT - [решено] получение времени сервера в батнике bruder Скриптовые языки администрирования Windows 9 12-08-2011 20:16
[решено] GUICtrlCreateDate-получение даты в числовом виде TERMINAL AutoIt 1 13-04-2011 14:44




 
Переход