기 타 Win10에서 UEFI or Legacy 를 구분하는 5가지 방법을 소개한 곳이 있네요..
2021.01.04 16:43
제목에서 처럼 Windows10에서 UEFI or Legacy 를 구분하는 구분하는 5가지 방법에 대해서 소개한 사이트를 지후빠님이 알려주셨습니다
이미 알고 계신분도 있으실것입니다...소개한 글이 없어져서..아쉬운 마음에 사용기란에 소개를 하게 되었습니다
아래는 5가지 방법이 소개된 사이트 입니다
Check if Windows 10 is using UEFI or Legacy BIOS
https://www.tenforums.com/tutorials/85195-check-if-windows-10-using-uefi-legacy-bios.html
Option One: To Check if Windows 10 is using UEFI or Legacy BIOS in System Information
Option Two: To Check if Windows 10 is using UEFI or Legacy BIOS in Disk Management
Option Three: To Check if Windows 10 is using UEFI or Legacy BIOS using BCDEDIT command
Option Four: To Check if Windows 10 is using UEFI or Legacy BIOS in Command Prompt at Boot
Option Five: To Check if Windows 10 is using UEFI or Legacy BIOS in PowerShell
본문 내용을 복사를 해온것입니다
실제 pe나 윈도우에서 UEFI 와 Legacy 구분용으로 활용되고 있는것들이 있어서 생소하지 않으실것입니다
저는..powershell을 명령어는 처음 알게 되어서 혹시나 하고 기대를 했었습니다..제목에 있는것처럼 Windows7에서는 되지 않고 Windows10에서
는 잘되네요..
powershell 이라면 저도 활용해본적이 없고...복잡한 소스들이 있는것만 보아서 어려운줄 알았습니다..다행이 cmd에서 한줄로 UEFI와 Legacy 를
구분할수가 있습니다.
간단히 가능하구나 하는 정도로 참고를 해두셨다가 필요할때 활용을 하시면 좋을것 같습니다
5가지 방법을 간단히 정리를 해 보았습니다
1. msinfo32 으로 확인하는 방법은 Gui로 할수도 있고 CMD로 할수가 있습니다..cmd에서 txt로 저장하는데 한참이 걸립니다..
프로그램밍에 활용을 할수가 없는 방법인것 같습니다
2. 디스크관리에서 직접 확인하는 방법입니다..수동으로 진행이 되기 때문에 cmd로는 활용을 할수가 없는 방법이기는 합니다
3. cmd에서 bcdedit | find "path" 명령어를 활용하는 방법입니다..윈포에서 배치파일로 많이 활용이 되고 있어서 많이 보신 내용입니다
4. cmd에서 wpeutil UpdateBootInfo 실행후 레지값으로 구분하는것을 pe에서 활용되고 있어서 이미 알고 계신것이죠..
5. PowerShell을 실행후 $env:firmware_type 명령어를 입력하면 UEFI 인지 Legacy 인지 알려줍니다...
PowerShell이 명령어에서 firmware_type 단어 덕분에 이제까지 몰랐던것을 알게 되었습니다
오토잇으로 UEFI,Legacy 구분을 해보려고 한적이 있습니다 이때 Windows7에서 구분을 할수가 없어서 포기를 했었습니다
같은 방식인데 오토핫키는 구분이 되기는 하였습니다...오토잇도 에러가 나시는분이 있으신것을 보면 완벽하지는 않았던것 같습니다
PowerShell 관련 자료를 찾던중 아래와 같은 글을 보았습니다 소스의 일부입니다
이것을 보기전까지 Windows7에서 오토잇으로 다시 해본다고 열심히 여기저기 찾았다녔습니다.결국 포기를 했습니다.
If ($QueryType -eq 'Auto') {
Switch (Get-OSVersion) {
{$_ -ge [System.Version]'6.2.0.0'} {
Write-Verbose "OS Version $OSVersion, Windows 8.0, Server 2012 or above -> Using GetFirmwareType() API."
$QueryType = 'GetFirmwareType'
Break
}
{$_ -ge [System.Version]'6.1.0.0'} {
Write-Verbose "OS Version $OSVersion, Windows 7, Server 2008R2 or above -> Using GetFirmwareEnvironmentVariable() API."
$QueryType = 'GetFirmwareEnvironmentVariable'
Break
}
Default {
Write-Verbose "OS Version $OSVersion, Windows Vista, Server 2008 or below -> Using $Env:windir\Panther\setupact.log file."
$QueryType = 'SetupLog'
Break
}
}
}
Windows7에서와 Windows10에서 사용하는 api를 다른것을 활용을 하고 있습니다..윈도우마다 차이가 있나 봅니다
혹시 UEFI 와 Legacy를 구분하시는 프로그램밍을 하셨는데 잘 안되시면 이런 부분도 감안을 하시면 좋을것 같습니다..
Windows7은 이제 사용하시는 분이 많지 않아서 고려의 대상에서 아닐수도 있습니다
재미없는 내용들이었습니다.
cmd에서 PowerShell $env:firmware_type 명령어 실행 결과를 변수에 추출하는것은 for 문을 활용하였습니다
:: UEFI Legacy 구분
for /f %%a in ('powershell.exe $env:firmware_type') do (Set sMode=%%a)
echo BOOTMODE : %sMode%
추가입니다 //////////////////////////////////////////////////////////////////////////
아래의 내용은 댓글로 지후빠님게서 알려주신 내용을 복사해 온것입니다.
지후빠님 덕분에 아주 간단히 구분할수 있게 되었습니다..복 많이 받으십시요
근데 파워쉘에서 $env는 환경변수라는 말이어서 cmd에서 다음처럼 쉽게 확인이 되네요.
echo %firmware_type%
오토핫키에서는
EnvGet, UorB, firmware_type
MsgBox % UorB
%FIRMWARE_TYPE% (숨겨진) 환경변수는 윈도우8부터 생긴 것 같습니다. (윈8.1 되고 윈7에선 안됨)
이제 위에서 for문으로 복잡하게 변수에 넣어서 IF문으로 처리할 필요없이 바로 UEFI가 아닌지 IF문에 바로 사용할수가 있습니다
너무 간단해졌습니다 아래는 간단한 예입니다
IF "%firmware_type%" EQU "UEFI" (echo BOOMODE-2 : UEFI)
1. Windows7에서 실행 결과 입니다.. 아무것도 나오지 않습니다
2. 사이트 설명대로 Windows10에서는 아래처럼 UEFI 값을 출력합니다..
3. powershell 확장자로 된 파일을 구글에서 다운 받았습니다만...잘 안되네요..ps1 파일을 클릭하면 이런 프로그램이 실행이 됩니다..저도 처음보는
것이라..그냥 구경만 했습니다
몇줄 안되는것인데도 내용을 알지 못하여서 인지 저에개는 외계어로 보입니다..언젠가..고수님께서 cmd보다는 다양한 기능이 있는 powershell을
활용하는것이 좋다고 하셨는데...쉽게 접근이 되지 않네요..
4. 에러가 나면서 결과를 보여 주지 못합니다
5. 저만 몰랐죠..우클릭에서 powershell을 실행할수가 있습니다
6. 에러가 나기는 합니다만..결과 같은 보여주기는 합니다..실제 활용을 하지 못하는것입니다만..저도 처음 실행해보는것이어서 캡쳐를 하였습니다
7. 마무리
UEFI 와 Legacy를 구분하는것에 대한 명령어들을 따로 따로 cmd등에서 보기는 하였습니다..수동으로 확인을 해야 하지만 이렇게 5가지나 되네요
저의 경우 bcdedit 를 활용하는 방식을 사용해보지는 않았습니다...디스크 관리에서 파티션에서 ESP를 구분하는 것처럼 오토잇으로 ESP 파티션을
구분하는것을 활용하기는 합니다..
cmd에서 powershell에서 한줄로 UEFI 와 Legacy 를 구분할수 있어서 bcdedit 방법외에도 한가지 방법이 더 생긴것이죠..
혹시 저만 이제서야 알게된것인가요...알고만 계셨다가 필요하실때 활용을 하시면 될것 같습니다
월요일이 가장 힘든날이죠..오늘 하루도 끝나가네요..
마무리 잘되시길 바랍니다
댓글 [7]
-
ehdwk 2021.01.04 17:08
수고하셨습니다. -
ehant 2021.01.04 17:40
고생하셨습니다.
-
별의아이 2021.01.04 17:47
고생하셨습니다.^^
-
지후빠 2021.01.04 18:56
수고하셨습니다.^^ 저는 이런쪽으로 별 관심이 없어서 모르는 것이 많습니다만...
근데 파워쉘에서 $env는 환경변수라는 말이어서 cmd에서 다음처럼 쉽게 확인이 되네요.
echo %firmware_type%
오토핫키에서는
EnvGet, UorB, firmware_type
MsgBox % UorB
%FIRMWARE_TYPE% (숨겨진) 환경변수는 윈도우8부터 생긴 것 같습니다. (윈8.1 되고 윈7에선 안됨)
그래서 msinfo32 실행하면 윈7에서는 "BIOS 모드" 항목이 없고 윈8,10에서는 있나 봅니다.
-
왕초보 2021.01.04 19:18
와! 감탄이 절로 나옵니다..너무 좋습니다
powershell.exe $env:firmware_type 를 for문에 넣은것은 변수에 저장후 IF문을 사용하려고 했습니다
말씀하신것처럼 환경변수여서 바로 IF문으로 확인을 할수가 있었습니다.. 너무 간단해졌습니다. 본문에 내용을 추가하도록 하겠습니다
귀한 지식을 베풀어 주셔서 감사합니다...
오토잇도 그렇고 이번에도 그렇고 여러가지로 신세 많이졌습니다..잊지 않도록 하겠습니다
-
지후빠 2021.01.04 22:23
그저 잔재주이고 깊게는 모릅니다. ^^
윈7에서는 옵션 3번 bcdedit 밖에 답이 없어보입니다.
Option Three: To Check if Windows 10 is using UEFI or Legacy BIOS using BCDEDIT command
-
왕초보 2021.01.04 22:48
저에게는 생각지도 못했던 정보들입니다..아시는 분들이야 어떻게 생각하실지 모르지만..모르고 있는 사람에게는..큰 의미가 있습니다
powershell을 처음하는 저에게는 UEFI 구분하는것도 복잡하기만 하였지만...이것이 간단히 한줄로 끝났습니다...
당연히 저에게는..고마운 지식입니다...모르고 있던것을 배웠다는 하나 만으로도 많이 베풀어 주신것입니다..
진심으로 감사드리는 마음입니다.
Windows7에서 cmd로 제일 간단하게 알아내는 방법은 bcdedit 인것 같습니다.
조금 복잡하지만..cmd에서 알아낼수 있는 다른 방법은 mountvol.exe를 활용해서 꼼수를 쓰는 방법인것 같습니다...
현재는 Windows7에서는 오토잇으로 ESP 파티션 유무로 파악을 하고 있습니다