2012-07-31 25 views
6

Na niektórych komputerach karty sieciowe są domyślnie skonfigurowane z wyłączoną opcją "Pozwól temu urządzeniu obudzić komputer". W rezultacie funkcja Wake on LAN nie będzie działać.Jak włączyć programowo "Pozwól temu urządzeniu obudzić komputer"?

Muszę włączyć tę opcję z powrotem, ale nie mogę tego zrobić ręcznie - zbyt wiele komputerów! Muszę więc móc to zrobić za pomocą interfejsu API lub skryptu.

. (Uwaga: to nie jest duplikatem How to Enable Wake On LAN programmatically dlatego, że pytanie jest o ustawieniach BIOS podczas gdy ten jest o ustawieniach systemu operacyjnego)

mam odpowiedź już za pomocą skryptu wsadowego, ale alternatywne rozwiązania byłoby bardzo mile widziane, zwłaszcza jeśli używają API.

Odpowiedz

11

Znalazłem rozwiązanie na The Old New Thing. Polecenie powercfg umożliwia manipulowanie ustawieniami zasilania, w szczególności można użyć opcji -deviceenablewake i -devicedisablewake do włączania i wyłączania opcji "Zezwalaj na to urządzenie, aby wybudzić komputer".

Można sprawdzić, które urządzenia są w stanie zrobić to z tym poleceniem:

powercfg -devicequery wake_from_any 

Możesz zobaczyć, które urządzenia mają możliwość aktualnie włączone przy użyciu:

powercfg -devicequery wake_armed 

Kładzenie to wszystko razem to, jest skryptem wsadowym, który właśnie zacząłem używać do włączenia funkcji Wake on LAN:

powercfg -devicequery wake_from_any | findstr /i "network ethernet" >adapters.txt 
for /F "tokens=*" %%i in (adapters.txt) do powercfg -deviceenablewake "%%i" 
powercfg -devicequery wake_armed | findstr /i "network ethernet" || goto :failed 

W tym przypadku wybrałem opcję włączenia wszystkich ważnych urządzeń, których nazwa zawiera słowo "sieć" lub słowo "ethernet"; w niektórych sytuacjach możesz oczywiście wybrać bardziej selektywny wybór urządzeń, które włączasz.