Windows 10 설치 이미지에 포함된 setup.exe 설치 프로그램은 생각보다 많은 명령줄 매개변수를 제공합니다. 관리자는 이러한 매개변수를 활용해 SCCM, MDT 등의 배포 도구와 연동하여 사용자 컴퓨터에서 Windows 10 빌드를 조용히(silent) 자동 업그레이드할 수 있습니다. 이 글에서는 호환성 검사부터 최신 Windows 10 빌드 업그레이드까지, setup.exe 매개변수를 실무에서 활용하는 방법을 소개합니다.
Windows 10 Setup.exe 명령줄 옵션
Windows 10 빌드를 업그레이드하려면 설치 프로그램 setup.exe를 사용합니다. 프로그램을 실행하면 그래픽 기반 Windows 10 업데이트 마법사가 나타나지만, 실제로는 사용자 컴퓨터의 OS 업그레이드를 자동화할 수 있는 수많은 명령줄 매개변수가 내장되어 있습니다. Setup.exe의 일반적인 구문과 주요 매개변수는 다음과 같습니다.
/1394Debug:<channel>
[BaudRate:<baudrate>]
/AddBootMgrLast
/Auto {Clean | DataOnly | Upgrade}
/BitLocker {AlwaysSuspend | TryKeepActive | ForceKeepActive}
/BusParams:<bus.device.function>
/CompactOS {Enable / Disable}
/Compat {IgnoreWarning / ScanOnly}
/CopyLogs<location>
/Debug:<port> [BaudRate:<baudrate>]
/DiagnosticPrompt {enable | disable}
/DynamicUpdate {enable | disable}
/EMSPort: {COM1 | COM2 | off} [/emsbaudrate:<baudrate>]
/InstallDrivers<location>
/InstallFrom<path>
/InstallLangPacks<location>
/m:<folder_name>
/MigNEO Disable
/MigrateDrivers {all | none}
/NetDebug:hostip=<w.x.y.z>,port=<n>,key=<q.r.s.t>[,nodhcp][,busparams=n.o.p]
/NoReboot
/PKey<product key>
/Priority Normal
/PostOOBE<location> [\setupcomplete.cmd]
/PostRollback<location> [\setuprollback.cmd] [/postrollbackcontext {system / user}]
/Quiet
/ReflectDrivers<location>
/ResizeRecoveryPartition {Enable / Disable}
/ShowOOBE {full / none}
/Telemetry {Enable / Disable}
/TempDrive <drive_letter>
/Unattend:<answer_file>
/Uninstall {enable / disable}
/USBDebug:<hostname>
/WDSDiscover
/WDSServer:<servername>
모든 setup.exe 명령줄 옵션과 세부 기능에 대한 자세한 내용은 Microsoft 공식 문서(Windows Setup Command-Line Options)에서 확인할 수 있습니다.
최신 Windows 10 설치 ISO 이미지 만드는 방법
Windows 10 빌드를 업그레이드하려면 최신 버전의 Windows 10이 담긴 설치 ISO 이미지가 필요합니다. 이 글 작성 시점 기준 최신 버전은 Windows 10 2004(2020년 5월 업데이트)입니다.
미디어 생성 도구(Media Creation Tool)를 사용하면 최신 Windows 10 빌드가 포함된 ISO 이미지를 손쉽게 만들 수 있습니다.
- 미디어 생성 도구를 다운로드합니다(Microsoft 공식 다운로드 페이지).
- MediaCreationTool2004.exe를 실행하고 마법사에서 다른 PC용 설치 미디어 만들기(USB 플래시 드라이브, DVD 또는 ISO 파일)를 선택합니다.
- 생성할 Windows 10 이미지의 언어, 에디션, 아키텍처를 지정합니다.
- ISO 파일 항목을 선택하고 저장할 파일 이름을 입력합니다.
- 미디어 생성 도구가 Windows 10 설치 이미지를 로컬 드라이브에 내려받을 때까지 기다립니다.
다운로드가 완료되면 ISO 이미지의 내용물을 파일 서버의 공유 폴더에 압축 해제해 둡니다.
업그레이드 전 Windows 10 호환성 검사 수행하기
컴퓨터의 OS를 업그레이드하기 전에, 현재 Windows 10이 새 ISO 이미지에 담긴 빌드로 업그레이드 가능한지 미리 확인할 수 있습니다. 다음 명령을 실행하세요.
start /wait setup.exe /Auto Upgrade /Quiet /NoReboot /DynamicUpdate Disable /Compat ScanOnly
각 매개변수의 의미는 다음과 같습니다.
- /Auto Upgrade – 자동 업그레이드 모드
- /Quiet – 업그레이드 마법사 대화상자 숨김
- /NoReboot – 검사 후 컴퓨터 재시작 방지
- /DynamicUpdate Disable — Windows Update를 통한 최신 업데이트 추가 다운로드 생략 (필요시 나중에 wuauserv 서비스로 자동 또는 수동 설치 가능)
- /Compat ScanOnly – 빌드 업그레이드를 수행하지 않고 호환성 검사만 실행
새 Windows 10 빌드와의 호환성 검사에는 어느 정도 시간이 소요됩니다.
검사 진행 상황은 C:\$Windows.~BT\Sources\Panther\setupact.log 파일에서 추적할 수 있습니다. 검사가 완료되면 로그 마지막에 다음과 같은 줄이 표시됩니다.
Info MOUPG **************** SetupHost Logging End ****************
호환성 분석 결과는 C:\$Windows.~BT\Sources\Panther\setuperr.log에서 확인할 수 있습니다. 로그 끝부분에서 다음 형식의 마지막 줄을 찾으세요.
CSetupHost::Execute(xxx): Result = xxxxxxxx
이 값이 곧 검사 결과 코드입니다.
명령 프롬프트에서도 업그레이드 호환성 검사의 오류 코드를 바로 확인할 수 있습니다.
echo %errorlevel%
반환된 결과 코드는 16진수로 변환해서 해석해야 합니다. 예를 들어 setup.exe 명령이 -1047526896을 반환했다면, 이 10진수 값을 계산기의 프로그래머 모드에 붙여넣습니다. Hex 영역의 값을 복사한 뒤 앞에 붙은 F들을 모두 제거하고 0x를 붙이면 됩니다. 필자의 경우 0xC1900210이라는 코드를 얻었습니다.
대표적인 Windows 10 호환성 검사 오류 코드는 다음과 같습니다.
- 0xC1900210 – 문제 없음, 업그레이드 가능
- 0xC1900208 – 호환성 문제 발견
- 0xC1900204 및 0xC190010E – 자동 빌드 업그레이드 불가(잘못된 Windows 에디션 또는 아키텍처)
- 0xC1900200 – 컴퓨터가 Windows 10 최소 하드웨어 요구 사항 미충족
- 0xC190020E – 디스크 공간 부족
- 0xC1420127 – WIM 이미지 파일 언마운트 중 문제 발생
업그레이드가 막힌 정확한 원인이 궁금하다면 Microsoft의 setupdiag.exe 도구를 활용하면 좋습니다. 이 도구는 설치 로그를 자동으로 분석해 실패 원인을 보고서로 정리해 줍니다.
필자의 경우 setuperr.log에 다음과 같은 오류가 기록되어 있었습니다.
Error MOUPG CSetupHost::Execute(412): Result = 0xC1900208[gle=0x00000003]
SetupDiag가 생성한 SetupDiagResults.log를 확인해 보니, 이 컴퓨터의 Windows 10 빌드 업그레이드를 막고 있는 원인이 두 가지로 나타났습니다.
- CompatBlockedApplicationAutoUninstall — 호환되지 않는 앱이 발견되어 업그레이드 전에 제거해야 함
- FindAbruptDownlevelFailure — 로그 기록 중 오류 정보가 갑자기 중단됨
Matching Profile found: CompatBlockedApplicationAutoUninstall, FindAbruptDownlevelFailure - BEBA5BC6-6150-413E-8ACE-5E1EC8D34DD5, 55882B1A-DA3E-408A-9076-23B22A0472BD SetupDiag version: 1.6.0.0
최종적으로는 업그레이드를 계속 진행하기 전에 McAfee 백신 프로그램을 제거하라는 권장 메시지가 표시되었습니다.
You must uninstall "McAfee VirusScan Enterprise" before continuing with the installation/update.
SCCM 환경이라면 간단한 패키지와 배포(advertisement)로 setup.exe /Compat ScanOnly 명령을 실행하고, 반환되는 오류 레벨 값을 사용자 컴퓨터들로부터 중앙에서 일괄 수집할 수 있습니다. 이를 통해 업그레이드 대상과 제외 대상을 사전에 분류할 수 있습니다.
명령 프롬프트에서 Windows 10 인플레이스 업그레이드 자동화하기
호환성 검사에서 업그레이드를 막는 문제가 발견되지 않았다면, 간단한 명령줄 스크립트만으로 업그레이드를 진행할 수 있습니다. 압축 해제한 Windows 10 ISO 이미지가 있는 공유 네트워크 폴더에 다음 내용으로 run_win10_upgrade.bat 배치 파일을 생성합니다.
start /wait .\W102004\Windows10x64-2004\setup.exe /auto upgrade /DynamicUpdate disable /showoobe None /Telemetry Disable
/Auto:Upgrade 모드는 업그레이드 후 모든 애플리케이션과 사용자 데이터를 그대로 유지합니다. 사용자 데이터만 유지하고 앱은 초기화하고 싶다면 /auto:data 모드를 사용하면 됩니다.
/migratedrivers all 매개변수는 모든 드라이버를 강제로 마이그레이션할 때 사용합니다. 이 매개변수를 지정하지 않으면 설치 프로그램이 드라이버마다 개별적으로 이식 여부를 판단합니다.
이 외에도 Windows 10 업그레이드 시 다양한 setup.exe 옵션을 상황에 맞게 조합해 사용할 수 있습니다.
참고로 Windows 10 1607부터는 설치 매개변수를 Setupconfig.ini 파일로 대체할 수 있습니다. 이 파일은 setup.exe와 같은 폴더에 위치해야 하며, 위 명령과 동일한 설정을 담으려면 다음과 같이 작성합니다.
[SetupConfig] NoReboot ShowOobe=None Telemetry=Disable DynamicUpdate=Disable
매개변수 파일을 사용해 Windows 10 업그레이드를 실행하려면 다음 명령을 사용합니다.
Setup.exe /ConfigFile setupconfig.ini
이처럼 setup.exe의 명령줄 스위치를 잘 활용하면 수십, 수백 대의 PC에 대한 Windows 10 빌드 업그레이드를 SCCM이나 스크립트 기반으로 안정적으로 자동화할 수 있습니다.