I wrote a bunch of Python
scripts that allow me reboot, shutdown, and wake on LAN using Python
.
The wake on LAN
script, for example, uses the network to send a packet which initializes the boot of a machine.
The problem is: I'm running some performance tests, and I have 12 different versions of Windows installed in a single desktop (7, 8 and Blue, both x86 and x64)
So when the boot starts, comes in the option of choosing which machine to boot. Once I get this figure out, then I'm pretty much done.
Is there any python library, or anything that can be run through Python
that can control to which machine to boot?
For example, suppose we have in the startup boot the installs A
, B
, C
and D
.
Is there a way which I can retrieve a list of those options, and then choose boot B
to start, for example? Other than that, I have the whole application figured out.
Here is the script for the Wake on LAN
:
#!/usr/bin/env python
# wol.py
import socket
import struct
def wake_on_lan(macaddress):
""" Switches on remote computers using WOL. """
# Check macaddress format and try to compensate.
if len(macaddress) == 12:
pass
elif len(macaddress) == 12 + 5:
sep = macaddress[2]
macaddress = macaddress.replace(sep, '')
else:
raise ValueError('Incorrect MAC address format')
# Pad the synchronization stream.
data = ''.join(['FFFFFFFFFFFF', macaddress * 20])
send_data = ''
# Split up the hex values and pack.
for i in range(0, len(data), 2):
send_data = ''.join([send_data,
struct.pack('B', int(data[i: i + 2], 16))])
# Broadcast it to the LAN.
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(send_data, ('<broadcast>', 7))
if __name__ == '__main__':
# Use macaddresses with any seperators.
wake_on_lan('0F:0F:DF:0F:BF:EF')
wake_on_lan('0F-0F-DF-0F-BF-EF')
# or without any seperators.
wake_on_lan('0F0FDF0FBFEF')