2015-09-14 20:06:52 +0000 2015-09-14 20:06:52 +0000
245
245

Ostateczne zatrzymanie budzenia pulpitu Windows 10 przez timery budzenia

Jak zatrzymać komputer stacjonarny z systemem Windows 10 budzący się ze stanu uśpienia/hibernacji bez interwencji użytkownika?

Dla wielu użytkowników nie będzie to problemem, ale jeśli śpisz w tym samym pokoju co twój komputer, to budzenie się maszyny o 3:30 rano w celu pobrania aktualizacji jest irytujące.

Odpowiedzi (3)

377
377
377
2015-09-14 20:39:07 +0000

Podsumowanie

Jest wiele rzeczy, które mogą mieć na to wpływ. Jestem świadomy, że istnieją posty na całej tej stronie szczegółowo opisujące różne sposoby podejścia do tego problemu; ten post ma na celu skonsolidowanie ich i dodanie mojego własnego wglądu w problem jako kogoś, kto sam został dotknięty tym problemem.

Poprawka opisana w Kroku 2 może być również użyta do powstrzymania Windows 10 przed ponownym uruchomieniem maszyny po zainstalowaniu Aktualizacji Windows.

Ta poprawka działa również dla Fall Update (1709). Trzeba będzie wyłączyć zadanie “Reboot” ponownie i ponownie skonfigurować uprawnienia bezpieczeństwa, choć, ponieważ proces aktualizacji zastępuje go.

Krok 1: Wyłącz timery budzenia dla wszystkich profili zasilania

Leniwi tech-blogerzy chcieliby, abyś uwierzył, że to koniec poszukiwań. Chociaż prawdą jest, że ten krok wyeliminuje kilka błędnych wyłączeń, istnieje wiele ustawień i konfiguracji, szczególnie w systemie Windows 10, które nie przestrzegają tego ustawienia bez względu na interwencję użytkownika. Przejdź do Panelu sterowania → Opcje zasilania. Wybierz profil zasilania, który znajduje się na pierwszym miejscu na liście i wyłącz opcję “Wake timers”. Przejdź przez wszystkie profile.

Podziękowania dla użytkownika StackExchange olee22 za zdjęcie.

W systemie Windows 10 zdecydowanie zaleca się ustalenie tego ustawienia dla wszystkich profili zasilania, a nie tylko dla tego, który wybrałeś do użycia. Różne wydziały Windows będą używać różnych profili; to zwiększa szanse na to, że nie zostaniesz obudzony.

Krok 2: Wyłącz niesforne reboot zaplanowane zadanie

Uwaga: Stworzyłem skrypt PowerShell, który może być użyty do zatrzymania systemu Windows 10 przed ponownym uruchomieniem. Możesz go znaleźć tutaj: github.com/seagull/disable-automaticrestarts .

Folder zadań zaplanowanych w UpdateOrchestrator systemu Windows 10 zawiera zadanie o nazwie “reboot”. Zadanie to budzi komputer, aby zainstalować aktualizacje niezależnie od tego, czy są one dostępne, czy nie. Samo usunięcie jego uprawnień do budzenia komputera nie jest wystarczające; system Windows po prostu edytuje je, aby ponownie nadać sobie uprawnienia po opuszczeniu Harmonogramu zadań.

W Panelu sterowania wejdź w Narzędzia administracyjne, a następnie zobacz Harmonogram zadań.

To zadanie, które chcesz wykonać, znajduje się w Bibliotece Harmonogramu zadań → Microsoft → Windows → UpdateOrchestrator. Najważniejsze rzeczy, które chcesz zrobić to:

Stąd będziesz musiał zmienić uprawnienia dla zadania tak, aby Windows nie mógł go molestować. Zadanie to znajduje się w C:\Windows\System32\Tasks\Microsoft\Windows\UpdateOrchestrator. Nazywa się Reboot bez rozszerzenia pliku. Kliknij na nim prawym przyciskiem myszy, wpisz właściwości i uczyń siebie właścicielem . Na koniec skonfiguruj je tak, aby wyświetlało się następująco:

Tutaj plik jest pokazany z uprawnieniami tylko do odczytu dla SYSTEM. Upewnij się, że żadne konto nie ma dostępu do zapisu, nawet twoje własne (zawsze możesz zmienić uprawnienia później, jeśli będziesz tego potrzebował). Upewnij się również, że wyłączyłeś wszelkie dziedziczone uprawnienia dla pliku z przycisku Zaawansowane na tym ekranie, aby nadpisać wszelkie istniejące uprawnienia na folderze głównym. To w 100% powstrzyma system Windows przed mieszaniem się z Twoimi zmianami po ich wprowadzeniu.

Po ustawieniu tej opcji, nie będziesz musiał się już martwić o to zaplanowane zadanie.

Jeśli nie masz Uprawnień do zmiany zadań UpdateOrchestrator

Zmiana zadań UpdateOrchestrator wymaga teraz uprawnień SYSTEM, ani administrator, ani TrustedInstaller. Jednym ze sposobów obejścia tego problemu jest :

  1. Zainstalowanie własnego PsTools Microsoftu.
  2. Otwarcie Command Prompt jako administrator i cd do lokalnego folderu PsTools.
  3. Wykonanie: psexec.exe -i -s %windir%\system32\mmc.exe /s taskschd.msc
  4. Przejście do folderu UpdateOrchestrator i wyłączenie zadania (zadań) Reboot, jak wcześniej wspomniano.

Uwaga dla Windows 1709 (Fall Creators’ Update)

Proces instalacji systemu Windows zmienia uprawnienia do plików, więc upewnij się, że po aktualizacji ponownie przejdziesz przez ten przewodnik.

Słyszałem doniesienia, że powstaje nowe zadanie o nazwie AC Power Install, które wymaga wykonania tych samych czynności, ale nie widziałem tego zadania na własnym urządzeniu po zainstalowaniu aktualizacji 16299.192 (2018-01 Meltdown patch), więc nie mogę tego stwierdzić z całkowitą pewnością. Te same kroki, które zostały wykonane powyżej, powinny działać na każdym zadaniu, które zostało wprowadzone.

Krok 3: Sprawdź timery budzenia w PowerShell

Wyłączyłeś funkcję timera budzenia, ale Windows 10 ma zwyczaj nie respektować tego ustawienia, więc dla pewności uruchomimy polecenie PowerShell, aby wyeliminować wszystkie zadania, które mogą, w miarę możliwości, obudzić twój komputer. Otwórz administracyjny wiersz poleceń PowerShell (Start, wpisz ‘Powershell’, Ctrl+Shift+Enter) i umieść to polecenie w oknie:

Get-ScheduledTask | where {$_.settings.waketorun}

Przejdź przez wszystkie wymienione w nim zadania i usuń ich uprawnienia do budzenia komputera. Nie powinieneś się martwić o uprawnienia, jak to miało miejsce w przypadku Reboot; to był skrajny przypadek.

Krok 4: Sprawdź, jaki sprzęt może obudzić twój komputer

Dużo USB Sprzęt komputerowy, gdy jest włączony, ma możliwość obudzenia komputera (klawiatury często to robią, na przykład po naciśnięciu klawiszy); wake-on-LAN jest zazwyczaj również problemem w tym scenariuszu. Dla niewtajemniczonych, powszechną i użyteczną cechą nowoczesnego sprzętu jest “Wake on LAN”. Jeśli Twoje urządzenie jest podłączone do sieci lokalnej za pomocą przewodowego kabla Ethernet (nie działa to w przypadku Wi-Fi), możesz wysyłać komunikaty, które po odebraniu obudzą Twój komputer. Jest to funkcja, z której często korzystam, ale musi zostać dostosowana, ponieważ jej domyślne zachowanie jest zdecydowanie zbyt nadgorliwe.

Wprowadź następujące polecenie w administracyjnym wierszu poleceń:

powercfg -devicequery wake_armed

Stąd znajdź urządzenia w swoim Menedżerze urządzeń (Panel sterowania) i w zakładce Zarządzanie energią usuń ich zdolność do wybudzania komputera. Jeśli posiadasz karty sieciowe, dla których chcesz zachować funkcję Wake-on-LAN, włącz opcję Only wake this device if it receives a magic packet as opposed to waking up for all traffic sent its way.

Krok 5: Sprawdź Group Policy tylko po to, aby być całkowicie pewnym

Kliknij prawym przyciskiem myszy na menu Start i wybierz Uruchom. Wpisz GPEdit.MSC. Znajdź następujące ustawienie pod Computer Configuration → Administrative Templates → Windows Components → Windows Updates → Enabling Windows Update Power Management do automatycznego budzenia systemu w celu zainstalowania zaplanowanych aktualizacji. Kliknij je dwukrotnie i ustaw na Wyłączone.

Krok 6: Wyłącz budzenie komputera do automatycznej konserwacji

Ktoś w Microsofcie ma poczucie humoru w tej kwestii. Jeśli komputer budzi cię w nocy, jedyną rzeczą, którą chciałbyś usłyszeć bardziej niż cokolwiek innego, jest chrzęst i zgrzytanie dysku twardego podczas nocnej defragmentacji. Wyłącz tę funkcję, znajdując sekcję Zabezpieczenia i konserwacja w Panelu sterowania. Następnie rozwiń Konserwacja i poszukaj odnośnika do Zmień ustawienia konserwacji.

Ustaw czas na coś bardziej towarzyskiego (7PM jest w porządku) i wyłącz zdolność maszyny do budzenia się w celu wykonania zadania.

26
26
26
2016-04-20 22:10:26 +0000

Używam teraz tego skryptu do wyłącznego zatrzymania budzenia timerów z budzenia pulpitu Windows 10:

# disable wake for enabled scheduled tasks that are allowed to wake
Get-ScheduledTask |
?{ $_.Settings.WakeToRun -eq $true -and $_.State -ne 'Disabled' } |
%{
    write-host $_
    $_.Settings.WakeToRun = $false;
    Set-ScheduledTask $_
}

# disable wake for devices that are allowed to wake (list of wake capable devices: powercfg -devicequery wake_from_any)
powercfg -devicequery wake_armed |
%{
    write-host $_
    if ($_ -notmatch '^(NONE)?$')
    { powercfg -devicedisablewake $_ }
}

# disable wake timers for all power schemes
powercfg -list | Select-String 'GUID' |
%{
    write-host $_
    $guid = $_ -replace '^.*:\s+(\S+?)\s+.*$', '$1'
    powercfg -setdcvalueindex $guid SUB_SLEEP RTCWAKE 0
    powercfg -setacvalueindex $guid SUB_SLEEP RTCWAKE 0
}

# disable wake for automatic updates and for automatic maintenance
'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\AUPowerManagement', 
'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Maintenance\WakeUp' |
%{
    write-host $_
    $key = split-path $_
    $name = split-path $_ -leaf
    $type = 'DWORD'
    $value = 0
    if (!(Test-Path $key))
    { New-Item -Path $key -Force | Out-Null }
    if ((Get-ItemProperty $key $name 2>$null).$name -ne $value)
    { Set-ItemProperty $key $name $value -type $type }
}

Jak widać, mniej więcej odnosi się do wszystkich kroków wymienionych w tej odpowiedzi, z wyjątkiem uprawnień pliku zaplanowanego zadania. Jednakże, ponieważ zamierzam cicho uruchamiać ten skrypt przy każdym odblokowaniu/logowaniu, mam nadzieję, że nie będzie to żadnym problemem.

11
11
11
2016-11-18 02:33:02 +0000

Znalazłem inną odpowiedź niewiarygodnie pomocną i po prostu skomentowałbym, gdybym mógł, ale chciałem wnieść kawałek oprogramowania, który szybko napisałem, aby pomóc w krokach 3 i 4 znalezionych tutaj: https://github.com/Omniru/System-Wake-Manager/wiki/Home-&-Download

Mam nadzieję, że jest to przydatne dla niektórych osób.

Możesz zobaczyć to okienko i będziesz musiał kliknąć “More info”, a następnie “Run anyway” (jeśli nie jesteś pewien, nie krępuj się sprawdzić kodu źródłowego, w końcu jest na githubie):