Uruchom ponownie lub zamknij?

1

Mam następujący problem: muszę wiedzieć, kiedy komputer się uruchamia, czy komputer został uruchomiony po wyłączeniu (zimny start) lub czy komputer został po prostu ponownie uruchomiony (gorący start). Dzięki skryptowi startowemu ustawionemu w gpedit powinienem znać odpowiedź, na przykład:

If PC restarted then

    msg: The PC has been warm reboot

elseif PC shutdown then

    msg: The PC has been cold reboot

end if

(uwaga: w rzeczywistości wiadomość e-mail jest wysyłana, ale to nie jest ważne).

Teraz pytam społeczność, jak mogę odzyskać te informacje z systemu? Moim punktem wyjścia jest narzędzie „Eventviewer”, ale nie jestem bardzo zadowolony z tego rozwiązania. Myślę, że zdarzenia ACPI są przechowywane w sklepie BCD i zastanawiam się, czy można je odzyskać w jakikolwiek sposób. Może przez WMIC? Czy też istnieje plik dziennika systemowego, z którego można bezpośrednio pobrać informacje?

Czy ktoś ma jakieś pomysły, jak postępować?

Uwaga: na razie interesuje mnie tylko środowisko Windows, ale myślę, że jest ono również interesujące dla systemów Unix i Unix (takich jak Linux).

Luciano
źródło
W systemie Windows nie ma różnicy między ponownym uruchomieniem komputera a zamknięciem systemu po ponownym zalogowaniu na konto. Windows wie, że nastąpiło ponowne uruchomienie i wie, że nastąpiło zamknięcie, ale nie ma innego zdarzenia, jeśli chodzi o zdarzenie logowania
Ramhound
Można porównać czas od ostatniego zamknięcia
Xen2050
Cześć Ramhound To pytanie dla bardziej doświadczonych, a także prawdopodobnie pozostanie bez odpowiedzi. W każdym razie to, co mówisz, jest niepoprawne: jeśli spróbujesz ponownie uruchomić komputer (i sprawdzić godzinę), a następne uruchomi się ponownie, otwórz „Eventviewer” i filtry „Windows Logs” - & gt; „System”, poziom „Informacja”, źródło „USER32”, ID 1074 informuje o tym, jak zrestartowano komputer (sprawdź czas!).
Luciano
Powiem więcej: jeśli komputer wyłączy się z powodu awarii zasilania, przy następnym ponownym uruchomieniu pojawi się menu EMS, w którym można wybrać, czy uruchomić urządzenie w „trybie awaryjnym”, „normalnie” itp., A to oznacza że ta informacja jest przechowywana gdzieś w BCD, to oczywiste. Wreszcie, dla kompletności, dodam, że w systemach serwerowych (i tylko w systemach serwerowych) oprócz wyboru trybu zamykania można dodać opis zdarzenia, które jest następnie przechowywane gdzieś w systemie (przypuszczam, że w pliku dziennika) ), ale gdzie dokładnie?
Luciano
Prawdopodobnie te informacje można znaleźć również w rejestrze, w gałęzi „System”, ale także tutaj, gdzie?
Luciano

Odpowiedzi:

2

Możesz użyć PowerShell, aby uzyskać szczegóły

Get-WinEvent -FilterHashTable @{LogName="System"; ProviderName="User32"} -MaxEvents 1

Powyższe polecenie spowoduje uzyskanie najnowszych informacji o zdarzeniach związanych z zamykaniem systemu / ponownym uruchomieniem systemu. Domyślnie dzienniki są pobierane jako pierwsze, więc ograniczenie do 1 daje najnowsze zdarzenie. Btw, dzięki komentarzowi @ Luciano, który bardzo pomógł. Poniżej znajduje się kompletny skrypt dla Twojej sprawy.

$lastEvent = Get-WinEvent -FilterHashTable @{LogName="System"; ProviderName="User32"} -MaxEvents 1
$restarted = $lastEvent.Message -like "*restart*"
if($restarted)
{
    Write-Host "The PC has been warm reboot" -ForegroundColor Red
}
else
{
    Write-Host "The PC has been cold reboot" -ForegroundColor Green
}

Możesz się odnieść tutaj na temat wykonywania skryptu powershell na starcie.

Ram Kumaran
źródło
Witaj Ramie, wyjście nie pojawia się w oknie monitu w moim systemie, ale w PowerShell ISE działa świetnie. Dziękuję Ci bardzo. Naprawdę dobry.
Luciano
Myślę, że chcesz nacisnąć dowolny klawisz, aby kontynuować .. zachowanie, możesz sprawdzić ten link: stackoverflow.com/questions/20886243/press-any-key-to-continue Poza tym nie wiem zbyt wiele o nazwach dostawców dla tych wydarzeń, przyjechałem z User32 na podstawie jednego z twoich komentarzy, wiele się nauczyłem od ciebie, dziękuję :)
Ram Kumaran