Starten Sie den Computer programmgesteuert neu und starten Sie das Flash-Laufwerk

552
GrumpyCrouton

Ursprünglich habe ich dies auf Stack Overflow gepostet, aber es wurde mir gesagt, dass dies ein besserer Ort für diese Frage sein könnte.

Ich habe ein kleines Skript erstellt, das einen Computer in seiner Wiederherstellungssequenz (Windows-Wiederherstellungsumgebung) automatisch neu startet. Hier ist mein Code:

$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 

Dieses Powershell-Skript wird von meiner Electron-App (einem Node.js-basierten Framework) ausgeführt. Diese App kann auf Hunderten von verschiedenen Computermodellen pro Tag ausgeführt werden, sammelt ihre Hardwareinformationen und vergleicht sie mit einer Datenbank, um die UPC der Einheit in einer Produktionsumgebung abzurufen.

Ich habe jedoch diese Funktion, weil ich keinen Weg finden konnte, das zu tun, was ich wirklich wollte. Ich wollte, dass dieses Skript einen Computer neu startet und die .EFI-Datei eines USB-Laufwerks bootet . Der Neustart in der Windows-Wiederherstellungsumgebung war eine Problemumgehung, die ich implementiert habe, da dort eine Schaltfläche zum Starten eines USB-Flashlaufwerks angezeigt wird. Ich poste hier, weil ich diesen Schritt wirklich gerne beseitigen und einfach direkt vom USB-Flash-Laufwerk booten möchte. Das USB-Flashlaufwerk, auf dem das Programm ausgeführt wird, enthält auch eine startfähige .EFI-Datei.

Nun ist die Frage: Wie schreibe ich einen Code (in PowerShell, Electron oder Node.js), der den Computer neu startet und vom USB-Flashlaufwerk aus booten lässt?

Ich habe versucht bcdeditherauszufinden, wie man das macht, und ich kann nichts finden, und ich kenne keine anderen Suchbegriffe, um zu finden, was ich brauche. Ich bin hier ratlos.

4

1 Antwort auf die Frage

3
qasdfdsaq

Ich ignoriere die Tatsache, dass dies wie ein XY-Problem klingt, da ich keine Erklärung für das Booten auf ein externes Laufwerk sehe, um "Hardware-Informationen zu sammeln", wenn Sie bereits Administratorzugriff auf das laufende Betriebssystem haben ...

Es ist ziemlich einfach, Windows von einem gesteckten USB-Laufwerk zu booten. Sie erstellen einen Starteintrag für das Laufwerk mit bcdedit createund weisen Windows dann an, darin zu booten. Das Erstellen von Starteinträgen wird hier von Microsoft dokumentiert

Laut Dokumentation kann es einfacher sein, einen vorhandenen Eintrag zu kopieren:

bcdedit /copy /d "My Boot Entry Description" 

bcdedit gibt die GUID des neuen Boot-Eintrags zurück, den Sie extrahieren müssen:

The entry was successfully copied to . 

Stellen Sie dann die Optionen des neuen Eintrags so ein, dass er auf Ihr USB-Gerät verweist. Die Mindesteigenschaften, die Sie ändern müssen, sind Gerät, Gerät und Pfad. Je nachdem, was Sie gerade booten, müssen Sie möglicherweise andere Werte ändern. Sehen Sie sich die Ausgabe von bcdedit für Ihren vorhandenen Windows-Loader und / oder PE / PXE-Loader als Beispiele an.

bcdedit /set device partition=D: bcdedit /set osdevice partition=D: bcdedit /set path \Location\Of\Your\Bootloader.efi 

Dann fordern Sie Windows auf, es zu booten, wie Sie es bereits tun:

bcdedit /bootsequence 

Ersetzen Sie natürlich durch My Boot Entry Descriptionetwas Nützliches, vielleicht einen eindeutigen Bezeichner, der Ihnen hilft, den Eintrag in Zukunft zu finden, um ihn erneut zu verwenden oder zu löschen, wenn Sie das Skript täglich ausführen. Ersetzen Sie D:den Laufwerksbuchstaben des USB-Geräts, das Sie starten möchten. Wenn Sie dies auf heterogenen Systemen tun, müssen Sie dies möglicherweise programmgesteuert festlegen, da Laufwerkbuchstaben von System zu System variieren. Und ersetzen Sie \Location\Of\Your\Bootloader.efidurch den relativen Pfad der .EFI-Datei, die Sie starten möchten.

"_boot auf ein externes Laufwerk, um" Hardwareinformationen zu sammeln "_" Sorry, Missverständnis. Der Teil des Programms, der Hardware-Informationen sammelt, unterscheidet sich vom Neustart. Grundsätzlich ist der Ablauf so, dass der Computer mithilfe der Wiederherstellung zurückgesetzt wird. Während der Sprachwiedergabe ein Tester das Programm über die Eingabeaufforderung ausführt (die Hardware sammelt, einige Tests durchführt und die UPC- und Seriennummer für das Scannen des Testers anzeigt), drücken sie eine Taste Starten Sie den Computer auf seinem Flash-Laufwerk neu. Dies ist ein Programm namens Active Boot, mit dem der freie Speicherbereich gelöscht wird. Danke für die Antwort! GrumpyCrouton vor 5 Jahren 0
Gibt es eine Möglichkeit, dies zu einer temporären Lösung zu machen? Beispiel: Wird dies nur einmal gestartet, dann werden die Standardeinstellungen wiederhergestellt. GrumpyCrouton vor 5 Jahren 0
Das scheint eigentlich nicht wirklich zu funktionieren. Jedes Mal, wenn ich diese Option verwende, bekomme ich beim Starten "Starten der automatischen Reparatur" und es wird einfach in die Fehlerbehebungsumgebung geleitet, als wäre ein Problem aufgetreten. GrumpyCrouton vor 5 Jahren 0
@GrumpyCrouton: Die einzige Möglichkeit, es nur einmal mit der neuen Option zu booten, und dann zum vorherigen Standard zurückzukehren, besteht darin, das System, das Sie booten, zurück zu ändern. Um zu erfahren, warum es für Sie nicht funktioniert, fügen Sie am Ende Ihrer Frage einen Abschnitt "Aktualisieren" hinzu, der zeigt, was Ihr aktuelles Problem bei der Verwendung dieser vorgeschlagenen Antwort ist, oder stellen Sie eine neue Frage. 3D1T0R vor 5 Jahren 0
@ 3D1T0R [BCD-Eintrag für Winpe startet nur Vorbereiten der automatischen Reparatur] (// stackoverflow.com/q/50629668) GrumpyCrouton vor 5 Jahren 0