다음을 통해 공유


IoT Enterprise 설치 미디어 새로 고침

이 문서에서는 미디어 새로 고침 환경을 설정하고 WinPE 환경과 기본 운영 체제를 모두 업데이트하고 드라이버를 설치하는 데 필요한 모든 필수 구성 요소를 수집합니다.

미디어 서비스 환경 준비

  1. 관리자 권한으로 PowerShell을 시작합니다.
    설치 미디어를 서비스하는 종단 간 프로세스에 이 PowerShell 인스턴스를 사용하여 업데이트를 적용하고 필요한 경우 Windows 설치 미디어의 일부가 아닌 필수 드라이버를 통합합니다.

    • 시작을 선택합니다.
    • PowerShell 유형
    • Windows PowerShell을 마우스 오른쪽 단추로 클릭
    • 관리자 권한으로 실행 선택
  2. 미디어 서비스 중에 파일을 저장할 폴더 만들기
    PowerShell 명령 New_Item 사용하여 기술자 PC에 다음 폴더를 만들어 미디어 서비스 중에 필요한 파일을 저장합니다.

    c:\MediaRefresh: 미디어 서비스 중에 파일을 저장하기 위한 부모 폴더입니다.
    c:\MediaRefresh\Out: 서비스 중에 업데이트된 원본 미디어의 복사본입니다.
    c:\MediaRefresh\Packages\LCU: 최신 누적 업데이트 c:\MediaRefresh\Packages\SSU: 필요한 경우 스택 업데이트 서비스
    c:\MediaRefresh\Drivers: 타사 드라이버.
    c:\MediaRefresh\Scripts: 사용자 지정 설치 스크립트입니다. c:\MediaRefresh\WIM: boot.wim 및 install.wim을 업데이트하기 위한 작업 디렉터리

    md c:\MediaRefresh\Drivers
    md c:\MediaRefresh\Out
    md c:\MediaRefresh\Packages\LCU
    md c:\MediaRefresh\Packages\SSU
    md c:\MediaRefresh\Scripts
    md c:\MediaRefresh\WIM
    
  3. 원본 미디어에서 파일 복사
    원래 설치 미디어의 모든 파일을 .에 복사합니다 c:\MediaRefresh\Out.

    1. 물리적 미디어가 있는 경우 단계를 b. 계속합니다. 그렇지 않으면 먼저 Mount-DiskImage를 사용하여 Windows IoT Enterprise 설치 ISO를 탑재하고 Get-Volume을 사용하여 탑재된 드라이브 문자를 표시해야 합니다.

      Mount-DiskImage -ImagePath <ISO Path> | Get-Volume
      

      ISO에 대한 정규화된 경로는 어디에 <ISO Path> 있나요?

      다음 단계에서 사용해야 하므로 DriveLetter를 기록해 둡다.

    2. Robocopy를 사용하여 여기에 <DriveLetter> 표시된 원래 설치 미디어의 파일을 폴더로 c:\MediaRefresh\Out 복사합니다.

      robocopy <DriveLetter>:\ c:\MediaRefresh\Out /Copy:DT /e
      

      탑재된 ISO 파일과 연결된 드라이브 문자는 어디에 <DriveLetter> 있음

    3. Robocopy를 사용하여 WIM 파일을 업데이트하기 c:\MediaRefresh\WIM 위한 작업 폴더인 boot.wim 및 install.wim c:\MediaRefresh\Out\Sources 을 폴더로 이동합니다.

      robocopy c:\mediarefresh\out\sources c:\MediaRefresh\WIM *.wim /Mov
      
    4. 이전 명령에 대해 ISO를 탑재하지 않은 경우 다음 단계로 진행합니다. 그렇지 않으면 먼저 Dismount-Diskimage를 사용하여 Windows IoT Enterprise 설치 ISO를 분리해야 합니다.

      Dismount-DiskImage -ImagePath <ISO Path>  
      

      ISO 파일의 정규화된 경로는 어디에 <ISO Path> 있나요?

  4. 서비스 패키지 수집

    최신 누적 MSU(Microsoft 서비스 업데이트) 파일을 폴더에 다운로드합니다 c:\MediaRefresh\Packages\LCU .

    MSU(서비스 스택 업데이트) 종속성이 필요한 경우 폴더에 c:\MediaRefresh\Packages\SSU 다운로드합니다. 다음 표를 사용하여 특정 버전의 Windows IoT Enterprise에 대한 업데이트를 찾을 수 있습니다.

    해제 버전 업데이트 기록 카탈로그 업데이트
    Windows 11 IoT Enterprise LTSC 2024 [24H2] 26100 업데이트 기록 표시 x64 업데이트
    표시 Arm64 업데이트 표시
    Windows 10 IoT Enterprise LTSC 2021 19044 업데이트 기록 표시 x64 업데이트
    표시 ARM64 업데이트 표시
    Windows 10 IoT Enterprise LTSC 2019 17763 업데이트 기록 표시 x64 업데이트
    표시 ARM64 업데이트 표시
    Windows 10 IoT Enterprise LTSC 2016 14393 업데이트 기록 표시 x64 업데이트
    표시 x86 업데이트 표시
    Windows 10 IoT Enterprise LTSC 2015 10240 업데이트 기록 표시 x64 업데이트
    표시 x86 업데이트 표시
  5. [선택 사항] 타사 드라이버 수집
    디바이스에 필요한 타사 드라이버를 압축되지 않은 형식으로 폴더의 c:/MediaRefresh/drivers 루트 또는 하위 폴더로 배치합니다 c:/MediaRefresh/drivers.

  6. [선택 사항] 구성 스크립트 수집
    Setupcomplete.cmd ErrorHandler.cmd Windows 설치 프로세스 도중 또는 이후에 실행되는 사용자 지정 스크립트를 폴더에 c:\MediaRefresh\Scripts 배치합니다.

    자세한 내용은 Windows 설치에 사용자 지정 스크립트 추가를 참조 하세요.

WinPE(Windows 사전 설치 환경) 업데이트

WinPE(Windows 사전 설치 환경)는 폴더 아래의 원래 설치 미디어에 포함되어 boot.wim 있습니다 \sources . 이 섹션에서는 최신 누적 서비스 업데이트로 업데이트 boot.wim 하는 프로세스를 안내하고 미디어 서비스 환경을 사용하여 필요한 경우 타사 드라이버를 WinPE 환경에 통합합니다.

  1. WinPE boot.wim 탑재

    1. WinPE 환경을 업데이트하는 첫 번째 단계는 PowerShell 명령 New-Item을 사용하여 명명된 c:\mediarefresh mounted 임시 폴더를 만드는 것입니다.

      MD c:\MediaRefresh\mounted
      
    2. 업데이트 boot.wim하려면 파일 특성이 ReadOnly로 설정되지 않았는지 확인해야 합니다. PowerShell 명령 Set-ItemProperty를 사용하여 ReadOnly 특성을 제거합니다.

      Set-ItemProperty -Path "c:\mediarefresh\wim\boot.wim" -Name IsReadOnly -Value $false
      
    3. 이제 PowerShell 명령 Mount-WindowsImage를 사용하여 인덱스 2에 boot.wim 저장된 WinPE 이미지를 탑재할 수 있습니다.

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. 이제 인덱스 2에 boot.wim 저장된 WinPE 이미지의 내용을 에서 c:\mediarefresh\mounted볼 수 있습니다.

  2. WinPE에 타사 드라이버 적용
    PowerShell 명령 Add-WindowsDriver를 사용하여 폴더에 c:\mediarefresh\drivers 수집한 타사 드라이버를 WinPE에 c:\mediarefresh\mounted 설치합니다.

    참고 항목

    테스트를 위해 서명되지 않은 드라이버를 추가하고 드라이버에 디지털 서명이 있어야 한다는 요구 사항을 재정의하는 데 사용할 -ForceUnsigned 수 있습니다. 드라이버 서명 요구 사항에 대한 자세한 내용은 디바이스 드라이버 및 배포 개요를 참조하세요.

    Add-WindowsDriver -Path "c:\mediarefresh\Mounted" -Driver "c:\mediarefresh\drivers" -Recurse
    
  3. WinPE에 서비스 업데이트 적용
    PowerShell 명령 Add-WindowsPackage를 사용하여 폴더에 c:\mediarefresh\packages 다운로드한 최신 누적 업데이트 및 해당 종속성을 WinPE에 c:\mediarefresh\mounted 적용합니다. 이 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있지만 Windows 이미지에 이미 최신 서비스 업데이트가 적용되어 있는지 확인합니다.

    1. 먼저 서비스 스택 업데이트 종속성을 적용합니다.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
      
    2. 이제 최신 누적 업데이트를 적용합니다.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU"
      

    오류 0x800f0823 발생하는 경우 서비스 업데이트에 먼저 적용해야 하는 종속성이 있을 수 있습니다. 해당 종속성을 이미 다운로드한 경우 위의 명령을 두 번째로 실행해 보세요. 이 문제가 해결되지 않으면 업데이트에 대한 추가 필수 구성 요소를 다운로드해야 할 수 있습니다.

    • c:\mediarefresh\packages의 업데이트 파일 이름에 KB####### 기록해 둡니다.
    • KB를 사용하여 support.microsoft.com 검색 #######
    • 일치하는 첫 번째 항목을 열고 "필수 구성 요소"라는 용어를 검색합니다.
    • 언급된 필수 구성 요소를 다운로드하고 위의 명령을 다시 실행합니다. 필수 구성 요소가 먼저 적용되도록 하려면 명령을 두 번 실행해야 할 수 있습니다.
    • 오류가 해결되면 다음 단계로 계속 진행합니다.
  4. 업데이트된 복사 Setup.exe
    계속하기 전에 업데이트된 데이터를 setup.exe WinPE에서 c:\mediarefresh\mounted\sources Robocopy 사용으로 c:\mediarefresh\out\sources 복사합니다.

    1. 먼저 PowerShell 명령 Set-ItemProperty를 사용할 때 ReadOnly 특성을 c:\mediarefresh\mounted\sources\setup.exe 제거해야 합니다.

      Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false
      
    2. 이제 Robocopy를 사용하여 복사 setup.exe c:\mediarefresh\mounted\sourcesc:\mediarefresh\out\sources 수 있습니다.

      robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe
      
  5. WinPE에 변경 내용 분리 및 저장

    서비스 프로세스를 완료하려면 PowerShell 명령 Dismount-WindowsImage 를 사용하여 변경 내용을 저장합니다.

    Important

    명령을 실행 Dismount-WindowsImage 하기 전에 아래 내용을 보고 있는 파일 탐색기 보기 또는 명령 창이 없는지 확인합니다c:\mediarefresh\mounted. 이렇게 하지 않으면 분리를 시도할 때 오류가 발생합니다.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. 임시 폴더 삭제

    boot.wim을 성공적으로 분리하면 이제 PowerShell 명령 Remove-Item을 사용하여 임시 폴더 c:\mediarefresh\mounted 를 제거할 수 있습니다.

    RD c:\MediaRefresh\mounted
    
  7. 폴더에 out 게시 Boot.wim

    이제 Robocopy를 사용하여 업데이트 boot.wim 된 파일을 복사합니다c:\mediarefresh\out\sources.c:\mediarefresh\wim

    robocopy c:\mediarefresh\wim c:\mediarefresh\out\sources boot.wim
    

아래에 있는 boot.wim setup.exe c:\mediarefresh\out\sources\ WinPE(Windows 사전 설치 환경)가 완전히 업데이트되었습니다.

Windows IoT Enterprise 업데이트

Windows IoT Enterprise 이미지는 폴더 아래 install.wim 의 원래 설치 미디어에 포함되어 있습니다 \sources . 미디어 서비스 환경 준비 섹션에서 작업 폴더로 이동했습니다install.wim. 이 섹션에서는 최신 누적 서비스 업데이트로 업데이트 install.wim 하는 프로세스를 안내하고 미디어 서비스 환경을 사용하여 대상 디바이스에서 필요한 경우 타사 드라이버를 통합합니다. 업데이트가 완료되면 FAT32 형식의 install.wim 플래시 드라이브에 복사할 수 있도록 더 *.swm 작은 파일로 분할합니다.

  1. OS install.wim 탑재

    1. WinPE 환경을 업데이트하는 첫 번째 단계는 PowerShell 명령 New-Item을 사용하여 명명된 c:\mediarefresh mounted 임시 폴더를 만드는 것입니다.

      MD c:\MediaRefresh\mounted
      
    2. install.wim을 업데이트하려면 파일 특성이 ReadOnly로 설정되지 않았는지 확인해야 합니다. PowerShell 명령 Set-ItemProperty를 사용하여 ReadOnly 특성을 제거합니다.

      Set-ItemProperty -Path "c:\mediarefresh\wim\install.wim" -Name IsReadOnly -Value $false
      
    3. 이제 PowerShell 명령 Mount-WindowsImage를 사용하여 index 2의 install.wim에 저장된 Windows IoT Enterprise 이미지를 탑재할 수 있습니다.

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. 인덱스 2의 install.wim에 있는 Windows IoT Enterprise 이미지 저장소의 콘텐츠는 이제 .에서 c:\mediarefresh\mounted볼 수 있습니다.

  2. 타사 드라이버 설치
    PowerShell 명령 Add-WindowsDriver를 사용하여 폴더에 c:\mediarefresh\drivers 수집한 타사 드라이버를 OS 이미지 c:\mediarefresh\mounted 에 설치합니다. 매개 변수를 -recurse 사용하면 하위 폴더를 처리할 수 있습니다.

    Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse 
    

    참고 항목

    테스트를 위해 서명되지 않은 드라이버를 추가하고 드라이버에 디지털 서명이 있어야 한다는 요구 사항을 재정의하는 데 사용할 -ForceUnsigned 수 있습니다. 드라이버 서명 요구 사항에 대한 자세한 내용은 디바이스 드라이버 및 배포 개요를 참조하세요.

  3. 사용자 지정 설치 스크립트 추가

    1. OS 이미지에 사용자 지정 설치 스크립트를 추가하기 전에 먼저 PowerShell 명령 New-Item을 사용하여 폴더 c:\mediarefresh\mounted\windows\setup\ 를 만듭니 scripts 다.

      MD c:\mediarefresh\mounted\windows\setup\scripts
      
    2. Robocopy를 사용하여 스크립트를 c:\mediarefresh\scripts 복사합니다c:\mediarefresh\mounted\windows\setup\scripts.

      robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd
      
  4. OS 이미지에 서비스 패키지 적용
    PowerShell 명령 Add-WindowsPackage를 사용하여 폴더에 c:\mediarefresh\packages 다운로드한 최신 누적 업데이트 및 해당 종속성을 WinPE에 c:\mediarefresh\mounted 적용합니다.

    1. 먼저 서비스 스택 업데이트 종속성을 적용합니다.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
      
    2. 이제 최신 누적 업데이트를 적용합니다.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU"
      

    오류 0x800f0823 발생하는 경우 서비스 업데이트에 먼저 적용해야 하는 종속성이 있을 수 있습니다. 해당 종속성을 이미 다운로드한 경우 위의 명령을 두 번째로 실행해 보세요. 이 문제가 해결되지 않으면 업데이트에 대한 추가 필수 구성 요소를 다운로드해야 할 수 있습니다.

    • c:\mediarefresh\packages의 업데이트 파일 이름에 KB####### 기록해 둡니다.
    • KB를 사용하여 support.microsoft.com 검색 #######
    • 일치하는 첫 번째 항목을 열고 "필수 구성 요소"라는 용어를 검색합니다.
    • 언급된 필수 구성 요소를 다운로드하고 위의 명령을 다시 실행합니다. 필수 구성 요소가 먼저 적용되도록 하려면 명령을 두 번 실행해야 할 수 있습니다.
    • 오류가 해결되면 다음 단계로 계속 진행합니다.
  5. 업데이트된 install.wim 저장 및 분리
    서비스 프로세스를 완료하려면 PowerShell 명령 Dismount-WindowsImage 를 사용하여 변경 내용을 저장합니다.

    Important

    명령을 실행 Dismount-WindowsImage 하기 전에 아래 내용을 보고 있는 파일 탐색기 보기 또는 명령 창이 없는지 확인합니다c:\mediarefresh\mounted. 이렇게 하지 않으면 분리를 시도할 때 오류가 발생합니다.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. 임시 폴더 삭제 mounted
    boot.wim을 성공적으로 분리하면 이제 PowerShell 명령 Remove-Item을 사용하여 임시 폴더 c:\mediarefresh\mounted 를 제거할 수 있습니다.

    RD c:\mediarefresh\mounted
    
  7. FAT32 파일 시스템을 지원하도록 WIM 분할
    새 install.wim이 FAT32 형식의 플래시 미디어에 적합하도록 하려면 최대 파일 크기가 4GB인 Windows Image(install.wim) 파일을 PowerShell 명령 Split-WindowsImage를 사용하여 최대 크기가 4000MB인 작은(.swm) 파일 집합으로 분할합니다. 결과 *.swm 파일은 폴더에 c:\mediarefresh\out\sources 기록됩니다.

    Split-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -SplitImagePath "c:\mediarefresh\out\sources\install.swm" -FileSize 4000 -CheckIntegrity
    

원래로 install.wim저장되었던 OS 설치 이미지는 이제 원래 install.swm 와 같이 사용되며 install2.swm 어떤 설정이 사용되는install.wim지 아래에 저장 c:\mediarefresh\out\sources\ 됩니다.

업데이트된 미디어를 플래시 드라이브에 복사

부팅 가능한 플래시 드라이브를 만들지 않은 경우 플래시 드라이브에서 Windows를 설치하는 단계를 수행하여 계속하기 전에 이 작업을 수행합니다.

업데이트된 설치 미디어를 만드는 마지막 단계는 Robocopy를 사용하여 부팅 가능한 플래시 드라이브에 c:\mediarefresh\out 콘텐츠를 복사하는 것입니다.

robocopy c:\mediarefresh\out <DriveLetter>:\ /e

플래시 드라이브와 연결된 드라이브 문자는 어디에 <DriveLetter> 있음

새 디바이스에 Windows 설치

  1. 플래시 드라이브를 대상 디바이스에 연결합니다.

  2. 디바이스를 켜고 컴퓨터에 대한 부팅 디바이스 선택 메뉴(예: Esc/F10/F12 키)를 여는 키를 누릅니다. 플래시 드라이브에서 디바이스를 부팅하는 옵션을 선택합니다.

    Windows 설치 프로그램이 시작됩니다. 지침에 따라 Windows 설치

    이 프로세스가 디바이스에서 작동하지 않는 플래시 드라이브에서 부팅하도록 구성하려면 디바이스 제조업체 지침을 참조해야 할 수 있습니다.

  3. 설치의 초기 단계가 완료되고 디바이스가 다시 부팅되면 설치 프로그램이 처음부터 다시 시작될 수 있습니다. 설치 프로그램이 다시 시작되면 설치 프로그램을 취소하고 컴퓨터를 종료한 다음 플래시 드라이브를 제거하고 디바이스를 켜서 설치 프로그램의 다음 단계를 계속합니다.

    어떤 이유로 설치 프로세스 중에 오류가 발생하는 경우 문제 해결 지침에 대한 다음 문서를 참조하세요.

전체 스크립트

이 섹션에는 각 미디어 서비스 단계를 연속적으로 자동으로 수행하는 전체 스크립트가 포함되어 있습니다. 이 스크립트를 사용하기 전에 이 문서의 미디어 서비스 환경 준비 섹션을 완료해야 합니다. 준비가 되면 다음 PowerShell 스크립트를 다음으로 복사합니다. c:\mediarefresh\mediarefresh.ps1.

$LogFile = ".\MediaRefresh.log"
$LogDetail = ".\MediaRefreshDetail.log"

"================================================" >> $LogFile
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Starting MediaRefresh" >> $LogFile
"================================================" >> $LogFile
Write-Host "Updating Boot.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Boot.wim Update Started" >> $LogFile
Write-Host "     Preparing to mount boot.wim" -ForegroundColor Blue

(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Checking for existing .\Mounted folder" >> $LogFile

if ( -not (Test-Path -Path 'c:\MediaRefresh\mounted' -PathType Container)) { 
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Create .\Mounted folder" >> $LogFile
   MD c:\MediaRefresh\mounted >> $LogDetail
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Created .\Mounted folder" >> $LogFile
   }
   else {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\Mounted folder already existed" >> $LogFile 
   }

Write-Host "     Setting boot.wim file attributes to read-write" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Setting boot.wim file attributes to read-write" >> $LogFile
Set-ItemProperty -Path "c:\mediarefresh\wim\boot.wim" -Name IsReadOnly -Value $false | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Set boot.wim file attributes to read-write" >> $LogFile

Write-Host "     Mounting boot.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage boot.wim Started" >> $LogFile
Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage boot.wim Completed" >> $LogFile

Write-Host "     Installing Drivers" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to boot.wim Started" >> $LogFile
Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to boot.wim Completed" >> $LogFile

Write-Host "     Installing Servicing Stack Update" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to boot.wim Started" >> $LogFile
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to boot.wim Completed" >> $LogFile

Write-Host "     Installing Latest Cumulative Update" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to boot.wim Started" >> $LogFile
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to boot.wim Completed" >> $LogFile

Write-Host "     Setting read-write attribute on \out\sources\setup.exe" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Setting \out\sources\setup.exe file attributes to read-write" >> $LogFile
Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Set \out\sources\setup.exe file attributes to read-write" >> $LogFile

Write-Host "     Copying updated setup.exe to \out\sources" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy updated setup.exe to .\out\sources Started" >> $LogFile
robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy updated setup.exe to .\out\sources Completed" >> $LogFile

Write-Host "     Saving and dismounting boot.wim" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage boot.wim Started" >> $LogFile
Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save -CheckIntegrity -LogLevel 3 >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage boot.wim Completed" >> $LogFile

Write-Host "     Removing \Mounted folder" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Removing .\mounted folder" >> $LogFile
RD c:\mediarefresh\mounted | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\mounted folder removed" >> $LogFile

Write-Host "     Copying updated boot.wim to \out\sources" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy boot.wim to .\out\sources Started" >> $LogFile
robocopy c:\mediarefresh\wim c:\mediarefresh\out\sources boot.wim | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy boot.wim to .\out\sources Completed" >> $LogFile
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Boot.wim Update Completed" >> $LogFile
Write-Host "Updating Boot.wim Complete" -ForegroundColor Blue

Write-Host "Updating Install.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Install.wim Update Started" >> $LogFile
Write-Host "     Preparing to mount install.wim" -ForegroundColor Blue

(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Checking for existing .\Mounted folder" >> $LogFile

if ( -not (Test-Path -Path 'c:\MediaRefresh\mounted' -PathType Container)) { 
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Create .\Mounted folder" >> $LogFile
   MD c:\MediaRefresh\mounted  >> $LogDetail
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Created .\Mounted folder" >> $LogFile
   }
   else {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\Mounted folder already existed" >> $LogFile 
   }

Write-Host "     Setting read-write attribute on install.wim" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Setting install.wim file attributes to read-write" >> $LogFile
Set-ItemProperty -Path "c:\mediarefresh\wim\install.wim" -Name IsReadOnly -Value $false | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Set install.wim file attributes to read-write" >> $LogFile

Write-Host "     Mounting install.wim" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage install.wim Started" >> $LogFile
Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Mount-WindowsImage install.wim Completed" >> $LogFile


Write-Host "     Installing Drivers" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to install.wim Started" >> $LogFile
Add-WindowsDriver -Path "c:\mediarefresh\mounted" -Driver "c:\mediarefresh\drivers" -Recurse  >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsDrivers to install.wim Completed" >> $LogFile

Write-Host "     Creating folder \Windows\Setup\Scripts" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Checking for existing \windows\setup\scripts folder" >> $LogFile
if ( -not (Test-Path -Path 'c:\mediarefresh\mounted\windows\setup\scripts' -PathType Container)) {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Create \windows\setup\scripts folder" >> $LogFile
   MD c:\mediarefresh\mounted\windows\setup\scripts >> $LogDetail
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Created \windows\setup\scripts folder" >> $LogFile
   }
   else {
   (get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     \windows\setup\scripts already existed" >> $LogFile 
   }

Write-Host "     Copying Scripts to \Windows\Setup\Scripts" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy scripts to \windows\setup\scripts Started" >> $LogFile
robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Copy scripts to \windows\setup\scripts Completed" >> $LogFile

Write-Host "     Installing Servicing Stack Update" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to install.wim Started" >> $LogFile
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"  >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage SSU to install.wim Completed" >> $LogFile 

Write-Host "     Installing Latest Cumulative Update" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to install.wim Started" >> $LogFile 
Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\LCU" >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Add-WindowsPackage LCU to install.wim Completed" >> $LogFile 

Write-Host "     Saving and dismounting install.wim" -ForegroundColor Blue
Write-Host "          Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage install.wim Started" >> $LogFile
Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save -CheckIntegrity -LogLevel 3 >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Dismount-WindowsImage install.wim Completed" >> $LogFile

Write-Host "     Removing \Mounted folder" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     Removing .\mounted folder" >> $LogFile
RD c:\mediarefresh\mounted | out-null
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " |     .\mounted folder removed" >> $LogFile

Write-Host "Updating Install.wim Complete" -ForegroundColor Blue
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Install.wim Update Completed" >> $LogFile

Write-Host "Splitting Install.wim" -ForegroundColor Blue
Write-Host "     Note: This process may take several minutes to complete." -ForegroundColor Cyan
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Split-WindowsImage Started" >> $LogFile
Split-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -SplitImagePath "c:\mediarefresh\out\sources\install.swm" -FileSize 4000 -CheckIntegrity >> $LogDetail
(get-date).ToString("yyyy-MM-dd HH:mm:ss") + " | Split-WindowsImage Completed" >> $LogFile

Write-Host "Update Complete" -ForegroundColor Blue
Write-Host "Copy contents of c:\mediarefresh\out to your flash drive" -ForegroundColor Blue

기타 리소스