2011-05-27 12 views
6

मेरे पास एक cmd स्क्रिप्ट है जो पैच के सेट को निष्पादित करेगी, और इसे पैचिंग समस्याओं से बचने के लिए रीबूट की आवश्यकता होने पर इसे रद्द करने के लिए डिज़ाइन किया गया है। यदि संभव हो तो रीबूट मिड पैच से बचने के लिए यदि रीबूट शेड्यूल किया गया है (उदा। "शटडाउन" कमांड के माध्यम से) को रद्द करने के लिए स्क्रिप्ट को विस्तारित करना भी चाहूंगा। दुर्भाग्य से मैं इस एक और शट डाउन, जिसमें परिणाम शेड्यूल करने के लिए प्रयास कर रहा से अलग पता लगाने के लिए एक रास्ता खोजने में कामयाब नहीं किया है:।शेड्यूल किए गए शट डाउन का पता लगाना

एक सिस्टम शट डाउन पहले से ही तय किया गया है (1190)

जब मैं सैद्धांतिक रूप से इसका उपयोग कर सकता है मुझे नहीं लगता कि जब भी मुझे अनुसूचित रीबूट की जांच करने की आवश्यकता होती है तो उपयोगकर्ताओं में लॉग इन करना डरना अच्छा अभ्यास होगा। मुझे वास्तव में "शट डाउन" कमांड द्वारा संशोधित राज्य की QUERY का एक तरीका है।

क्या यह संभव है? मैं वास्तव में किसी भी समाधान से खुश हूं जिसमें मुझे शटडाउन घटनाओं को पकड़ने के लिए सिस्टम पर स्थायी रूप से चलने वाला एप्लिकेशन शामिल नहीं है (जो मुझे लगता है कि शटडाउन वास्तव में ट्रिगर होने तक भी भेजा जाता है)

उत्तर

0

मुझे लगता है कि आप निर्धारित कार्यों की गणना करने के लिए Task Scheduler API का उपयोग कर सकते हैं और देख सकते हैं कि उनमें से कोई भी shutdown.exe का आह्वान करता है या नहीं। लेकिन मैं "लगता है कि मजबूत है नहीं हूँ। वहाँ एक बंद शेड्यूल करने के लिए शायद कई तरीक़े हैं।

+0

हाँ, दुर्भाग्य से कुछ तरीके हैं और अब तक मुझे पता नहीं चला है कि "शट डाउन/आर/टी 60" कमांड कैसे शेड्यूल करता है। यह एक निर्धारित कार्य प्रतीत नहीं होता है - यह शायद कुछ कम स्तर है जो एक स्पष्ट एपीआई के बिना पता लगाने में मुश्किल बनाता है :( – Ificator

0

हो सकता है कि आप एक बड़े रियायती अवधि के साथ ExitWindowsEx फोन करके बंद शुरू करने और वापसी कोड ERROR_SHUTDOWN_IS_SCHEDULED और कॉल के लिए जाँच करने के लिए कोशिश कर सकते हैं AbortSystemShutdown तुरंत अगर ExitWindosEx लौट सफलता (यह दर्शाता है कि आप सफलतापूर्वक बंद अनुसूचित)

+0

सुझाव के लिए धन्यवाद। मैं इसे अंतिम उपाय के रूप में मान रहा हूं, हालांकि मैं वास्तव में डॉन ' टी मशीन पर किसी भी उपयोगकर्ता को समय-समय पर "मशीन रीस्टार्ट", "बस मजाक कर" अधिसूचनाओं को भ्रमित करना चाहता है। – Ificator

1

मैं एक ही समस्या है, मैं सब कुछ खत्म हो खोज की, लेकिन कुछ भी उपयोगी नहीं मिला।

अंततः मैं सिर्फ अलग अलग चीजों के साथ चारों ओर खिलवाड़ शुरू कर दिया मैं सोच सकता है। मैं दो कामकाज के बारे में सोच सकता हूं हमारी समस्या है।

ईवेंट दर्शक आपको बता सकता है कि शट डाउन निर्धारित किया गया है, लेकिन जब यह निर्धारित नहीं किया गया था।

एक विचार है कि हालिया सिस्टम शट डाउन, सबसे हालिया अनुसूचित शटडाउन और शेड्यूल किए गए शटडाउन का सबसे हालिया रद्दीकरण के लिए ईवेंट व्यूअर से पूछताछ करें। यदि निर्धारित शटडाउन सबसे हालिया रद्दीकरण या शटडाउन से अधिक हालिया है तो प्रगति पर एक है। ईवेंट ID कर रहे हैं: एक शुरू कर दिया अनुसूचित शट डाउन के लिए 1074, 1075 एक रद्द अनुसूचित शट डाउन, विंडोज लॉग्स के तहत के लिए/प्रणाली 12 प्रणाली के लिए प्रणाली बंद के लिए 13 से शुरू (सभी Windows लॉग्स/प्रणाली के तहत)

मैं बैच फ़ाइल में ऐसा करने के लिए बहुत आलसी था, मुझे पता है कि यह संभव है हालांकि।

तो मैं यही कर रहा हूं: शटडाउन शेड्यूल करने की बजाय, बस इसे रद्द करने का प्रयास करें। यदि कोई शट डाउन प्रगति पर नहीं है तो यह एक त्रुटि फेंक देगा (सिस्टम शट डाउन को रद्द करने में असमर्थ क्योंकि कोई शटडाउन प्रगति पर नहीं था। (1116))। एक शटडाउन शेड्यूल करके उपयोगकर्ता को फिक्र करने से मुझे लगता है कि बहुत बेहतर है।

यहां एक साधारण ऑटो शट डाउन स्क्रिप्ट के लिए मैंने जो कोड लिखा था, उसकी प्रतिलिपि है, यह एक निर्धारित शट डाउन को रद्द करने और शुरू करने के बीच टॉगल करता है।

@echo off 
shutdown /a 
if errorlevel 1 call:shutdown 
goto end 

:shutdown 
    set /p choice=Shutdown in how many minutes? 
    set /a mod=60 
    set /a mod*=%choice% 
    shutdown /s /t %mod% 

:end 

संपादित - मैं इस जवाब की समीक्षा कर रहा हूँ के रूप में मैं जोड़ने के लिए अधिक जानकारी है।

उपरोक्त समाधान पता लगाएगा कि शट डाउन को/t तर्क का उपयोग करके shutdown.exe आदेश के माध्यम से निर्धारित किया गया है या नहीं।

यदि आपको यह निर्धारित करने की आवश्यकता है कि विंडोज़ ने शटडाउन शेड्यूल किया है (क्योंकि यह कुछ विंडोज अपडेट के बाद स्वचालित रूप से होता है) तो एक रजिस्ट्री प्रविष्टि है जिसे आप क्वेरी कर सकते हैं। नीचे PowerShell में है, लेकिन आप ऐसा करने के लिए बैच फ़ाइल लिख सकते हैं।
Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending'

नोट: यह सच नहीं लौटेगा अगर में एक रिबूट shutdown.exe का उपयोग कर अनुसूचित, यह केवल सच वापस आ जाएगी अगर विंडोज कहते हैं आपके कंप्यूटर की जरूरत रीबूट कर दिया है।

0

यह करने का एक और तरीका, यदि आपकी स्क्रिप्ट शटडाउन सेट कर रही है, तो %x% और% time% चर को setx कमांड का उपयोग करके वैश्विक वातावरण में सहेजना है। फिर आप अगली बार स्क्रिप्ट कहलाते समय इन चरों को देख सकते हैं।

संबंधित मुद्दे