Here is a Python script to reboot a remote Windows server. It requires the Python Win32 Extensions to be installed.
# Reboot a remove server
import win32security
import win32api
import sys
import time
from ntsecuritycon import *
def RebootServer(message='Server Rebooting', timeout=30, bForce=0, bReboot=1):
AdjustPrivilege(SE_SHUTDOWN_NAME)
try:
win32api.InitiateSystemShutdown(None, message, timeout, bForce, bReboot)
finally:
# Remove the privilege we just added.
AdjustPrivilege(SE_SHUTDOWN_NAME, 0)
def AbortReboot():
AdjustPrivilege(SE_SHUTDOWN_NAME)
try:
win32api.AbortSystemShutdown(None)
finally:
# Remove the privilege we just added.
AdjustPrivilege(SE_SHUTDOWN_NAME, 0)
def AdjustPrivilege(priv, enable=1):
# Get the process token.
flags = TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY
htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags)
# Get the ID for the system shutdown privilege.
id = win32security.LookupPrivilegeValue(None, priv)
# Obtain the privilege for this process.
# Create a list of the privileges to be added.
if enable:
newPrivileges = [(id, SE_PRIVILEGE_ENABLED)]
else:
newPrivileges = [(id, 0)]
# and make the adjustment.
win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges)
if __name__=='__main__':
message = 'This server is pretending to reboot\nThe shutdown will stop in 10 seconds'
RebootServer(message)
print 'Sleeping for 10 seconds'
time.sleep(10)
print 'Aborting shutdown'
AbortReboot()
Note: This code came from somewhere on the net and was not attributed to anyone. If you wrote it, let me know.
The code is from Mark Hammond's book, "Python Programming on Win32", published by O'Reilly in 2000, pp 305-306
ReplyDelete