Partilhar via


Atualizar mídia de instalação do IoT Enterprise

Neste artigo, você configurará seu ambiente de atualização de mídia e irá reunir todos os pré-requisitos necessários para atualizar o ambiente do WinPE, o sistema operacional principal e instalar drivers

Preparar o ambiente de manutenção de mídia

  1. Inicie o PowerShell com privilégios de Administrador.
    Usamos essa instância do PowerShell para o processo de ponta a ponta de manutenção da mídia de instalação para aplicar atualizações e, se for preciso, incorporar os drivers necessários que não fazem parte da mídia de instalação do Windows

    • Selecione Iniciar
    • Tipo do PowerShell
    • Clique com o botão direito do mouse em Windows PowerShell
    • Selecione Executar como administrador
  2. Criar pastas para armazenar arquivos durante a manutenção de mídia
    Use o comando do PowerShell New_Item para criar as pastas a seguir no computador técnico para armazenar os arquivos necessários durante a manutenção de mídia.

    c:\MediaRefresh: pasta pai para armazenar arquivos durante a manutenção de mídia.
    c:\MediaRefresh\Out: cópia da mídia original atualizada durante a manutenção.
    c:\MediaRefresh\Packages\LCU: atualização cumulativa mais recente c:\MediaRefresh\Packages\SSU: atualização de pilha de manutenção, se necessário
    c:\MediaRefresh\Drivers: drivers de terceiros.
    c:\MediaRefresh\Scripts: scripts de instalação personalizados. c:\MediaRefresh\WIM: diretório de trabalho para atualizar boot.wim e 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. Copiar arquivos da mídia original
    Copie todos os arquivos da mídia de instalação original para c:\MediaRefresh\Out.

    1. Prossiga para a etapa b. se você tiver mídia física; caso contrário, deverá primeiro montar o ISO de instalação do Windows IoT Enterprise usando Mount-DiskImage e exibir a letra da unidade montada resultante usando Get-Volume.

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

      Em que <ISO Path> é um caminho totalmente qualificado para o seu ISO

      Anote o DriveLetter, pois precisaremos usá-lo na próxima etapa.

    2. Copie arquivos da mídia de instalação original indicada aqui por <DriveLetter> para a pasta c:\MediaRefresh\Out usando Robocopy.

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

      Em que <DriveLetter> é a letra da unidade associada ao arquivo ISO montado

    3. Mova boot.wim e install.wim de c:\MediaRefresh\Out\Sources para a pasta c:\MediaRefresh\WIM, a pasta de trabalho para atualizar os arquivos WIM, usando o Robocopy.

      robocopy c:\mediarefresh\out\sources c:\MediaRefresh\WIM *.wim /Mov
      
    4. Prossiga para a próxima etapa se você não montou um ISO para o comando anterior; caso contrário, primeiro você deve desmontar o ISO de instalação do Windows IoT Enterprise usando Dismount-Diskimage

      Dismount-DiskImage -ImagePath <ISO Path>  
      

      Em que <ISO Path> é um caminho totalmente qualificado para o seu arquivo ISO.

  4. Reunir pacotes de manutenção

    Baixe o arquivo cumulativo mais recente da MSU (Microsoft Servicing Update) para a pasta c:\MediaRefresh\Packages\LCU.

    Se uma dependência da atualização da pilha de manutenção (MSU) for necessária, baixe-a para a pasta c:\MediaRefresh\Packages\SSU. Use a tabela a seguir para ajudá-lo a localizar as atualizações para sua versão específica do Windows IoT Enterprise.

    Versão Versão Histórico de atualizações Catálogo de atualização
    Windows 10 IoT Enterprise LTSC 2021 19044 Mostrar histórico de atualizações Mostrar atualizações para x64
    Mostrar atualizações para ARM64
    Windows 10 IoT Enterprise LTSC 2019 17763 Mostrar histórico de atualizações Mostrar atualizações para x64
    Mostrar atualizações para ARM64
    Windows 10 IoT Enterprise LTSC 2016 14393 Mostrar histórico de atualizações Mostrar atualizações para x64
    Mostrar atualizações para x86
    Windows 10 IoT Enterprise LTSC 2015 10240 Mostrar histórico de atualizações Mostrar atualizações para x64
    Mostrar atualizações para x86
  5. [Opcional] Reúna drivers de terceiros
    Coloque os drivers de terceiros necessários para seu dispositivo em um formato descompactado na raiz da pasta c:/MediaRefresh/drivers ou como subpastas de c:/MediaRefresh/drivers.

  6. [Opcional] Reúna scripts de configuração
    Coloque seus scripts personalizados Setupcomplete.cmd e ErrorHandler.cmd executados durante ou após o processo de Instalação do Windows na pasta c:\MediaRefresh\Scripts.

    Para obter mais informações, consulte Adicionar um script personalizado à Instalação do Windows

Atualizar o Ambiente de Pré-Instalação do Windows (WinPE)

O WinPE (Ambiente de Pré-Instalação do Windows) está contido em boot.wim na mídia de instalação original na pasta \sources. Nesta seção, percorreremos o processo de atualização de boot.wim com a atualização de manutenção cumulativa mais recente e iremos incorporar drivers de terceiros, se necessário, ao ambiente WinPE usando o Ambiente de Manutenção de Mídia.

  1. Montar boot.wim do WinPE

    1. A primeira etapa na atualização do ambiente WinPE é criar uma pasta temporária chamada mounted em c:\mediarefresh usando o comando do PowerShell New-Item

      MD c:\MediaRefresh\mounted
      
    2. Antes de atualizar o boot.wim, precisamos garantir que seu atributo de arquivo não esteja definido como ReadOnly. Use o comando do PowerShell Set-ItemProperty para remover o atributo ReadOnly.

      Set-ItemProperty -Path "c:\mediarefresh\wim\boot.wim" -Name IsReadOnly -Value $false
      
    3. Agora podemos montar a imagem do WinPE armazenada no boot.wim no índice 2 usando o comando do PowerShell Mount-WindowsImage

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\boot.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. O conteúdo da imagem do WinPE armazenada no boot.wim no índice 2 agora pode ser exibido em c:\mediarefresh\mounted.

  2. Aplicar drivers de terceiros ao WinPE
    Instale os drivers de terceiros coletados na pasta c:\mediarefresh\drivers no WinPE em c:\mediarefresh\mounted usando o comando do PowerShell Add-WindowsDriver.

    Observação

    Para fins de teste, você pode usar -ForceUnsigned para adicionar drivers não assinados e substituir o requisito de que os drivers devem ter uma assinatura digital. Para obter mais informações sobre os requisitos de assinatura do driver, consulte a Visão geral de drivers de dispositivo e implantação.

    Add-WindowsDriver -Path "c:\mediarefresh\Mounted" -Driver "c:\mediarefresh\drivers" -Recurse
    
  3. Aplicar atualizações de manutenção ao WinPE
    Aplique a atualização cumulativa mais recente e suas dependências baixadas para a pasta c:\mediarefresh\packages ao WinPE em c:\mediarefresh\mounted usando o comando do PowerShell Add-WindowsPackage. Esse processo pode levar vários minutos para ser concluído, no entanto, garante que sua imagem do Windows já tenha a atualização de manutenção mais recente aplicada.

    1. Primeiro, aplique a dependência de atualização da pilha de manutenção.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
      
    2. Agora, aplique a atualização cumulativa mais recente.

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

    Dica

    Se você encontrar o erro 0x800f0823, a atualização do serviço poderá ter uma dependência que deve ser aplicada primeiro. Se você já baixou sua dependência, tente executar o comando acima uma segunda vez. Se isso não resolver o problema, talvez seja necessário baixar um pré-requisito adicional para sua atualização.

    • Anote o KB######## no nome do arquivo da atualização em c:\mediarefresh\packages.
    • Pesquise support.microsoft.com com o KB#######
    • Abra o primeiro tópico que corresponder e pesquise o termo "pré-requisito".
    • Baixe os pré-requisitos mencionados e execute o comando acima novamente. Observe que talvez seja necessário executar o comando duas vezes para permitir que o pré-requisito seja aplicado primeiro.
    • Continue para a próxima etapa depois que o erro for resolvido.
  4. Copiar Setup.exe atualizado
    Antes de continuar, copie o setup.exe atualizado do WinPE em c:\mediarefresh\mounted\sources para c:\mediarefresh\out\sources usando o Robocopy.

    1. Primeiro, precisamos remover o atributo ReadOnly em c:\mediarefresh\mounted\sources\setup.exe usando o comando Set-ItemProperty do PowerShell.

      Set-ItemProperty -Path "c:\mediarefresh\out\sources\setup.exe" -Name IsReadOnly -Value $false
      
    2. Agora podemos copiar setup.exe de c:\mediarefresh\mounted\sources para c:\mediarefresh\out\sources usando o Robocopy.

      robocopy c:\mediarefresh\mounted\sources c:\mediarefresh\out\sources setup.exe
      
  5. Desmontar e salvar alterações no WinPE

    Para concluir o processo de manutenção, use o comando Dismount-WindowsImage do PowerShell para salvar as alterações.

    Importante

    Antes de executar o comando Dismount-WindowsImage, verifique se você não tem nenhuma exibição do Explorador de Arquivos ou janelas de comando que estejam exibindo conteúdo em c:\mediarefresh\mounted. Se não fizer isso, ocorrerá um erro ao tentar desmontar.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. Excluir pasta temporária

    Após a desmontagem bem-sucedida do boot.wim, agora podemos remover a pasta temporária c:\mediarefresh\mounted usando o comando Remove-Item do PowerShell

    RD c:\MediaRefresh\mounted
    
  7. Publicar Boot.wim na pasta out

    Agora copie o boot.wim atualizado de c:\mediarefresh\wim para c:\mediarefresh\out\sources usando o Robocopy.

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

O WinPE (Ambiente de Pré-Instalação do Windows) armazenado como boot.wim e setup.exe ambos localizados em c:\mediarefresh\out\sources\ estão totalmente atualizados.

Atualizar o Windows IoT Enterprise

A imagem do Windows IoT Enterprise está contida em install.wim na mídia de instalação original na pasta \sources. Na seção Preparar Ambiente de Manutenção de Mídia, movemos install.wim para uma pasta de trabalho. Nesta seção, percorreremos o processo de atualização de install.wim com a atualização de manutenção cumulativa mais recente e iremos incorporar drivers de terceiros, se necessário, pelo dispositivo de destino usando o Ambiente de Manutenção de Mídia. Depois que a atualização for concluída, divida install.wim em arquivos *.swm menores para que possam ser copiados para uma unidade flash formatada como FAT32.

  1. Montar o sistema operacional install.wim

    1. A primeira etapa na atualização do ambiente WinPE é criar uma pasta temporária chamada mounted em c:\mediarefresh usando o comando New-Item do PowerShell.

      MD c:\MediaRefresh\mounted
      
    2. Antes de atualizarmos o install.wim, precisamos garantir que seu atributo de arquivo não esteja definido como ReadOnly. Use o comando do PowerShell Set-ItemProperty para remover o atributo ReadOnly.

      Set-ItemProperty -Path "c:\mediarefresh\wim\install.wim" -Name IsReadOnly -Value $false
      
    3. Agora podemos montar a imagem do Windows IoT Enterprise armazenada em install.wim no índice 2 usando o comando do PowerShell Mount-WindowsImage

      Mount-WindowsImage -ImagePath "c:\mediarefresh\wim\install.wim" -Index 2 -Path "c:\mediarefresh\Mounted"
      
    4. O conteúdo do repositório de imagens do Windows IoT Enterprise em install.wim no índice 2 agora pode ser exibido em c:\mediarefresh\mounted.

  2. Instalar drivers de terceiros
    Instale drivers de terceiros coletados na pasta c:\mediarefresh\drivers para a imagem do sistema operacional em c:\mediarefresh\mounted usando o comando do PowerShell Add-WindowsDriver. O parâmetro -recurse permite o processamento de subpastas.

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

    Observação

    Para fins de teste, você pode usar -ForceUnsigned para adicionar drivers não assinados e substituir o requisito de que os drivers devem ter uma assinatura digital. Para obter mais informações sobre os requisitos de assinatura do driver, consulte a Visão geral de drivers de dispositivo e implantação.

  3. Adicionar scripts de instalação personalizados

    1. Antes de adicionar scripts de instalação personalizados à imagem do sistema operacional, primeiro crie uma pasta scripts em c:\mediarefresh\mounted\windows\setup\ usando o comando New-Item do PowerShell.

      MD c:\mediarefresh\mounted\windows\setup\scripts
      
    2. Copie scripts de c:\mediarefresh\scripts para c:\mediarefresh\mounted\windows\setup\scripts usando o Robocopy.

      robocopy c:\mediarefresh\scripts c:\mediarefresh\mounted\windows\setup\scripts *.cmd
      
  4. Aplicar pacotes de manutenção à imagem do sistema operacional
    Aplique a atualização cumulativa mais recente e suas dependências baixadas para a pasta c:\mediarefresh\packages ao WinPE em c:\mediarefresh\mounted usando o comando do PowerShell Add-WindowsPackage.

    1. Primeiro, aplique a dependência de atualização da pilha de manutenção.

      Add-WindowsPackage -Path "c:\mediarefresh\mounted" -PackagePath "c:\mediarefresh\packages\SSU"
      
    2. Agora, aplique a atualização cumulativa mais recente.

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

    Dica

    Se você encontrar o erro 0x800f0823, a atualização do serviço poderá ter uma dependência que deve ser aplicada primeiro. Se você já baixou sua dependência, tente executar o comando acima uma segunda vez. Se isso não resolver o problema, talvez seja necessário baixar um pré-requisito adicional para sua atualização.

    • Anote o KB######## no nome do arquivo da atualização em c:\mediarefresh\packages.
    • Pesquise support.microsoft.com com o KB#######
    • Abra o primeiro tópico que corresponder e pesquise o termo "pré-requisito".
    • Baixe os pré-requisitos mencionados e execute o comando acima novamente. Observe que talvez seja necessário executar o comando duas vezes para permitir que o pré-requisito seja aplicado primeiro.
    • Continue para a próxima etapa depois que o erro for resolvido.
  5. Salvar e desmontar o install.wim atualizado
    Para concluir o processo de manutenção, use o comando Dismount-WindowsImage do PowerShell para salvar as alterações.

    Importante

    Antes de executar o comando Dismount-WindowsImage, verifique se você não tem nenhuma exibição do Explorador de Arquivos ou janelas de comando que estejam exibindo conteúdo em c:\mediarefresh\mounted. Se não fizer isso, ocorrerá um erro ao tentar desmontar.

    Dismount-WindowsImage -path "c:\mediarefresh\mounted" -save
    
  6. Excluir a pasta temporária mounted
    Após a desmontagem bem-sucedida do boot.wim, agora podemos remover a pasta temporária c:\mediarefresh\mounted usando o comando Remove-Item do PowerShell

    RD c:\mediarefresh\mounted
    
  7. Dividir WIM para dar suporte ao sistema de arquivos FAT32
    Para garantir que o novo install.wim se encaixe na mídia flash formatada como FAT32, que tem um tamanho máximo de arquivo de 4 GB, você divide o arquivo de imagem do Windows (install.wim) em um conjunto de arquivos menores (.swm) com um tamanho máximo de 4000 MB usando o comando do PowerShell Split-WindowsImage. Os arquivos *.swm resultantes são gravados na pasta c:\mediarefresh\out\sources.

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

A imagem de instalação do sistema operacional, originalmente armazenada como install.wim, agora é armazenada em c:\mediarefresh\out\sources\ como install.swm e install2.swm, que a instalação usa como se fossem o original install.wim.

Copiar mídia atualizada para a unidade flash

Se você ainda não criou uma unidade flash inicializável, faça isso antes de continuar seguindo as etapas para Instalar o Windows de uma unidade flash.

A etapa final da criação da mídia de instalação atualizada é copiar o conteúdo de c:\mediarefresh\out para sua unidade flash inicializável usando o Robocopy.

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

Onde <DriveLetter> é a letra da unidade associada à unidade flash

Instalar o Windows no novo dispositivo

  1. Conecte a unidade flash ao dispositivo de destino.

  2. Ative o dispositivo e pressione a tecla que abre o menu de seleção do dispositivo de inicialização para o computador, como as teclas Esc/F10/F12. Selecione a opção que inicializa o dispositivo na unidade flash.

    A Instalação do Windows é iniciada. Siga as instruções para instalar o Windows

    Dica

    Talvez seja necessário consultar as instruções do fabricante do dispositivo para configurá-lo para inicialização da unidade flash se esse processo não funcionar em seu dispositivo.

  3. Depois que a fase inicial da Instalação for concluída e o dispositivo for reiniciado, a Instalação poderá começar novamente desde o início. Se a Instalação for iniciada novamente, cancele a Instalação e desligue o computador, remova a unidade flash e ative o dispositivo para continuar com a próxima fase da Instalação.

    Dica

    Se, por algum motivo, você encontrar um erro durante o processo de Instalação, confira os artigos a seguir para obter diretrizes de solução de problemas.

Script Completo

Esta seção contém um script completo que executa automaticamente cada uma das etapas de manutenção de mídia em sucessão. Antes de usar este script, você deve concluir a seção Preparar ambiente de manutenção de mídia deste artigo. Quando estiver pronto, copie o script do PowerShell a seguir para 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

Outros recursos