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

Ответить
 • Просмотры: 1
Аватара пользователя
andr_mozg

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

Сообщение andr_mozg »

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



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





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

Как красиво и правильно преобразовать и получить UPTime ?

для JS.



Спасибо
Аватара пользователя
andr_mozg

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение andr_mozg »

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
Аватара пользователя
andr_mozg

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение andr_mozg »

Интересная разница:



Код:

Код: Выделить всё

 > (get-ciminstance win32_operatingsystem).lastbootuptime
12 ноября 2015 г. 21:37:34
 > (get-wmiobject win32_operatingsystem).lastbootuptime
20151112213734.494656+180
Аватара пользователя
andr_mozg

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение andr_mozg »

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

я пользую селект WMI и иначе делать не могу.



нужно просто преобразовать то значение что описал и отнять от текущего времени.

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

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение andr_mozg »

Цитата andr_mozg:



мне нужно получить в другом формате дату а тут проблема



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

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение greg zakharov »

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



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

нечего тянуть не надо два раза написал что и зачем Изображение
Аватара пользователя
andr_mozg

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение andr_mozg »

Цитата 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)
));

Покажет то, что нужно.
Аватара пользователя
andr_mozg

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение andr_mozg »

я видимо сегодня не в ударе Изображение

объясняю более точно.



есть переменная LastBootUpTime ="20150529171135.595198+180"

есть вторая time = new date()



uptime = time- LastBootUpTime



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

а надо Изображение))



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

LastBootUpTime и time



селекты и активХобджекты не подходят...

переменная уже есть и вторая то же надо просто преобразовать и вычесть.

вобщем имеем что имеем без доп запросов и обработак!



вроде теперь все объяснил Изображение



спасибо
Аватара пользователя
greg zakharov

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение greg zakharov »

Цитата andr_mozg:



селекты и активХобджекты не подходят...
VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера




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

Re: VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера

Сообщение Iska »

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

Вернуться в «Скриптовые языки администрирования Windows»