|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера |
|
|
VBS/WSH/JS - [решено] преобразование даты и получение UPTime сервера
|
Пользователь Сообщения: 86 |
Доброго времени суток.
получаю дату LastBootUpTime вида 20150529171135.595198+180 для того чтобы получить время работы сервера необходимо видимо вычесть от текущей даты, а формат данной даты не тот. Как красиво и правильно преобразовать и получить UPTime ? для JS. Спасибо |
|
Отправлено: 15:37, 17-11-2015 |
Забанен Сообщения: 793
|
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()); }()); 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
|
Профиль | Отправить PM | Цитировать Спасибо, но как получить аптайм я знаю, мне нужно именно использовать то что есть.
я пользую селект WMI и иначе делать не могу. нужно просто преобразовать то значение что описал и отнять от текущего времени. Как примерно действовать я знаю, мне нужно получить в другом формате дату а тут проблема. |
Отправлено: 16:14, 17-11-2015 | #3 |
Забанен Сообщения: 793
|
Цитата andr_mozg:
|
|
Отправлено: 16:23, 17-11-2015 | #4 |
Пользователь Сообщения: 86
|
Профиль | Отправить PM | Цитировать Сводится к получению uptime, в часах минутах дело десятое.
получаю текущее время new Date() но отнять от него свое время я не могу формат не совпадает, вот и вся проблема. нечего тянуть не надо два раза написал что и зачем ![]() |
|
Отправлено: 16:34, 17-11-2015 | #5 |
Забанен Сообщения: 793
|
Цитата andr_mozg:
(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
|
Профиль | Отправить PM | Цитировать я видимо сегодня не в ударе
![]() объясняю более точно. есть переменная LastBootUpTime ="20150529171135.595198+180" есть вторая time = new date() uptime = time- LastBootUpTime но так как LastBootUpTime имеет другой формат вычесть не получится. а надо ![]() вопрос как преобразовать переменную LastBootUpTime так что бы я смог получить разницу дат переменных LastBootUpTime и time селекты и активХобджекты не подходят... переменная уже есть и вторая то же надо просто преобразовать и вычесть. вобщем имеем что имеем без доп запросов и обработак! вроде теперь все объяснил ![]() спасибо |
Отправлено: 17:11, 17-11-2015 | #7 |
Забанен Сообщения: 793
|
Цитата andr_mozg:
|
|
Последний раз редактировалось greg zakharov, 17-11-2015 в 17:38. Отправлено: 17:19, 17-11-2015 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата andr_mozg:
|
|
Отправлено: 18:28, 17-11-2015 | #9 |
Забанен Сообщения: 793
|
Iska, видать камрад через wmic извлек LastBootUpTime, а хочет его конвертануть через WSH в TimeSpan или что-то в этом роде.
|
Отправлено: 18:36, 17-11-2015 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|