Войти

Показать полную графическую версию : [решено] Как узнать время работы программы


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

Blast
02-11-2015, 17:18
PowerShell: New-TimeSpan -Start (get-process имя_процесса).StartTimeОт дней до миллисекунд.

AstalaWinda
02-11-2015, 17:37
Не имел серьезных дел с повершеллом. Не подскажете, почему не работает это:
New-TimeSpan -Start (get-process dwm).StartTime | find "TotalMinutes"
Пишет "FIND: Неправильный формат параметра".

Foreigner
02-11-2015, 18:06
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
Поэтому и не люблю объектные языки :\ Короче, я пришел к такому выводу:
(New-TimeSpan -Start (get-process firefox).StartTime).totalminutes
Показывает время работы процесса в минутах, что мне и надо.

Iska
02-11-2015, 19:14
Поэтому и не люблю объектные языки »
Напрасно. Только представьте радость вычислений на пакетных файлах.

greg zakharov
03-11-2015, 09:29
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
greg zakharov, По условию нужны только минуты (totalminutes), можно сразу привести к натуральному числу, обозначить тип [int]:

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

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

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




© OSzone.net 2001-2012