프로그래밍 방식으로 컴퓨터를 다시 시작하고 플래시 드라이브로 부팅


4

원래 Stack Overflow에 게시했지만이 질문을 게시하기에 더 좋은 장소라고 할 수 있습니다.

컴퓨터를 자동으로 재부팅 할 작은 스크립트를 생성했습니다 (Windows 복구 환경). 여기 내 코드가 있습니다 :

$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

이 Powershell 스크립트는 내 Electron (Node.js 기반 프레임 워크) 응용 프로그램에서 실행됩니다. 이 응용 프로그램은 하루에 수백 가지 컴퓨터 모델에서 실행되며 하드웨어 정보를 수집하고 데이터베이스와 비교하여 프로덕션 환경에서 장치의 UPC를 검색합니다.

그러나 나는 정말로하고 싶은 것을 할 수있는 방법을 찾아 내지 못하기 때문에이 기능을 가지고있다. 나는이 스크립트가 실제로 컴퓨터를 재부팅하기를 원했다. USB 드라이브의 .EFI 파일로 부팅 . Windows 복구 환경으로 재부팅하는 것은 USB 플래시 드라이브로 부팅하기위한 버튼을 제공하기 때문에 구현 한 해결 방법이었습니다. 나는이 단계를 제거하고 USB 플래시 드라이브로 바로 부팅하기를 원하기 때문에 여기에 게시하고 있습니다. 프로그램을 실행중인 USB 플래시 드라이브에는 부팅 가능한 .EFI 파일도 포함됩니다.

이제 질문은 : 컴퓨터를 재부팅하고 USB 플래시 드라이브에서 부팅하는 코드 (PowerShell, Electron 또는 Node.js)를 작성하려면 어떻게해야합니까?

이 작업을 수행하는 방법을 살펴 보았습니다. bcdedit, 그리고 아무것도 찾을 수없는, 나는 정말로 내가 필요로하는 것을 찾으려고 노력하는 다른 수색 기간을 모른다, 나는 여기에서 손실에있다.

답변:


3

실행중인 OS에 대한 관리 액세스 권한이 이미있을 때 "하드웨어 정보 수집"을 위해 외장 드라이브로 부팅해야 할 필요성에 대한 설명이 없으므로 XY 문제와 비슷해 보입니다.

Windows를 USB 드라이브에 연결하면 쉽게 부팅 할 수 있습니다. 다음을 사용하여 드라이브에 대한 부팅 항목을 만듭니다. bcdedit create, Windows가 부팅 할 수 있도록 알려주십시오. 부팅 항목 만들기 여기 Microsoft가 문서화

문서에 따라 기존 항목을 복사하는 것이 더 쉽습니다.

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

bcdedit은 추출해야 할 새 부트 항목의 GUID를 반환합니다.

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

그런 다음 USB 장치를 가리 키도록 새 항목의 옵션을 설정하십시오. 변경할 필요가있는 최소한의 등록 정보는 장치, os 장치 및 경로입니다. 부팅중인 항목에 따라 다른 값을 수정해야 할 수도 있습니다. 예를 들어 기존 Windows 로더 및 / 또는 PE / PXE 로더의 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

그런 다음 Windows가 이미 부팅 한 것처럼 부팅하도록 알려줍니다.

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

분명히, 대체 My Boot Entry Description 무언가를 유용하게 사용할 수 있습니다. 고유 한 식별자를 사용하면 앞으로 스크립트를 매일 실행하는 경우 항목을 재사용하거나 삭제할 수 있습니다. 바꾸다 D: 부팅하려는 USB 장치의 드라이브 문자가 무엇이든간에 이기종 시스템에서이 작업을 수행하는 경우 시스템에 따라 드라이브 문자가 달라 지므로 프로그래밍 방식으로 결정해야 할 수 있습니다. 그리고 \Location\Of\Your\Bootloader.efi 음, 부팅하려는 .EFI 파일의 상대 경로.


" 외부 드라이브로 부팅하여 "하드웨어 정보 수집" "죄송합니다. 오해. 하드웨어 정보를 수집하는 프로그램의 일부는 다시 시작과 별개입니다. 기본적으로 흐름은 컴퓨터가 복구를 사용하여 재설정 된 다음 언어 화면에서 테스터가 명령 프롬프트 (하드웨어를 수집하고 몇 가지 테스트 및 UPC 및 일련 번호를 테스터가 스캔 할 수 있도록 표시), 버튼을 눌러 컴퓨터를 플래시 드라이브로 다시 부팅합니다.이 프로그램은 FreeBSD를 닦아내는 데 사용되는 Active Boot라는 프로그램입니다.
GrumpyCrouton

임시 솔루션을 더 많이 만들 수있는 방법이 있습니까? 예를 들어, 이것은 한 번 부팅 한 다음 기본값으로 돌아갈 것입니까?
GrumpyCrouton

이것은 실제로 실제로 작동하지 않습니다. 이 기능을 사용할 때마다 "자동 복구 시작"이라는 메시지가 나타나고 문제가있는 것처럼 문제 해결 환경으로 넘어갑니다.
GrumpyCrouton

@ GrumpyCrouton : 새로운 옵션으로 한 번 부팅 한 다음 다시 이전 기본값으로 돌아가는 유일한 방법은 부팅하는 시스템이 다시 부팅되도록하는 것입니다. 그것이 왜 효과가 없는지에 관해서는 질문 하단에 "업데이트"섹션을 추가하여 제안 된 답변을 사용하여 현재의 문제가 무엇인지 보여 주거나 새로운 질문을하십시오.
3D1T0R

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.