1

Тема: VBS или JS: wake on lan - как включить удаленный комп?

Хотелось бы написать скрипт включения удаленного компа.
Компы в локальной сети.
Функция Wake on LAN в BIOS есть - во всяком случае заявлена.

Спасибо за идеи.

2

Re: VBS или JS: wake on lan - как включить удаленный комп?

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

3

Re: VBS или JS: wake on lan - как включить удаленный комп?

Например вот прога: http://bolshe.shacknet.nu/woncli.html

Нас невозможно сбить с пути, нам пофигу куда идти.

4

Re: VBS или JS: wake on lan - как включить удаленный комп?

Уважаемые, как думаете - реально ли вообще скриптами определить наличие настройки wake up on lan на удаленных машинах (домен)?

WBR. Roman

5

Re: VBS или JS: wake on lan - как включить удаленный комп?

Какие именно настройки?

6

Re: VBS или JS: wake on lan - как включить удаленный комп?

К примеру, что в BIOSе "Remote Wake Up" переключен из Off в On. Драйвера сетевой карты по идее про это должны "знать", т.е. каким-то макаром может можно удаленную систему как-то опросить по этому поводу?..

WBR. Roman

7

Re: VBS или JS: wake on lan - как включить удаленный комп?

Rom5 пишет:

К примеру, что в BIOSе "Remote Wake Up" переключен из Off в On. Драйвера сетевой карты по идее про это должны "знать", т.е. каким-то макаром может можно удаленную систему как-то опросить по этому поводу?..

Rom5,

поделюсь своим опытом в этом вопросе.

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

1. BIOS должен поддерживать возможность Wake on LAN (WoL). Но определять, а уж тем более самому устанавливать параметры BIOS универсально невозможно. К материнским платам могут прикладываться утилиты работы с данной платой и данным BIOS - но универсального способа нет.
Я считаю, что это не самая большая проблема. Более того - установка BIOS, на мой взгляд, принципиально ручная операция. "Программно" такого наворотить можно - комп умрет.

2. Хуже всего, что WoL должна поддерживать еще и сетевая плата. Я проводил эксперименты на не самой, казалось бы, ацтойной сетевухе - 3COM  EtherLink. Но у неё как раз этого свойства и не оказалось.
В этом вопросе я наткнулся на такие грабли. Если войти в свойства сетевой платы, то на закладке Управление электропитанием можно выставить галочку Разрешить устройству вывод компьютера из ждущего режима. Сделать это можно в том числе и программно - соответствующий скрипт в конце моего поста.
Но! Если на вкладке Дополнительно вашего сетевого девайса нет что-то типа WakeOnLan from PowerOff - Enable - то ваш комп по "магическому пакету" никогда не проснется. Будь этот пакет хоть трижды "магическим".

Понятно, что моно сменить сетевую плату - если она не на матери, кстати. Но это не комильфо.

Скрипт разрешения всем сетевым устройствам локального компа Wake On Lan:

Option Explicit 

Dim colNetworkAdapters 
Dim objNetworkAdapter 

Dim strDevInstanceName 
Dim strNetworkAdapterID

'Query for all of the Win32_NetworkAdapters that are wired Ethernet (AdapterTypeId=0 corresponds to Ethernet 802.3) 
Set colNetworkAdapters = GetObject("WinMgmts:{impersonationLevel=impersonate}//./root/Cimv2")_ 
.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE AdapterTypeId=0") 

WScript.Echo "Enabling WoL for the following adapters:" 

For Each objNetworkAdapter In colNetworkAdapters 
            WScript.Echo "  " & objNetworkAdapter.Name & " [" & objNetworkAdapter.MACAddress & "]" 

            strNetworkAdapterID = UCase(objNetworkAdapter.PNPDeviceID) 

            'Query for all of the MSPower_DeviceWakeEnable classes 
            Dim colPowerWakeEnables 
            Dim objPowerWakeEnable 

            Set colPowerWakeEnables = GetObject("WinMgmts:{impersonationLevel=impersonate}//./root/wmi")_ 
            .ExecQuery("SELECT * FROM MSPower_DeviceWakeEnable") 
            'Compare the PNP Device ID from the network adapter against the MSPower_DeviceEnabled instances 
            For Each objPowerWakeEnable In colPowerWakeEnables 
                        'We have to compare the leftmost part as MSPower_DeviceEnabled.InstanceName contains an instance suffix 
                        strDevInstanceName = UCase(Left(objPowerWakeEnable.InstanceName, Len(strNetworkAdapterID))) 
                        'Match found, enable WOL 
                        If StrComp(strDevInstanceName, strNetworkAdapterID)=0 Then 
                                    objPowerWakeEnable.Enable = True 
                                    objPowerWakeEnable.Put_           'Required to write the value back to the object 
                        End     If 
            Next 
            'Query for all of the MSNdis_DeviceWakeOnMagicPacketOnly classes 
            Dim colMagicPacketOnlys 
            Dim objMagicPacketOnly 
            Set colMagicPacketOnlys = GetObject("WinMgmts:{impersonationLevel=impersonate}//./root/wmi")_ 
            .ExecQuery("SELECT * FROM MSNdis_DeviceWakeOnMagicPacketOnly") 
            'Compare the PNP Device ID from the network adapter against the MSNdis_DeviceWakeOnMagicPacketOnly instances 
            For Each objMagicPacketOnly In colMagicPacketOnlys 
                        'We have to compare the leftmost part as MSNdis_DeviceWakeOnMagicPacketOnly.InstanceName contains an instance suffix 
                        strDevInstanceName = UCase(Left(objMagicPacketOnly.InstanceName, Len(strNetworkAdapterID))) 
                        'Match found, enable WOL for Magic Packets only 
                        If StrComp(strDevInstanceName, strNetworkAdapterID)=0 Then 
                                    objMagicPacketOnly.EnableWakeOnMagicPacketOnly = True  'Set to false if you wish to wake on magic packets AND wake patterns 
                                    objMagicPacketOnly.Put_             'Required to write the value back to the object 
                        End     If 
            Next 
Next