मैंने एक पाइथन स्क्रिप्ट बनाई जो सभी रनिंग वर्चुअलबॉक्स वीएम को सस्पेंड कर देगी, और फिर एक निर्धारित कार्य के रूप में लॉगआउट पर स्क्रिप्ट को चलाने के लिए सिस्टम सेट करें।
मुझे नहीं पता कि यह तरीका कितना विश्वसनीय है। जैसा कि दूसरों ने नोट किया है Winlogon 7002 कार्य को पूरा करने के लिए सिस्टम कितनी देर तक इंतजार करेगा, इसकी सीमाएं हैं। लेकिन मुझे व्यक्तिगत रूप से इसके साथ कोई समस्या नहीं है, क्योंकि यह कई राज्यों में समग्र वीएम रैम के 4+ जीबी के साथ कई बेकार VM को दे रहा है।
इसे स्थापित करने के चरण यहां दिए गए हैं:
- Python.org से Python 2.7.x को डाउनलोड और इंस्टॉल करें
- नोटपैड या किसी अन्य सादे पाठ संपादक का उपयोग करके अपने सिस्टम पर कहीं पायथन स्क्रिप्ट फ़ाइल बनाएं (नीचे देखें)
- टास्क शेड्यूलर खोलें
- कार्रवाई चुनें - & gt; एक बेसिक टास्क बनाएं ... और निम्नलिखित सेटिंग्स के साथ एक कार्य बनाने के लिए विज़ार्ड का उपयोग करें
- अपनी पसंद का एक नाम
- जब कोई विशिष्ट ईवेंट लॉग हो जाए तो कार्य प्रारंभ करें
- लॉग: सिस्टम
- स्रोत: विनलॉगन
- इवेंट आईडी: 7002
- एक कार्यक्रम शुरू करें
- के पास कार्यक्रम / स्क्रिप्ट , अपने पूरे रास्ते में प्रवेश करें
python.exe
, उदाहरण के लिए c:\Python27\python.exe
- के पास तर्क जोड़ें , पूर्ण पथ दर्ज करें, जहाँ आप अजगर स्क्रिप्ट फ़ाइल डालते हैं, उदाहरण के लिए, मैं अपने दस्तावेज़ फ़ोल्डर के सबफ़ोल्डर में रखता हूं, इसलिए यह है
C:\Users\rakslice\Documents\vboxsuspend\vboxsuspend.py
- समाप्त चुनें।
अब VirtualBox VMs को लॉगआउट / रिस्टार्ट / शटडाउन पर निलंबित किया जाना चाहिए।
अजगर स्क्रिप्ट शटडाउन करने के लिए नीचे है:
# A script to suspend all running VirtualBox VMs
import os
import subprocess
import sys
class VM(object):
def __init__(self, name, uuid):
self.name = name
self.uuid = uuid
def __repr__(self):
return "VM(%r,%r)" % (self.name, self.uuid)
class VBoxRunner(object):
def __init__(self):
program_files = os.environ["ProgramW6432"]
vbox_dir = os.path.join(program_files, "Oracle", "VirtualBox")
self.vboxmanage_filename = os.path.join(vbox_dir, "VBoxManage.exe")
def vbox_run(self, *args):
subprocess.check_call([self.vboxmanage_filename] + list(args))
def vbox_run_output(self, *args):
return subprocess.check_output([self.vboxmanage_filename] + list(args))
def list(self, running=True):
if running:
list_cmd = "runningvms"
else:
list_cmd = "vms"
return [self.parse_vm_list_entry(x) for x in self.vbox_run_output("list", list_cmd).strip().split("\n")]
def suspend_all(self):
success = True
stopped_some_vms = False
vms = self.list(running=True)
for vm in vms:
if vm is None:
continue
# noinspection PyBroadException
try:
self.suspend_vm(vm)
except:
success = False
else:
stopped_some_vms = True
if not stopped_some_vms:
self.message("No running vms")
return success
@staticmethod
def parse_vm_list_entry(x):
""":type x: str"""
if not x.startswith('"'):
return None
end_pos = x.find('"', 1)
if end_pos == -1:
return None
name = x[1:end_pos]
assert x[end_pos + 1: end_pos + 3] == " {"
assert x.endswith("}")
uuid = x[end_pos + 2:]
return VM(name, uuid)
@staticmethod
def message(msg):
print >>sys.stderr, msg
def suspend_vm(self, vm):
assert isinstance(vm, VM)
self.vbox_run("controlvm", vm.uuid, "savestate")
def main():
vr = VBoxRunner()
success = vr.suspend_all()
if not success:
sys.exit(1)
if __name__ == "__main__":
main()