Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как узнать время работы программы (http://forum.oszone.net/showthread.php?t=307443)

AstalaWinda 02-11-2015 17:10 2570781

Как узнать время работы программы
 
Здравствуйте. Нужно узнать, сколько времени работала определенная программа. Расширение exe. Я попробовал было tasklist /v, но там совсем не то время (cputime). Процесс эксплорер показывает время запуска, но во-первых, как его узнать из командной строки, во-вторых, как рассчитать из этого время работы программы.

Blast 02-11-2015 17:18 2570782

PowerShell:
Код:

New-TimeSpan -Start (get-process имя_процесса).StartTime
От дней до миллисекунд.

AstalaWinda 02-11-2015 17:37 2570786

Не имел серьезных дел с повершеллом. Не подскажете, почему не работает это:
Код:

New-TimeSpan -Start (get-process dwm).StartTime | find "TotalMinutes"
Пишет "FIND: Неправильный формат параметра".

Foreigner 02-11-2015 18:06 2570794

AstalaWinda, Потому, что надо смотреть с повышенными привилегиями, т.к. этот процесс запущен от другой уч. записи:
Код:

> (get-process dwm -includeusername).username
Window Manager\DWM-2

 > (get-process dwm).starttime

1 ноября 2015 г. 16:09:18

 > ((get-date) - ((get-process dwm).starttime)).totalminutes
1551,73859317167


AstalaWinda 02-11-2015 18:28 2570801

Поэтому и не люблю объектные языки :\ Короче, я пришел к такому выводу:
Код:

(New-TimeSpan -Start (get-process firefox).StartTime).totalminutes
Показывает время работы процесса в минутах, что мне и надо.

Iska 02-11-2015 19:14 2570809

Цитата:

Цитата AstalaWinda
Поэтому и не люблю объектные языки »

Напрасно. Только представьте радость вычислений на пакетных файлах.

greg zakharov 03-11-2015 09:29 2570957

Foreigner, чего-то Вы мудрите:
Код:

((date)-(ps процесс).StartTime).ToString()
Или:
Код:

((date)-(ps процесс).StartTime).ToString().Split('.')[0]
Хотя можно и в методе ToString указать как должно форматировать время.
PowerShell это, конечно, хорошо, но и на командном языке получить время работы процесса более, чем возможно (причем без WMI):
Код:

@echo off
  setlocal
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "%i%" gtr "1" echo:Index is out of range.&goto:eof
   
    chcp 1251>nul
    for /f "tokens=3 delims=.," %%i in (
      'typeperf "\Процесс(%1)\Прошло времени (сек)" -sc 1^
      ^| findstr /rc:"\:"'
    ) do set "s=%%~i"
    chcp 866>nul
   
    set /a "ss=s%%60", "s/=60", "mm=s%%60", "s/=60", "hh=s%%24", "dd=s/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
exit /b

Пример работы:
Код:

E:\sandbox> pstime.cmd процесс
0.12:38:54

E:\sandbox>

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

Foreigner 03-11-2015 13:02 2571041

greg zakharov, По условию нужны только минуты (totalminutes), можно сразу привести к натуральному числу, обозначить тип [int]:
Код:

[int]((get-date) - ((get-process process).starttime)).totalminutes

greg zakharov 03-11-2015 13:25 2571048

Foreigner, изначально в условиях не было оговорено, что нужны именно минуты, это чуть позже автор темы, видимо, спохватился. Но сути это не умаляет - одно дело решить на CMD, что изначально и требовалось, другое - на PowerShell.

NLOLegion 21-10-2017 13:41 2772173

Подскажите как получить список ВСЕХ процессов со "временем запуска", "Столько-то часов Столько то минут запущен"?
По возможности не на PowerShell.
Как вывести такой список отсортированным по времени запуска?


Время: 06:05.

Время: 06:05.
© OSzone.net 2001-