728x90

윈도우 11을 처음 접하면서 테스트 삼아 하이퍼-V에 윈도우 11 설치 후 감사모드로 진입하여 일반화를 진행해 보았습니다. 무인화 파일도 사용하지 않았고 그냥 아주 깨끗하게 레퍼런스한 상태에서 진행한 일반화라 안될것이라는 생각 자체를 안하고 진행을 했던 터라 어떻게 해야 할지 난감한 상황 이었습니다.

원인 파악

감사모드를 실패하면 로그가 기록 됩니다. 

C:\Windows\System32\Sysprep\Panther\setuperr.txt

파일을 열어보면 여러 에러가 기록되어 있는데요, 이것을 다 분석하자면 시간이 오래 걸릴 것이고, 더욱 중요한건 저도 모릅니다. 그래서 필요한 단서만 찾으면 되지요. 단서는 곧 문제되는 프로그램이니 곧 지워야 될 프로그램이라고 생각하면 됩니다. 여러 에러가 있었지만 그중에 하나 주목해야 할 부분이 눈에 띄었습니다.

setuperr.txt 에러 로그 화면

SoptifyAB.SpotifyMusic 패키지 입니다. 일반화를 진행하는데 해당 앱으로 인해 감사모드 진행이 멈춘 것입니다. 여기서 집고 넘어갈 점은 감사모드 상태에서 윈도우가 온라인에 연결 되어 있고 MS Store에 접근하는데 아무런 제한이 없다고 한다면 설치 되었거나 설치 될 앱들이 자동으로 설치를 시작합니다. 

Spotify 앱은 정확하게 말하면 설치는 되어 있지 않고 아이콘 상태로 존재하는 앱 이였지만 감사모드를 띄어두고 블로그에 글작성을 하다보니 시간이 지나면서 여러 앱들이 들어왔는데 그중에 Spotify가 문제된 것입니다. 

오프라인 상태로 작업했으면 문제가 없었겠지요.

조치

문제가 발생된 앱을 지우면 됩니다. 지금의 경우는 Spotify 앱으로 확인 되었으니 지워주고 다시 일반화 진행하면 됩니다.

결과

스토어 앱이라 설정-앱 에서 삭제를 진행했습니다. 다시 일반화를 진행해 보니 작동 되네요

일반화 진행 시 나타나는 문제점은 여러가지가 있으니 파악 해보면 됩니다. 좀전에 삭제 하면서 보니 MS One Drive 설치도 오늘 날짜로 진행 되었습니다. 이것은 일반화 하는데 문제가 되지 않았으나 이처럼 온라인 상태에서는 나도 모르게 들어오는 것들로 인해 문제가 발생 될 수 있으니 깨끗한 상태에서 윈도우 이미지를 제작하고 싶다면 오프라인으로 진행하는것도 좋은 방법이라 생각됩니다. 

728x90
728x90

https://moonth.tistory.com/397

 

Windows 10, 11 Sysprep 일반화 진입

Sysprep을 진행하는 감사모드로 진입하려면 아래 방법을 따라야 합니다. 윈도우를 설치하고 최초 부팅이 시작되면 첫번째 화면으로 국가를 선택하는 창이 나오는데 여기서 "Ctrl+Shift+F3"을 누릅니

moonth.tistory.com

지난번 일반화 진입하기에 이어 일반화 완료 하기입니다.

일반화를 완료하는 방법은 두가지가 있다 할 수 있겠습니다.

  • sysprep.exe UI로 일반화 하는 방법 : 프로그램과 드라이버를 추가하고 바탕화면 구성을 변경하거나 필요한 파일을 집어넣거나 하는 방법만 사용했다면 sysprep.exe UI가 실행된 상태에서 일반화 버튼을 눌러 일반화를 하면 됩니다.

  • 무인화 파일(unattend.xml) 파일을 이용하여 일반화 하는 방법 : 아래와 같은 cmd를 입력하여 무인화 파일을 일반화 시 등록할 수 있습니다. 이 무인화 파일에 들어간 여러 설정으로 사용자는 여러 설치 단계들을 미리 설정된 파일 정보로 건너뛸수 있습니다.
    예) c:\windows\System32\Sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:C:\unattend.xml

프로그램을 설치하고 무인화 파일도 등록한다면 cmd를 이용한 방식을 따라야합니다. UI로는 무인화 파일을 등록할 수 없기 때문에 프로그램 추가/삭제, 드라이버 추가/삭제, 기타 파일 추가/삭제 등의 작업만 진행 할 수 있습니다.

이제부터 아래 설명할 내용들은 감사모드에서 적용할 수 있는 몇가지 예시 입니다. 무인화 설치에 관해서는 Windows AIK(Automated Installation Kit)의 내용을 살펴보아야합니다. AIK 툴을 설치하고 xml로 이루어진 무인화 파일을 제작해야합니다. 제작 예시는 별도로 다루겠습니다.

프로그램 삭제

아래 표에 작성한 명령어를 파워쉘에 입력하면 프로그램을 지웁니다. 필요하지 않는 프로그램만 메모장에 복사하여 "ps1" 확장자로 저장 후 한번에 실행할 수 있습니다. 

#AV1 Codec
Get-AppxPackage *AV1VideoExtension* | Remove-AppxPackage

#News app
Get-AppxPackage *BingNews* | Remove-AppxPackage

#Weather
Get-AppxPackage *BingWeather* | Remove-AppxPackage

#PowerShell
Get-AppxPackage *PowerShell* | Remove-AppxPackage

#WebP image support
Get-AppxPackage *WebpImageExtension* | Remove-AppxPackage

#HEIF image support
Get-AppxPackage *HEIFImageExtension* | Remove-AppxPackage

#Windows Terminal
Get-AppxPackage *WindowsTerminal* | Remove-AppxPackage

#Music app
Get-AppxPackage *ZuneMusic* | Remove-AppxPackage

#Movies and TV
Get-AppxPackage *ZuneVideo* | Remove-AppxPackage

#MS Office
Get-AppxPackage *MicrosoftOfficeHub* | Remove-AppxPackage

#People app
Get-AppxPackage *People* | Remove-AppxPackage

#Maps
Get-AppxPackage *WindowsMaps* | Remove-AppxPackage

#Help and tips
Get-AppxPackage *GetHelp* | Remove-AppxPackage

#Voice Recorder
Get-AppxPackage *WindowsSoundRecorder* | Remove-AppxPackage

#Notepad
Get-AppxPackage *WindowsNotepad* | Remove-AppxPackage

#MS Paint
Get-AppxPackage *Paint* | Remove-AppxPackage

#Sticky Notes
Get-AppxPackage *MicrosoftStickyNotes* | Remove-AppxPackage

#PowerAutomate
Get-AppxPackage *PowerAutomateDesktop* | Remove-AppxPackage

#Xbox and related apps
Get-AppxPackage *Xbox* | Remove-AppxPackage

#Feedback Hub
Get-AppxPackage *WindowsFeedbackHub* | Remove-AppxPackage

#Microsoft To-Do
Get-AppxPackage *Todos* | Remove-AppxPackage

#Calculator
Get-AppxPackage *WindowsCalculator* | Remove-AppxPackage

#Alarms and Clocks
Get-AppxPackage *WindowsAlarms* | Remove-AppxPackage

#Teams/Chat
Get-AppxPackage *Teams* | Remove-AppxPackage

#Microsoft Edge
Get-AppxPackage *MicrosoftEdge* | Remove-AppxPackage

#Your Phone
Get-AppxPackage *YourPhone* | Remove-AppxPackage

#Spotify
Get-AppxPackage *SpotifyAB.SpotifyMusic* | Remove-AppxPackage

#Screen & Sketch/Snipping tool
Get-AppxPackage *ScreenSketch* | Remove-AppxPackage

#Solitaire Collection
Get-AppxPackage *MicrosoftSolitaireCollection* | Remove-AppxPackage

#Photos
Get-AppxPackage *Windows.Photos* | Remove-AppxPackage

#OneDrive
Get-AppxPackage *OneDriveSync* | Remove-AppxPackage

#Skype
Get-AppxPackage *SkypeApp* | Remove-AppxPackage

#Xbox Console Companion
Get-AppxPackage *GamingApp* | Remove-AppxPackage

프로그램 추가

MS 오피스나 한글, 어도비 프리미어 및 포토샵등의 프로그램들은 별다른 제한없이 설치 가능하나 그 갯수가 많아지면 시스템 변경점이 발생되어 일반화가 실패할 가능성이 있습니다. appx 등의 확장자를 가진 MS app 을 설치한다면 명령어를 이용하고 설치하되 모든 유저에게 적용되도록 설치합니다. 아래의 명령 예시를 참고 하세요

Add-AppxPackage -Path "C:\path\to\appxfile.appx" -AllUsers

MS 앱에 경우 현재 사용중인 사용자에게만 권한을 적용하기 때문에 Allusers 옵션을 넣어서 설치하지 않는다면 일반화 이후 새로 생성되는 계정이 일반화 단계에서 미리 설치한 MS apps를 권한 문제로 실행하지 못하는 문제가 발생될 수 있습니다. 또한 MS apps 의 오프라인 설치 파일의 경우 라이선스 xml 파일도 있어야 합니다. (이는 폐쇠적인 기업환경에 필요할 수 있습니다.) 폐쇠적인 기업환경이 아니라면(MS store가 차단되어있지 않다면) 이러한 프로그램 추가 문제를 깊이 신경쓰지 않아도 됩니다.

드라이버 추가

모아둔 시스템 드라이버가 있다면 아래 명령어로 현재 윈도우에 추가가 가능합니다. 단 드라이버는 실행파일이나 압축 형식으로 되어있으면 안됩니다. 아래 명령어를 보시면 .inf 파일을 검색하여 등록하는 것입니다. easy 드라이버팩이나 nvidia driver 실행파일의 경우 등록이 되지 않습니다.

Get-ChildItem "D:\Drivers\" -Recurse -Filter "*.inf" | ForEach-Object {PNPUtil.exe /add-driver $_.FullName /install}

드라이버 등록 후 용량이 과도하게 늘어날 수 있다는걸 기업하십시오. 예를 들어 800Mb짜리 Nvidia 드라이버를 위 명령어로 시스템에 추가한다면 4~5Gb 정도의 용량을 차지하게 될 것입니다. 이는 "inf" 파일이 가리키는 모든 드라이버를 시스템에 가지고 오기 때문입니다. nvidia 는 드라이버 제작시 여러개의 inf 파일을 만들었고 파일을 중복으로 가져가게 설계 해두었습니다. 지금 확인을 해보았는데 약 60개의 inf 파일이 검색 되었고 이중에 그래픽을 담당하는 inf 파일은 하나지만 위 명령어를 사용하면 60여개를 모두 가져와 불필요한 용량을 늘리게 되는 것입니다. 이에 주의 하시길 바랍니다. 인텔 내장 그래픽 드라이버도 마찬가지 입니다.

불필요 드라이버 정리

드라이버 정리를 하기 전에 현재 드라이버 상태를 백업합니다. 현재 컴퓨터의 상태를 포함하여 드라이버를 제거하기 전에 체크포인트를 생성하는 PowerShell 명령을 사용할 것입니다.

Checkpoint-Computer -Description “CheckpointDeleteDrivers”

드라이버에 문제가 발생하여 복구 해야 한다면 아래 명령을 사용합니다.

Restore-Computer -CheckpointName “CheckpointDeleteDrivers”

드라이버 백업 후 드라이버 정리를 수행합니다. 감사모드 상태에서는 드라이버 정리를 편하게 UI로 실행 할 수 있습니다. "디스크 정리" 앱을 사용합니다. 감사모드 상태에서만 등장하는 "장치 드라이버 패키지" 정리 기능을 사용하여 중복된 드라이버를 제거하고 최신 드라이버만 유지합니다.

장치 드라이버를 정리하면서 임시파일, 휴지통 등 불필요한 파일을 모두 선택하여 지워주면 용량 확보에 추가적인 도움이 됩니다.

좀더 어려운 방법이 있습니다. 파워쉘 명령어를 사용하지만 감사모드가 아닌 상태에서도 이용할 수 있습니다. 아래 코드를 메모장에 복사하여 파워쉘 스크립트 (ps1) 로 저장후 실행합니다.

$dismOut = dism /online /get-drivers
$Lines = $dismOut | select -Skip 10
$Operation = "theName"
$Drivers = @()
foreach ( $Line in $Lines ) {
    $tmp = $Line
    $txt = $($tmp.Split( ':' ))[1]
    switch ($Operation) {
        'theName' { $Name = $txt
                     $Operation = 'theFileName'
                     break
                   }
        'theFileName' { $FileName = $txt.Trim()
                         $Operation = 'theEntr'
                         break
                       }
        'theEntr' { $Entr = $txt.Trim()
                     $Operation = 'theClassName'
                     break
                   }
        'theClassName' { $ClassName = $txt.Trim()
                          $Operation = 'theVendor'
                          break
                        }
        'theVendor' { $Vendor = $txt.Trim()
                       $Operation = 'theDate'
                       break
                     }
        'theDate' { # change the date format for easy sorting
                     $tmp = $txt.split( '.' )
                     $txt = "$($tmp[2]).$($tmp[1]).$($tmp[0].Trim())"
                     $Date = $txt
                     $Operation = 'theVersion'
                     break
                   }
        'theVersion' { $Version = $txt.Trim()
                        $Operation = 'theNull'
                        $params = [ordered]@{ 'FileName' = $FileName
                                              'Vendor' = $Vendor
                                              'Date' = $Date
                                              'Name' = $Name
                                              'ClassName' = $ClassName
                                              'Version' = $Version
                                              'Entr' = $Entr
                                            }
                        $obj = New-Object -TypeName PSObject -Property $params
                        $Drivers += $obj
                        break
                      }
         'theNull' { $Operation = 'theName'
                      break
                     }
    }
}
Write-Host "All installed third-party  drivers"
$Drivers | sort Filename | ft
Write-Host "Different versions"
$last = ''
$NotUnique = @()
foreach ( $Dr in $($Drivers | sort Filename) ) {   
    if ($Dr.FileName -eq $last  ) {  $NotUnique += $Dr  }
    $last = $Dr.FileName
}
$NotUnique | sort FileName | ft
Write-Host "Outdated drivers"
$list = $NotUnique | select -ExpandProperty FileName -Unique
$ToDel = @()
foreach ( $Dr in $list ) {
    Write-Host "duplicate found" -ForegroundColor Yellow
    $sel = $Drivers | where { $_.FileName -eq $Dr } | sort date -Descending | select -Skip 1
    $sel | ft
    $ToDel += $sel
}
Write-Host "Drivers to remove" -ForegroundColor Red
$ToDel | ft
# removing old drivers
foreach ( $item in $ToDel ) {
    $Name = $($item.Name).Trim()
    Write-Host "deleting $Name" -ForegroundColor Yellow
    Write-Host "pnputil.exe -d $Name" -ForegroundColor Yellow
    Invoke-Expression -Command "pnputil.exe -d $Name"
}

이 PowerShell 스크립트는 현재 설치된 서드파티 드라이버를 가져와서, 중복 및 오래된 드라이버를 찾고 삭제하는 기능을 수행합니다.

스크립트에서는 dism 명령어를 사용하여 현재 설치된 드라이버 목록을 가져오고, 이를 select 명령어를 사용하여 필요한 부분만 추출합니다. 그리고 foreach 루프를 사용하여 드라이버 목록을 처리하며, 각 드라이버의 파일명, 버전, 업체명, 설치 날짜 등의 정보를 추출합니다.

그 다음 중복된 드라이버를 찾고 삭제하기 위해, foreach 루프와 where 조건절을 사용하여 중복된 드라이버를 필터링하고, pnputil.exe를 사용하여 드라이버를 삭제합니다.

무인화 파일 없이 진행할 수 있는 프로그램 설치/제거, 드라이버 설치/제거 등을 알아보았습니다. 파일 복사를 하고싶으면 그냥 두고싶은데 두면 되며 사용자 바탕화면에 두고 싶다면 "C:\Users\Default\desktop" 경로를 사용해야합니다. 새로 생성한 계정은 디폴트 값을 복사하여 계정을 생성하기 때문입니다. 

마무리 되었으면 제일 위에서 설명한 방법으로 일반화를 끝내면 되겠습니다. 일반화를 끝내면 이것을 이미지화 시켜 윈도우 인스톨러로 활용하거나 ghost, winclon, aomei 등등 백업/복구 프로그램으로 백업하여 유지보수 용으로도 활용할 수 있습니다.

728x90
728x90

Sysprep을 진행하는 감사모드로 진입하려면 아래 방법을 따라야 합니다.

윈도우를 설치하고 최초 부팅이 시작되면 첫번째 화면으로 국가를 선택하는 창이 나오는데 여기서 "Ctrl+Shift+F3"을 누릅니다. 

곧바로 재부팅 되며 재부팅 시 진입하는 윈도우 상태는 Sysprep를 적용 할 수 있는 감사모드 상태가됩니다.

Sysprep란?

Windows System Preparation Tool (SysPrep)을 사용하여 사용자가 커스텀한 Windows 10 또는 11 이미지를 만들 수 있습니다. Windows 설치 이미지에 앱, 드라이버 및 업데이트를 설치할 수 있습니다. 그 후 참조 Windows 이미지를 회사 내 사용자 컴퓨터에 배포할 수 있습니다.

SysPrep 유틸리티를 사용하여 Windows 이미지를 일반화할 수 있습니다. 이로 인해 컴퓨터별 정보(SID, GUID 등)를 삭제하여 일반화하게 됩니다.

Sysprep.exe 유틸리티는 C:\Windows\System32\sysprep 폴더에 위치합니다.

Sysprep의 장점

사용자 컴퓨터에 빠르게 작업 환경을 배포할 수 있는 맞춤형 Windows 10/11 이미지를 만들 수 있습니다. 드라이버, 프로그램 또는 보안 업데이트를 설치할 필요가 없으며 각 컴퓨터에서 사용자 정의 Windows 설정을 구성할 필요도 없습니다.
응답 파일 (unattended.xml)을 사용하여 Windows 이미지를 배포할 수 있습니다. 설치 후 초기 Windows 설치 화면에서 다양한 옵션을 선택할 필요가 없습니다.
언제든지 이미지를 추출하여 변경하고 배포 도구로 업데이트할 수 있습니다.

Sysprep의 단점

Windows 참조 이미지의 크기는 깨끗한 Windows 10 또는 11 설치 ISO 이미지보다 크게 될 수 있습니다.
정기적으로 참조 이미지에 삽입된 프로그램 및 드라이버의 버전을 업데이트하고 최신 보안 업데이트를 설치해야 합니다.
Sysprep 도구를 도메인에 가입한 컴퓨터에서 사용할 수 없습니다. Sysprep은 컴퓨터를 AD 도메인에서 제거합니다.
한 개의 Windows 이미지에서 Sysprep을 최대 1001회까지 실행할 수 있습니다. 이 제한에 도달한 후에는 Windows 이미지를 다시 만들어야 합니다. 하지만 이런 단점은 크게 영향을 미치지 않습니다. 

https://moonth.tistory.com/398

 

Windows 10, 11 Sysprep 일반화 완료 하기

https://moonth.tistory.com/397 Windows 10, 11 Sysprep 일반화 진입 Sysprep을 진행하는 감사모드로 진입하려면 아래 방법을 따라야 합니다. 윈도우를 설치하고 최초 부팅이 시작되면 첫번째 화면으로 국가를

moonth.tistory.com

 

728x90
728x90

Windows 10, 11 에서 (8 이상에서 가능하다고 합니다) VMWare같은 가상 머신을 설치 할 수 있습니다. 그것은 바로 Hyper-V. Hyper-V를 사용하는 이유는 가상머신이 저장되는 파일 형식이 VHD 이기 때문입니다. VHD를 디스크 관리자에서 마운트 하여 내부 파일을 수정할 수 있기도 하고 DISM 명령을 이용하여 특정 폴더에 마운트 하며 오프라인 윈도우 상태에서 여러가지 기능을 추가 하거나 제거할 수 있기도 합니다. 결국엔 내가 커스텀 한 윈도우 이미지 제작도 가능합니다.

Hyper-V를 설치하려면 "윈도우 기능 켜기/끄기"에 접근합니다.

  1. 먼저, "제어판"을 엽니다. 시작 메뉴에서 "제어판"을 검색하거나, Windows + R 키를 눌러 "실행" 대화 상자에서 "control"을 입력하고 엔터 키를 눌러 실행할 수 있습니다.
  2. "제어판" 창에서 "프로그램" 항목을 선택합니다.
  3. "프로그램 및 기능" 항목을 선택합니다.
  4. "Windows 기능 켜기/끄기" 링크를 선택합니다.
  5. 목록에 "Hyper-V에 체크합니다.
  6. 선택이 완료되면, "확인" 버튼을 클릭합니다.
  7. 시스템을 다시 시작합니다.

하이퍼-V를 사용할 수 있는 운영체제는 다음과 같습니다.

Windows 10 Pro, Enterprise 및 Education
Windows 8 Pro 및 Enterprise
Windows 8.1 Pro 및 Enterprise
Windows Server 2008 Standard, Enterprise 및 Datacenter
Windows Server 2008 R2 Standard, Enterprise, Datacenter 및 Web
Windows Server 2012 및 2012 R2 Standard, Datacenter 및 Essentials
Windows Server 2016 및 2019 Standard, Datacenter 및 Essentials

가정용으로 설치되는 홈버전의 경우 Hyper-V를 사용할 수 없겠네요

728x90

+ Recent posts