1 (изменено: abasov, 2010-11-07 20:18:59)

Тема: Как определить общее время запуска Windows?

Пускай моментом старта измерения в отрезке общей загрузки будет код события 6009 (инициализация EventLog) в системном журнале.
С точкой отсчета определились, и так если компьютер в домене, то некой промежуточной точкой можно считать успешное применение политики к компьютеру, код 1704 в журнале приложений.
Что же считать финальной точкой в отрезке? Я имею ввиду не сообщение в журнале безопасности об успешной авторизации, а предоставленный интерфейс пользователю. В нормально-работающей windows окончанием успешного входа является завершение процесса userinit.exe связка такая: процесс winlogon запускает userinit.exe, userinit.exe в свою очередь запускает explorer.exe. После успешного запуска explorer.exe процесс userinit.exe завершается.

2

Re: Как определить общее время запуска Windows?

OFF: Насчёт старта готов поспорить. Сама ОС считает временем загрузки:

wmic os get LastBootUpTime /value

3

Re: Как определить общее время запуска Windows?

К тому же, как быть с нововедениями в свежих ОС — отсроченный запуск служб (благодаря которому горе-маркетологи трубят о, гм, гм, «более быстром запуске ОС», что сим, конечно, не является)? Как тут считать?

4 (изменено: abasov, 2010-11-07 21:25:13)

Re: Как определить общее время запуска Windows?

На счет  LastBootUpTime разница очень мала. Зачем время старта служб считать? Если пользователь получил в управление свой рабочий стол - стоп таймер, выключаем секундомер и пускай службы продолжают запускаться. Важно понять как отследить, без дополнительных костылей, засечек в реестре и т.п. интерактивность интерфейса.
Ерунду сказал, с костылями конечно, важен результат, но с наиболее оптимизированным способом. GPO и таймер на пару скриптов решит вопрос, но вы же понимаете как-то по индуски...

5

Re: Как определить общее время запуска Windows?

abasov пишет:

На счет  LastBootUpTime разница очень мала.

У меня на последний запуск разница составила 14 секунд. И это ещё на не загаженной машине.

Насчёт рабочего стола (если не учитывать описанное выше нововведение со отсроченным стартом служб): я для себя всегда активизирую политику «Всегда ожидать инициализации сети при загрузке и входе в систему»:

Политика "Локальный компьютер"    
   Конфигурация компьютера    
      Административные шаблоны     
         Система    
            Вход в систему

(а в домене сие происходит сразу, при подключении машины к домену; плюс активизирую синхронное выполнение сценариев, но это уже непосредственно к теме не относится). Если эта политика не задана, то рабочий стол появляется сразу после подтверждения авторизации, и параллельно стартуют службы, затем сценарии, списки автозагрузки и т.п. Так что, я не уверен, можно ли считать время запуска процесса explorer.exe временем окончания запуска Windows.

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

6

Re: Как определить общее время запуска Windows?

alexii пишет:

Так что, я не уверен, можно ли считать время запуска процесса explorer.exe временем окончания запуска Windows.

Это было в TechNet, могу поискать.

alexii пишет:

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

Поэтому я и создал топик, для вызревания идеи.

7 (изменено: DD, 2010-12-25 00:23:55)

Re: Как определить общее время запуска Windows?

Вот, из моего лукошка...

SysInfo:
  Gui, 5:+LastFound +AlwaysOnTop +Caption -MinimizeBox

  Gui, 5:Add, Text, x5 y6, Время ;Current Time
  Gui, 5:Add, Text, x5 y50, Дата ;Date
  Gui, 5:Add, Text, x5 y94, День и неделя в году
  ;Gui, 5:Add, Picture, x5 y138 w16 h16 Section, explorer.exe
  Gui, 5:Add, Text, x5 y138, Время запуска ;Start Time
  Gui, 5:Add, Text, x5 y182, Время работы ;Time since last reboot
  Gui, 5:Add, Text, x5 y226, Current user name
  Gui, 5:Add, Text, x5 y270, Computer Name
  Gui, 5:Add, Text, x5 y314, IP-адрес ;IP address
  Gui, 5:Add, Text, x5 y358, System being Run
  Gui, 5:Add, Text, x5 y402, Версия Windows

  Gui, 5:Add, Edit, x5 y21 w160 vText0 ReadOnly,
  Gui, 5:Add, Edit, x5 y65 w160 vText1 ReadOnly,
  Gui, 5:Add, Edit, x5 y109 w160 vText2 ReadOnly,
  Gui, 5:Add, Edit, x5 y153 w160 vText3 ReadOnly,
  Gui, 5:Add, Edit, x5 y197 w160 vText4 ReadOnly,
  Gui, 5:Add, Edit, x5 y241 w160 vText5 ReadOnly,
  Gui, 5:Add, Edit, x5 y285 w160 vText6 ReadOnly,
  Gui, 5:Add, Edit, x5 y329 w160 vText7 ReadOnly,
  Gui, 5:Add, Edit, x5 y373 w160 vText8 ReadOnly,
  Gui, 5:Add, Edit, x5 y417 w160 vText9 ReadOnly,

  Gui, 5:Show, %WorkArea% AutoSize, System Info
  SetTimer, LoopInfo, 1000

LoopInfo:
  t_TimeFormat := "HH:mm:ss"
  t_StartTime :=                          ; Clear variable = A_Now
  t_UpTime := A_TickCount // 1000         ; Elapsed seconds since start
  t_StartTime += -t_UpTime, Seconds       ; Same as EnvAdd with empty time
  FormatTime t_NowTime, , %t_TimeFormat%  ; Empty time = A_Now
  FormatTime t_StartTime, %t_StartTime%, %t_TimeFormat%
  t_UpTime := % t_UpTime // 86400 " дн., " Mod(t_UpTime // 3600, 24) " ч, " Mod(t_UpTime // 60, 60) " мин, " Mod(t_UpTime, 60) " с"
  t_YearDW := YearDW()
  FormatTime YDM,,yyyy, d MMMM
  ;MsgBox 64, Uptime, % "Start time: `t" t_StartTime "`nTime now:`t" t_NowTime "`n`nElapsed time:`t" t_UpTime
  t_GetOSVersion := GetOSVersion()

  GuiControl, 5:, Text0, %t_NowTime%
  GuiControl, 5:, Text1, %YDM%, %A_DDDD%
  GuiControl, 5:, Text2, %t_YearDW%
  GuiControl, 5:, Text3, %t_StartTime%
  GuiControl, 5:, Text4, %t_UpTime%
  GuiControl, 5:, Text5, %A_UserName%
  GuiControl, 5:, Text6, %A_ComputerName%
  GuiControl, 5:, Text7, %A_IPAddress1%
  GuiControl, 5:, Text8, %A_OSType%
  GuiControl, 5:, Text9, %t_GetOSVersion%
Return

5GuiClose:
5GuiEscape:
  Gui 5:Destroy
Return

GetOSVersion() {
   RunWait, cmd /c ver > %A_Temp%\ver,, Hide
   FileRead, ver, %A_Temp%\ver
   FileDelete, %A_Temp%\ver
   DllCall("OemToChar", "Str", ver, "Str", ver)
   StringReplace,ver,ver,`r`n,,All
   Return ver
}

;День и неделя в году
YearDW()
{
   FormatTime day,,yDay
   FormatTime week,,yWeek
   StringTrimLeft week, week, 4
   YearDW = день: %day%`, неделя: %week%
   Return YearDW
}

8

Re: Как определить общее время запуска Windows?

Только что выяснилось, что GetOSVersion() не всегда работает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder