Поделиться через


Обновление носителя установки IoT Enterprise

В этой статье описана настройка среды обновления мультимедиа и сбор всех необходимых компонентов, необходимых для обновления среды WinPE и основной операционной системы, установка драйверов

Подготовка среды обслуживания мультимедиа

  1. Запустите PowerShell с правами администратора.
    Мы используем этот экземпляр PowerShell для завершения процесса обслуживания установочного носителя для применения обновлений и при необходимости включаем необходимые драйверы, которые не являются частью установочного носителя Windows.

    • Выберите команду Запустить.
    • Тип PowerShell
    • Щелкните правой кнопкой мыши Windows PowerShell
    • Выберите " Запуск от имени администратора"
  2. Создание папок для хранения файлов во время обслуживания мультимедиа
    Используйте команду PowerShell New_Item , чтобы создать следующие папки на компьютере технического специалиста для хранения файлов, необходимых во время обслуживания мультимедиа.

    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. , если у вас есть физический носитель, в противном случае необходимо сначала подключить ISO установки Windows IoT Enterprise с помощью mount-DiskImage и отобразить итоговую букву подключенного диска с помощью Get-Volume.

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

      Где <ISO Path> есть полный путь к ISO

      Запишите DriveLetter, так как нам потребуется использовать его на следующем шаге.

    2. Скопируйте файлы из исходного носителя установки, обозначаемого здесь, <DriveLetter> в c:\MediaRefresh\Out папку с помощью Robocopy.

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

      Где <DriveLetter> находится буква диска, связанная с подключенным ISO-файлом

    3. Переместите boot.wim и install.wim из c:\MediaRefresh\Out\Sources c:\MediaRefresh\WIM папки в рабочую папку для обновления ФАЙЛОВ WIM с помощью Robocopy.

      robocopy c:\mediarefresh\out\sources c:\MediaRefresh\WIM *.wim /Mov
      
    4. Перейдите к следующему шагу, если вы не подключали ISO для предыдущей команды, в противном случае необходимо сначала отключить ISO установки Windows IoT Enterprise с помощью Dismount-Diskimage

      Dismount-DiskImage -ImagePath <ISO Path>  
      

      Где <ISO Path> указан полный путь к ISO-файлу.

  4. Сбор пакетов обслуживания

    Скачайте последний накопительный накопительный файл обновления обслуживания Майкрософт (MSU) в папку 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 Корпоративная 2021 с долгосрочным обслуживанием 19044 Отображение журнала обновлений Отображение обновлений x64 с отображением обновлений
    ARM64
    Windows 10 IoT Корпоративная LTSC 2019 17763 Отображение журнала обновлений Отображение обновлений x64 с отображением обновлений
    ARM64
    Windows 10 IoT Корпоративная LTSC 2016 14393 Отображение журнала обновлений Отображение обновлений x64 с отображением обновлений
    x86
    Windows 10 IoT Корпоративная LTSC 2015 10240 Отображение журнала обновлений Отображение обновлений x64 с отображением обновлений
    x86
  5. [Необязательно] Сбор сторонних драйверов
    Поместите сторонние драйверы, необходимые для устройства в несжатом формате, в корневой c:/MediaRefresh/drivers папке или в виде вложенных папок c:/MediaRefresh/drivers.

  6. [Необязательно] Сбор скриптов конфигурации
    Поместите свои Setupcomplete.cmd и ErrorHandler.cmd пользовательские скрипты, которые выполняются во время или после процесса установки Windows в папку c:\MediaRefresh\Scripts .

    Дополнительные сведения см. в разделе "Добавление пользовательского скрипта в программу установки Windows"

Обновление среды предварительной установки Windows (WinPE)

Среда предварительной установки Windows (WinPE) содержится в boot.wim исходном носителе установки в папке \sources . В этом разделе мы рассмотрим процесс обновления boot.wim последнего накопительного обновления обслуживания и включения сторонних драйверов при необходимости в среду WinPE с помощью среды обслуживания мультимедиа.

  1. Подключение WinPE boot.wim

    1. Первым шагом в обновлении среды WinPE является создание временной папки с именем mounted c:\mediarefresh с помощью команды PowerShell New-Item

      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. Теперь можно подключить образ WinPE, хранящийся в boot.wim индексе 2, с помощью команды PowerShell Mount-WindowsImage

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. Содержимое образа WinPE, хранящегося в boot.wim индексе 2, теперь доступно c:\mediarefresh\mountedдля просмотра.

  2. Применение сторонних драйверов к WinPE
    Установите сторонние драйверы, собранные в папке c:\mediarefresh\drivers , в WinPE c:\mediarefresh\mounted с помощью команды PowerShell Add-WindowsDriver.

    Примечание.

    Для тестирования можно использовать для -ForceUnsigned добавления неподписанных драйверов и переопределения требования, необходимые драйверам для цифровой подписи. Дополнительные сведения о требованиях к подписи драйверов см. в разделе "Общие сведения о драйверах устройств и развертывании".

    Add-WindowsDriver -Path "c:\mediarefresh\Mounted" -Driver "c:\mediarefresh\drivers" -Recurse
    
  3. Применение обновлений обслуживания к WinPE
    Примените последнее накопительное обновление и его зависимости, скачанные в папку, к c:\mediarefresh\packages WinPE с c:\mediarefresh\mounted помощью команды PowerShell Add-WindowsPackage. Этот процесс может занять несколько минут, однако он гарантирует, что образ 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.
    • Поиск support.microsoft.com с помощью базы знаний#######
    • Откройте первый раздел, соответствующий и найдите термин "предварительные требования".
    • Скачайте все указанные предварительные требования и снова запустите приведенную выше команду. Обратите внимание, что для первого применения необходимо выполнить команду дважды.
    • Перейдите к следующему шагу после устранения ошибки.
  4. Копирование обновлено Setup.exe
    Перед продолжением копирования обновленного setup.exe из WinPE на c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources использование Robocopy.

    1. Сначала необходимо удалить атрибут ReadOnly с c:\mediarefresh\mounted\sources\setup.exe помощью команды Set-ItemProperty PowerShell.

      Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false
      
    2. Теперь можно скопировать setup.exe с c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources помощью Robocopy.

      robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe
      
  5. Отключение и сохранение изменений в WinPE

    Чтобы завершить процесс обслуживания, используйте команду PowerShell Dismount-WindowsImage для сохранения изменений.

    Внимание

    Перед выполнением Dismount-WindowsImage команды убедитесь, что у вас нет проводник представлений или окон команд, в которых просматриваются содержимоеc:\mediarefresh\mounted. Сбой этого приведет к ошибке при попытке отключения.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. Удаление временной папки

    После успешного отключения boot.wim теперь можно удалить временную папку c:\mediarefresh\mounted с помощью команды PowerShell Remove-Item

    RD c:\MediaRefresh\mounted
    
  7. Публикация Boot.wim в папке out

    Теперь скопируйте обновленную boot.wim версию c:\mediarefresh\out\sources с c:\mediarefresh\wim помощью Robocopy.

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

Среда Предустановки Windows (WinPE), сохраненная как boot.wim и setup.exe расположенная под c:\mediarefresh\out\sources\ ней, полностью обновляются.

Обновление Windows IoT Enterprise

Образ Windows IoT Enterprise содержится в install.wim исходном носителе установки в папке \sources . В разделе " Подготовка среды обслуживания мультимедиа" мы переехали install.wim в рабочую папку. В этом разделе мы рассмотрим процесс обновления install.wim с помощью последнего накопительного обновления обслуживания и включения сторонних драйверов при необходимости на целевом устройстве с помощью среды обслуживания мультимедиа. После завершения обновления разбиение install.wim на небольшие *.swm файлы, чтобы их можно было скопировать на флэш-накопитель, отформатированный как FAT32.

  1. Подключение ОС install.wim

    1. Первым шагом в обновлении среды WinPE является создание временной папки с именем mounted с помощью команды PowerShell New-Itemc:\mediarefresh.

      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. Теперь можно подключить образ Windows IoT Enterprise, хранящийся в install.wim в индексе 2, с помощью команды PowerShell Mount-WindowsImage

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. Содержимое хранилища образов Windows IoT Enterprise в install.wim в индексе 2 теперь доступно для c:\mediarefresh\mountedпросмотра.

  2. Установка сторонних драйверов
    Установите сторонние драйверы, собранные в папке c:\mediarefresh\drivers , на образ c:\mediarefresh\mounted ОС с помощью команды PowerShell Add-WindowsDriver. Параметр -recurse включает обработку вложенных папок.

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

    Примечание.

    Для тестирования можно использовать для -ForceUnsigned добавления неподписанных драйверов и переопределения требования, необходимые драйверам для цифровой подписи. Дополнительные сведения о требованиях к подписи драйверов см. в разделе "Общие сведения о драйверах устройств и развертывании".

  3. Добавление пользовательских скриптов установки

    1. Перед добавлением пользовательских скриптов установки в образ ОС сначала создайте scripts папку с c:\mediarefresh\mounted\windows\setup\ помощью команды PowerShell New-Item.

      MD c:\mediarefresh\mounted\windows\setup\scripts
      
    2. Копирование скриптов с c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts помощью Robocopy.

      robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd
      
  4. Применение пакетов обслуживания к образу ОС
    Примените последнее накопительное обновление и его зависимости, скачанные в папку, к c:\mediarefresh\packages WinPE с c:\mediarefresh\mounted помощью команды PowerShell Add-WindowsPackage.

    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.
    • Поиск support.microsoft.com с помощью базы знаний#######
    • Откройте первый раздел, соответствующий и найдите термин "предварительные требования".
    • Скачайте все указанные предварительные требования и снова запустите приведенную выше команду. Обратите внимание, что для первого применения необходимо выполнить команду дважды.
    • Перейдите к следующему шагу после устранения ошибки.
  5. Сохранение и отключение обновленного install.wim
    Чтобы завершить процесс обслуживания, используйте команду PowerShell Dismount-WindowsImage для сохранения изменений.

    Внимание

    Перед выполнением Dismount-WindowsImage команды убедитесь, что у вас нет проводник представлений или окон команд, в которых просматриваются содержимоеc:\mediarefresh\mounted. Сбой этого приведет к ошибке при попытке отключения.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. Удаление временной папки mounted
    После успешного отключения boot.wim теперь можно удалить временную папку c:\mediarefresh\mounted с помощью команды PowerShell Remove-Item

    RD c:\mediarefresh\mounted
    
  7. Разделение WIM для поддержки файловой системы FAT32
    Чтобы убедиться, что новый install.wim помещается в носитель флэш-памяти, отформатированный как FAT32, который имеет максимальный размер файла в 4 ГБ, разделенный файлом образа Windows (install.wim) на набор небольших (SWM) файлов с максимальным размером 4000 МБ с помощью команды PowerShell Split-WindowsImage. Полученные *.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, теперь хранится в c:\mediarefresh\out\sources\ том виде install.swm , install2.swm в котором используется настройка, как если бы они были исходными install.wim.

Копирование обновленного носителя на флэш-диск

Если вы еще не создали загрузочный флэш-диск, сделайте это, прежде чем продолжить, выполнив действия по установке Windows с флэш-диска.

Последним шагом создания обновленного носителя установки является копирование содержимого c:\mediarefresh\out загрузочного флэш-диска с помощью Robocopy.

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

Другие ресурсы