प्रोग्राम और फ्लैश ड्राइव में कंप्यूटर को बूट करें


4

मैंने इसे मूल रूप से स्टैक ओवरफ्लो पर पोस्ट किया था, लेकिन बताया गया था कि इस प्रश्न को पोस्ट करने के लिए यह एक बेहतर जगह हो सकती है, इसलिए यहाँ जाता है;

मैंने एक छोटी स्क्रिप्ट बनाई है, जो अपने आप कंप्यूटर को रिकवरी सीक्वेंस (विंडोज रिकवरी एनवायरनमेंट) में रिबूट कर देगी। यहाँ मेरा कोड है:

$testpath = test-path "bcdedit.txt"
if ($testpath -eq $true){
    Remove-item "bcdedit.txt"
}
bcdedit | Out-File "bcdedit.txt"
foreach($line in Get-Content .\bcdedit.txt) {
    if($line -match $regex){
        if($line -like 'recoverysequence*') {
            $variable = "{" + $line.Split('{')[-1]
        }
    }
}
bcdedit /bootsequence $variable
Remove-item "bcdedit.txt"
shutdown /r /t 1

यह पॉवर्सशेल स्क्रिप्ट मेरे इलेक्ट्रॉन (एक Node.js- आधारित फ्रेमवर्क) ऐप से चलाई गई है। यह ऐप प्रति दिन सैकड़ों विभिन्न कंप्यूटर मॉडल पर चलता है, उनकी हार्डवेयर जानकारी इकट्ठा करता है और उत्पादन परिवेश में यूनिट के यूपीसी को पुनः प्राप्त करने के लिए डेटाबेस के साथ उनकी तुलना करता है।

हालाँकि, मेरे पास यह सुविधा है क्योंकि मैं वह करने का तरीका नहीं खोज सकता जो मैं वास्तव में करना चाहता था। मैं इस स्क्रिप्ट को वास्तव में एक कंप्यूटर को रिबूट करना चाहता था, और एक USB ड्राइव की .EFI फ़ाइल में बूट करना चाहता था । विंडोज रिकवरी एनवायरनमेंट को रिबूट करना एक वर्कअराउंड था जिसे मैंने लागू किया क्योंकि यह USB फ्लैश ड्राइव में बूट करने के लिए एक बटन प्रस्तुत करता है। मैं यहां पोस्ट कर रहा हूं क्योंकि मैं वास्तव में इस कदम को खत्म करना चाहूंगा और सीधे यूएसबी फ्लैश ड्राइव में बूट करूंगा। USB फ्लैश ड्राइव जो प्रोग्राम चला रहा है उसमें बूट करने योग्य .EFI फ़ाइल भी होगी।

अब सवाल यह है: मैं एक कोड कैसे लिख सकता हूं (PowerShell, इलेक्ट्रॉन, या Node.js में) जो कंप्यूटर को रिबूट करता है और इसे यूएसबी फ्लैश ड्राइव से बूट करता है?

मैंने यह देखने की कोशिश की है कि यह कैसे करना है bcdedit, और कुछ भी नहीं मिल सकता है, और मुझे वास्तव में किसी भी अन्य खोज शब्द का पता नहीं है कि मुझे क्या चाहिए, मैं यहां एक नुकसान में हूं।

जवाबों:


3

इस तथ्य को नजरअंदाज करते हुए कि यह एक XY समस्या की तरह लगता है क्योंकि मुझे "हार्डवेयर जानकारी इकट्ठा करने" के लिए एक बाहरी ड्राइव को बूट करने की आवश्यकता के लिए कोई स्पष्टीकरण नहीं दिखता है जब आपके पास पहले से चल रहे ओएस तक प्रशासनिक पहुंच होती है ...

यूएसबी ड्राइव में प्लग में बूट करने के लिए विंडोज को प्राप्त करना बहुत आसान है। आप ड्राइव का उपयोग करने के लिए एक बूट प्रविष्टि बनाते हैं bcdedit create, फिर विंडोज को इसमें बूट करने के लिए कहते हैं। बूट प्रविष्टियाँ बनाना Microsoft द्वारा यहाँ प्रलेखित है

दस्तावेज़ के अनुसार मौजूदा प्रविष्टि को कॉपी करना आसान हो सकता है:

bcdedit /copy {current} /d "My Boot Entry Description"

bcdedit नई बूट प्रविष्टि का GUID लौटाएगा जिसे आपको निकालने की आवश्यकता होगी:

The entry was successfully copied to {some-autogenerated-guid-here}.

फिर अपने USB डिवाइस को इंगित करने के लिए नई प्रविष्टि के विकल्प सेट करें। आपको जिन न्यूनतम गुणों को बदलना होगा, वे हैं डिवाइस, ऑसदेवाइस और पाथ। यह जो आप बूट कर रहे हैं, उसके आधार पर, आपको अन्य मूल्यों को संशोधित करने की आवश्यकता हो सकती है - उदाहरण के रूप में अपने मौजूदा विंडोज लोडर और / या पीई / पीएक्सई लोडर के लिए bcdedit आउटपुट देखें।

bcdedit /set {your-new-boot-entry-guid} device partition=D:
bcdedit /set {your-new-boot-entry-guid} osdevice partition=D:
bcdedit /set {your-new-boot-entry-guid} path \Location\Of\Your\Bootloader.efi

फिर विंडोज को बूट करने के लिए कहें जैसे आप पहले से कर रहे हैं:

bcdedit /bootsequence {your-new-boot-entry-guid}

जाहिर है, My Boot Entry Descriptionकुछ उपयोगी के साथ बदलें , शायद भविष्य में पुन: उपयोग या हटाने के लिए प्रविष्टि का पता लगाने में मदद करने के लिए एक अद्वितीय पहचानकर्ता, यदि आप हर दिन स्क्रिप्ट कह रहे हैं। D:जो भी ड्राइव अक्षर उस USB डिवाइस का है जिसे आप बूट करने की कोशिश कर रहे हैं, से बदलें ; यदि आप विषम प्रणालियों पर ऐसा कर रहे हैं, तो आपको इस प्रोग्राम को निर्धारित करना पड़ सकता है क्योंकि सिस्टम के आधार पर ड्राइव अक्षर अलग-अलग होंगे। और \Location\Of\Your\Bootloader.efi, .EFI फ़ाइल के सापेक्ष पथ को आप बूट करने का प्रयास कर रहे हैं।


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

क्या इसे और अधिक अस्थायी समाधान बनाने का कोई तरीका है? उदाहरण के लिए, क्या यह केवल एक बार बूट होता है फिर डिफ़ॉल्ट पर वापस जाता है?
ग्राम्प्रेक्टन

यह वास्तव में वास्तव में काम नहीं करता है। हर बार जब मैं इसका उपयोग करता हूं, तो स्टार्टअप पर मुझे "स्टार्टिंग ऑटोमैटिक रिपेयर" मिलता है और यह सिर्फ समस्या निवारण के लिए जाता है जैसे कि कोई समस्या थी।
ग्रुम्पी क्राउटन

@GrumpyCrouton: इसे नए विकल्प में केवल एक बार बूट करने का एकमात्र तरीका है, फिर पिछले डिफ़ॉल्ट पर वापस जाएं, आपको उस सिस्टम को बूट करना होगा जो आप इसे वापस बदल सकते हैं। जैसे कि यह आपके लिए काम क्यों नहीं कर रहा है, कृपया या तो अपने प्रश्न के निचले भाग में एक "अपडेट" अनुभाग जोड़ें, जिसमें दिखाया गया है कि इस प्रस्तावित उत्तर का उपयोग करने के साथ आपका वर्तमान मुद्दा क्या है, या एक नया प्रश्न पूछें।
3D1T0R

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.