<# .SYNOPSIS Enable Wake On LAN settings on NIC in Windows .DESCRIPTION IMPORTANT NOTE: I borrowed some from the WMI portions from here: http://justanothertechnicalblog.blogspot.com/2012/06/setting-power-management-options-on.html This script will set the appropriate Windows-side Wake-On LAN settings on the NIC that is currently CONNECTED and has a match for the name "Ethernet" OR "Local Area Connection" This script will check/set the following: 1. "Allow the device to wake the computer" to CHECKED 2. "Only allow a magic packet to wake the computer" to CHECKED 3. "Energy Efficient Ethernet" to OFF 4. Fast Startup to DISABLED (Windows 8-10 only) =============================================================== If your NIC is named something else, just change the "-match" references on the "Get-NetAdapter" command below =============================================================== NOTE: You will still need to make certain Wake On LAN is enabled in the BIOS. written by Mike Resnick 05-15-2018 #> $nic = Get-NetAdapter | ? {($_.MediaConnectionState -eq "Connected") -and (($_.name -match "Ethernet") -or ($_.name -match "local area connection"))} $nicPowerWake = Get-WmiObject MSPower_DeviceWakeEnable -Namespace root\wmi | where {$_.instancename -match [regex]::escape($nic.PNPDeviceID) } If ($nicPowerWake.Enable -eq $true) { # All good here write-output "MSPower_DeviceWakeEnable is TRUE" } Else { write-output "MSPower_DeviceWakeEnable is FALSE. Setting to TRUE..." $nicPowerWake.Enable = $True $nicPowerWake.psbase.Put() } $nicMagicPacket = Get-WmiObject MSNdis_DeviceWakeOnMagicPacketOnly -Namespace root\wmi | where {$_.instancename -match [regex]::escape($nic.PNPDeviceID) } If ($nicMagicPacket.EnableWakeOnMagicPacketOnly -eq $true) { # All good here write-output "EnableWakeOnMagicPacketOnly is TRUE" } Else { write-output "EnableWakeOnMagicPacketOnly is FALSE. Setting to TRUE..." $nicMagicPacket.EnableWakeOnMagicPacketOnly = $True $nicMagicPacket.psbase.Put() } # Since different NICs will have different registry keys, # this recursively scans through the reigstry to find the # the EEELinkAdvertisement property $FindEEELinkAd = Get-ChildItem "hklm:\SYSTEM\ControlSet001\Control\Class" -Recurse -ErrorAction SilentlyContinue | % {Get-ItemProperty $_.pspath} -ErrorAction SilentlyContinue | ? {$_.EEELinkAdvertisement} -ErrorAction SilentlyContinue If ($FindEEELinkAd.EEELinkAdvertisement -eq 1) { Set-ItemProperty -Path $FindEEELinkAd.PSPath -Name EEELinkAdvertisement -Value 0 # Check again $FindEEELinkAd = Get-ChildItem "hklm:\SYSTEM\ControlSet001\Control\Class" -Recurse -ErrorAction SilentlyContinue | % {Get-ItemProperty $_.pspath} | ? {$_.EEELinkAdvertisement} If ($FindEEELinkAd.EEELinkAdvertisement -eq 1) { write-output "$($env:computername) - ERROR - EEELinkAdvertisement set to $($FindEEELinkAd.EEELinkAdvertisement)" } Else { write-output "$($env:computername) - SUCCESS - EEELinkAdvertisement set to $($FindEEELinkAd.EEELinkAdvertisement)" } } Else { write-output "EEELinkAdvertisement is already turned OFF" } # Disable Fast Startup in Windows 8-10 (Fast Startup breaks Wake On LAN) If ((gwmi win32_operatingsystem).caption -match "Windows 8") { write-output "Windows 8.x detected. Disabling Fast Startup, as this breaks Wake On LAN..." powercfg -h off } ElseIf ((gwmi win32_operatingsystem).caption -match "Windows 10") { write-output "Windows 10 detected. Disabling Fast Startup, as this breaks Wake On LAN..." # This checks if HiberbootEnabled is equal to 1 $FindHiberbootEnabled = Get-ItemProperty "hklm:\SYSTEM\CurrentControlSet\Control\Session?Manager\Power" -ErrorAction SilentlyContinue If ($FindHiberbootEnabled.HiberbootEnabled -eq 1) { write-output "HiberbootEnabled is Enabled. Setting to DISABLED..." Set-ItemProperty -Path $FindHiberbootEnabled.PSPath -Name "HiberbootEnabled" -Value 0 -Type DWORD -Force | Out-Null } Else { write-output "HiberbootEnabled is already DISABLED" } }