Дополнение B. Перенос загрузочного диска Windows

Диски вычислительных систем давно стали рассматриваться в качестве расходного материала. Они старятся и имеют тенденцию выходить из строя. Для предотвращения этого существуют технологии дублирования (зеркалирования) и резервного копирования. Кроме того, присутствующая практически во всех современных дисках технология S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) позволяет отслеживать жизнеспособность диска. К сожалению, сами операционные системы, как правило не обладают инструментарием выдачи сообщений о критическом состоянии S.M.A.R.T., однако на рынке имеется масса средств, способствующая решению данной задачи (например, бесплатный CrystalDiskInfo, подробнее о сведениях S.M.A.R.T.). Помимо этого также существуют интегрированные инструменты разбивки, диагностики, шифрования, восстановления, клонирования, форматирования дисков (см., например обзор). К сожалению, интегрированные инструменты не всегда приводят к полному успеху, а потому неплохо понимать что стоит за их магией и как осуществлять её "своими" руками при помощи более простых средств, осуществляющих магические действия пошагово, то есть предоставляя возможности исправления ошибок сразу после их возникновения, причём желательно чтобы эти средства были от самого производителя ОС. Кроме того, понимание всех этапов данного процесса будет полезным и при возникновении прочих проблем с загрузочным диском. В данном Дополнении мы ограничимся ОС Windows. Итак, что нам делать, когда S.M.A.R.T. начал сообщать нам о плохом состоянии носителя?

Среда предустановки Windows

Windows PE (WinPE, Windows Preinstallation Environment) — это небольшая операционная система, применяемая для установки, развёртывания и восстановления редакций Windows для настольных ПК, Windows Server и прочих операционных систем Windows. Из Windows PE вы можете:

  • Настраивать свой жёсткий диск перед установкой Windows.

  • Устанавливать Windows из сетевой среды или с локального диска при помощи приложений или сценариев.

  • Фиксировать и применять образы Windows.

  • Изменять саму операционную систему до её запуска.

  • Настраивать инструменты автоматического восстановления.

  • Восстанавливать данные на потерявших возможность загрузки устройствах.

  • Добавлять свою собственную оболочку или графический интерфейс для решения подобных задач.

WinPE — это дополнение к комплекту экспертизы и развёртывания Windows (ADK, Assessment and Deployment Kit). До Windows 10 версии 1809 WinPE была включена в ADK и не являлась надстройкой. {Подробнее: Обзор средств предустановки Windows (WinPE), Microsoft.}

Комплект экспертизы и развёртывания Windows

Комплект экспертизы и развёртывания Windows (Windows ADK) и надстройка Windows PE содержат инструменты, необходимые для настройки образов Windows как для крупномасштабного развёртывания, так и для проверки качества и производительности вашей системы, добавленных в неё компонентов и запущенных в неё приложений. Windows ADK содержит:

  • Набор средств экспертизы Windows и инструментарий сопоставления производительности Windows для оценки качества и производительности систем или компонентов.

  • Инструментарий Анализа совместимости администратора и стандартного пользователя (Compatibility Administrator and the Standard User Analyzer).

  • Средства развёртывания, такие как Windows PE, Sysprep и прочие инструменты, которые вы можете применять для персонализации и развёртывания образов Windows.

  • Среду предустановки Windows (Windows PE) в виде обособленной загрузки из комплекта экспертизы и развёртывания (ADK). Для добавить среды предустановки Windows к установке ADK, после установки ADK загрузите и установите надстройку среды предустановки Windows. 32-разрядные версии Windows PE больше не включаются в надстройки Windows PE, начиная с ADK для Windows 11 версии 22H2. Последняя поддерживаемая версия 32-разрядной среды предустановки Windows доступна в надстройке среды предустановки Windows для Windows 10 версии 2004. {Подробнее: Скачайте и установите Windows ADK, Microsoft.}

    Создание загружаемого носителя Windows PE

     

    CopyPE

    Copype создаёт рабочий каталог, который содержит файлы Windows Preinstallation Environment (Windows PE). Вы пользуетесь этими файлами для персонализации образов и (совместно со сценарием Makewinpemedia) для создания загружаемого носителя. {Подробнее: Параметры командной строки Copype, Microsoft.}

     

    Makewinpemedia

    Для создания загружаемого носителя Windows Preinstallation Environment (Windows PE), вы можете воспользоваться сценарием Makewinpemedia {Подробнее: Параметры командной строки Makewinpemedia, Microsoft.}

     

    Создание загружаемого носителя Windows PE

    Запустите Deployment and Imaging Tools Environment (из появившейся в меню Пуск после установки Windows ADK закладки Windows Kits или через набор этого словосочетания в приглашении Поиска).

    Выполните copype для создания рабочего каталога файлов WindowsPE и копирования в него необходимых системных файлов вашей архитектуры, например:

    
    copype amd64 E:\WinPE_amd64
    		

    Выполните персонализацию своего образа WindowsPE (в случае такой необходимости). Для этого:

    Перед запуском Makewinpemedia вы можете отформатировать свой создаваемый носитель. Сценарий Makewinpemedia отформатирует ваше устройство под FAT32. Если у вас есть необходимость хранения в WindowsPE файлов с размером более 4ГБ, вы можете создать устройство USB со множеством разделов для наличия дополнительного отформатированного под NTFS раздела {Подробнее: Оптимизация образа Window PE, Microsoft.}

    Для форматирования и установки Windows PE вставленного в вашу рабочую машину создаваемого загрузочного носителя исполните сценарий Makewinpemedia с параметром /UFD, например:

    
    MakeWinPEMedia /UFD E:\WinPE_amd64 P:
    		
    [Предостережение]Предостережение

    Этот сценарий отформатирует указанное устройство, в нашем случае, Р:!

    Вы можете создать загружаемый образ ISO при помощи параметра /ISO, например:

    
    MakeWinPEMedia /ISO E:\WinPE_amd64 E:\WinPE_amd64\WinPE_amd64.iso
    		

    Для прожига DVD/ CD в Windows вы можете кликнуть в Проводнике Windows правой кнопкой и выбрать Burn disc image > Burn с последующими приглашениями на ввод.

    Для установки WindowsPE в загружаемом образе виртуальной машины через файл VHD:

    1. При помощи инструмента diskpart создайте виртуальное дисковое устройство (.vhdx) и назначьте ему букву, в нашем случае это V:

      
      diskpart
      create vdisk file="E:\WinPE.vhdx" maximum=1000
      attach vdisk
      create partition primary
      assign letter=V
      format fs=ntfs quick
      exit
      		
    2. Подготовьте это устройство с применением MakeWinPEMedia:

      
      MakeWinPEMedia /UFD E:\WinPE_amd64 V:
      		

      Отсоедините это устройство, опять воспользовавшись diskpart:

      
      diskpart
      select vdisk file="E:\WinPE.vhdx"
      detach vdisk
      exit
      		

    Загрузитесь с созданного вами носителя в требующей этого системе.

    {Подробнее: Создание загружаемого носителя Window PE, Microsoft.}

    Перенос копии загрузочного диска при помощи файла .wim

    DISM

    Инструмент командной строки Обслуживания и сопровождения развёртываемого образа (Deployment Image Servicing and Management, DISM.exe) можно применять для обслуживания и поддержки образов Windows, причём включая те, которые применяются для Windows PE, Windows RE (Windows Recovery Environment) и Windows Setup. DISM может применяться для обслуживания образа Windows (Windows IMage, .wim) или виртуального жёсткого диска (virtual hard disk .vhd либо .vhdx). DISM поставляется встроенным в Windows и доступен для запуска из командной строки или PowerShell. Дополнительно с применением DISM в PowerShell можно ознакомиться при помощи Deployment Imaging Servicing Management (DISM) Cmdlets in Windows PowerShell.

    DISM может применяться для монтирования и обслуживания образов из файла .wim, .ffu или .vhdx. Тем не менее, мы не можем применять образы, которые предшествовали нашей установленной версии DISM. Для полного технического описания WIM отсылаем вас к Windows Imaging File Format (WIM) white paper. Полный список поддерживаемых DISM платформ приводится в DISM Supported Platforms. Подробнее в DISM Overview.

    WinPE поставляется в виде файла .wim. У вас имеется возможность монтирования и приспосабливая под свои нужды WinPE образ следуя тем же процессом, что и любой иной образ Windows. Помимо общей для образов Windows и WinPE персонализации, такой как драйверы и пакеты, WinPE к тому же обладает некими собственными особенностями.

    Распространённые возможности персонализации:

    Для монтирования своего образа WinPE во временное местоположение в своём техническом устройстве из Среды инструментов развёртывания и подготовки образов (Deployment and Imaging Tools Environment):

    
    > Dism /Mount-Image /ImageFile:"E:\WinPE_amd64\media\sources\boot.wim" /index:1 /MountDir:"E:\WinPE_amd64\mount"
    		

    Для добавления драйверов устройств в свой образ WinPE применяйте DISM /add-driver. В одной команде вы можете добавлять множество драйверов, но это может стать источником проблем.

    При помощи DISM /add-package вы можете добавлять в свой образ необязательные компоненты, пакеты и поддержку языков. Например, для поддержки PowerShell, после выполнения монтирования (см. выше), исполните из Среды инструментов развёртывания и подготовки образов (Deployment and Imaging Tools Environment) следующее:

    
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-WMI.cab"  
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ru-ru\WinPE-WMI_ru-ru.cab"
    
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-NetFx.cab"  
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ru-ru\WinPE-NetFx_ru-ru.cab"
    
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-Scripting.cab"  
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ru-ru\WinPE-Scripting_ru-ru.cab"
    
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\WinPE-PowerShell.cab"  
    > Dism /Add-Package /Image:"E:\WinPE_amd64\mount" /PackagePath:"E:\bin\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\WinPE_OCs\ru-ru\WinPE-PowerShell_ru-ru.cab"
    
    > Dism /Unmount-Image /MountDir:"E:\WinPE_amd64\mount" /commit
    		

    Последняя команда завершает монтирование изменяемого образа и фиксирует в нём изменения. Подробнее о подготовке WinPE при помощи DISM в WinPE: Mount and Customize, Microsoft.

    Фиксация необходимого образа

    Если вы загрузились в необходимом устройстве, обобщите её образ для возможности развёртывания в прочих устройствах {Подробнее: Sysprep (Generalize) a Windows installation, Microsoft.} В противном случае в новом устройстве ваш образ может не обладать необходимой для него поддержкой устройств.

    Загрузите своё переносимое устройство при помощи подготовленного ранее загружаемого носителя Windows PE.

    Оптимизируйте образ (не обязательно) для сокращения времени загрузки устройства после применения этого образа. Это в особенности полезно при создании образа, который будет применяться для развёртывания в большом числе машин, скажем, в сценарии сборки со склада.

    
    DISM /image:C:\ /optimize-image /boot
    		

    Зафиксируйте необходимый раздел Windows, например:

    
    Dism /Capture-Image /ImageFile:"E:\Images\MyBoot.wim" /CaptureDir:C:\ /Name:MyBoot
    		

    Здесь E: это устройство для переноса фиксируемого образа.

    Применение созданного образа

    При применении созданного вами ранее образа вам помогут приводимые ниже сценарии.

     

    Вспомогательные сценарии

    Перевод Примеров сценариев лабораторных занятий развёртывания, Microsoft

    Скопируйте сценарии Лабораторного занятия в корень своего устройства Windows PE. Данный архив содержит следующие сценарии:

    • ApplyImage.bat: Данный сценарий применят образ Windows на новом устройстве.

      [Замечание]Замечание

      При копировании и вставке приводимого ниже содержимого для создания необходимого файла .bat при обнаружении встроенного ПО вы можете столкнуться с ошибкой. Для успешного обнаружения встроенного ПО убедитесь что в начинающейся с for /f "tokens=2* delims= " %%A строке присутствует следующий за пробелом символ табуляции между delims= и " %%A.

      
      @echo Apply-Image.bat
      @echo     Запускайте с эталонного устройства в среде WinPE.
      @echo.
      @echo     Данный сценарий зачищает ваш первичный жёсткий диск и применяет новый образ.
      @echo.
      @echo     Убедитесь что этот сценарий запускается из той папки, которая содержит все
      @echo     сценарии поддержки
      @echo.
      @echo UPDATE (November 2017)
      @echo * Добавлена поддержка для развёртываний FFU.  
      @echo.
      @echo UPDATE (JULY 2016):
      @echo * Данный сценарий останавливается сразу после применения необходимого образа.
      @echo   Это предоставляет вам возможность добавления разрозненных пакетов подготовки (siloed provisioning packages, 
      @echo   SPP)
      @echo   с тем, чтобы вы имели возможность их включения в свои инструменты восстановления.
      @echo.
      @echo   Для завершения настроек инструментов восстановления воспользуйтесь 
      @echo   после завершения данного сценария.
      @echo.
      @echo * Данный сценарий теперь содержит поддержку переменных /EA variables для более быстрых
      @echo   фиксации и восстановления образа.
      @echo.
      @echo * Данный сценарий теперь выполняет проверку того что вы загрузились из в Windows PE.
      @echo.
      @if not exist X:\Windows\System32 echo ERROR: Данный сценарий собран для запуска в Windows PE.
      @if not exist X:\Windows\System32 goto END
      @if %1.==. echo ERROR: Для выполнения этого сценария, добавьте путь к файлу образа Windows.
      @if %1.==. echo Example: ApplyImage D:\WindowsWithFrench.wim
      @if %1.==. goto END
      @echo *************************************************************************************************
      @echo  == Настраиваем схему электропитания с высокой производительностью для ускорения развёртывания ==
      @call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
      @echo *************************************************************************************************
      @echo Выполняем проверку типа развёртываемого образа
      @if "%~x1" == ".wim" (GOTO WIM)
      @if "%~x1" == ".ffu" (GOTO FFU)
      @echo *********************************************************************
      @if not "%~x1" == ".ffu". if not "%~x1" == ".wim" echo Please use this script with a WIM or FFU image.
      @if not "%~x1" == ".ffu". if not "%~x1" == ".wim" GOTO END
      :WIM
      @echo Стартуем развёртывание WIM
      @echo *********************************************************************
      @echo Выполняем проверку в каком режиме запускалось это устройство: в BIOS или в UEFI.
      wpeutil UpdateBootInfo
      for /f "tokens=2* delims= 	" %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B
      @echo            Обратите внимание: delims отделяется символом TAB вслед за символом пробела.
      @if x%Firmware%==x echo ERROR: Не могу определить под каким встроенным ПО мы запущены.
      @if x%Firmware%==x echo        Обычно помогает исправление: В приведённой выше команде:
      @if x%Firmware%==x echo             for /f "tokens=2* delims=    "
      @if x%Firmware%==x echo        ...замените пробелы на символ TAB следующий за пробелом.
      @if x%Firmware%==x goto END
      @if %Firmware%==0x1 echo Данное устройство запущено в режиме BIOS. 
      @if %Firmware%==0x2 echo Данное устройство запущено в режиме UEFI. 
      @echo *********************************************************************
      @echo Вы хотите создать раздел восстановления (Recovery)?
      @echo    (Если вы намерены работать с FFU, и вам требуется 
      @echo     расширить свой раздел Windows после применения такого FFU, наберите N). 
      @SET /P RECOVERY=(Y or N):
      @if %RECOVERY%.==y. set RECOVERY=Y
      @echo Форматирование вашего первичного диска...
      @if %Firmware%==0x1 echo    ...с применением формата и разделов BIOS (MBR).
      @if %Firmware%==0x2 echo    ...с применением формата и разделов UEFI (GPT). 
      @echo ПРЕДОСТЕРЕЖЕНИЕ: все имеющиеся на этом диске данные будут УДАЛЕНЫ.
      @SET /P READY=Уничтожить все данные и продолжить? (Y or N):
      @if %READY%.==y. set READY=Y
      @if not %READY%.==Y. goto END
      @if %Firmware%.==0x1. if %RECOVERY%.==Y. diskpart /s CreatePartitions-BIOS.txt
      @if %Firmware%.==0x1. if not %RECOVERY%.==Y. diskpart /s CreatePartitions-BIOS-FFU.txt
      @if %Firmware%.==0x2. if %RECOVERY%.==Y. diskpart /s CreatePartitions-UEFI.txt
      @if %Firmware%.==0x2. if not %RECOVERY%.==Y. diskpart /s CreatePartitions-UEFI-FFU.txt
      @echo *********************************************************************
      @echo  == Применить к разделу Windows указанный образ ==
      @SET /P COMPACTOS=Развёртывать как Compact OS? (Y or N):
      @if %COMPACTOS%.==y. set COMPACTOS=Y
      @echo Содержит ли данный образ Extended Attributes?
      @echo    (Если вы не уверены, наберите N).
      @SET /P EA=(Y or N):
      @if %EA%.==y. set EA=Y
      @if %COMPACTOS%.==Y.     if %EA%.==Y.     dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\ /Compact /EA
      @if not %COMPACTOS%.==Y. if %EA%.==Y.     dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\ /EA
      @if %COMPACTOS%.==Y.     if not %EA%.==Y. dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\ /Compact
      @if not %COMPACTOS%.==Y. if not %EA%.==Y. dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\
      @echo *********************************************************************
      @echo == Копируем файлы запуска в раздел System ==
      W:\Windows\System32\bcdboot W:\Windows /s S:
      @echo *********************************************************************
      @echo   Следующие шаги:
      @echo   * Добавляем классические прикладные приложения Windows (не обязательно):
      @echo       DISM /Apply-SiloedPackage /ImagePath:W:\ 
      @echo            /PackagePath:"D:\App1.spp" /PackagePath:"D:\App2.spp"  ...
      @echo.
      @echo   * Настраиваем раздел Recovery при помощи ApplyRecovery.bat
      @echo.      
      @echo   * Reboot:
      @echo       exit
      @GOTO END
      :FFU
      @echo Запускаем развёртывание FFU 
      @echo list disk > x:\listdisks.txt
      @echo exit >> x:\listdisks.txt
      @diskpart /s x:\listdisks.txt
      @del x:\listdisks.txt
      @echo Введите номер диска того устройства, в которое вы намерены развёртывать FFU (обычно 0).
      @SET /P DISKNUMBER=(Enter the Disk Number from above):
      @echo Это уничтожит все данные на диске %DISKNUMBER%. Продолжать?
      @SET /P ERASEALL=(Y or N):
      @if %ERASEALL%.==y. set ERASEALL=Y
      @if %ERASEALL%==Y DISM /apply-ffu /ImageFile=%1 /ApplyDrive:\\.\PhysicalDrive%DISKNUMBER%
      @if not %ERASEALL%==Y GOTO END
      @echo FFU применён. Вы хотите настроить раздел восстановления?
      @SET /P CONFIGRECOVERY=(Y or N):
      @if %CONFIGRECOVERY%.==y. SET CONFIGRECOVERY=Y
      @if %CONFIGRECOVERY%==Y ApplyRecovery.bat
      @if not %CONFIGRECOVERY%==Y GOTO END
      :END
      		
    • Сценарий ApplyImage.bat полагается на приводимые ниже сценарии DiskPart, которые обязаны присутствовать в той же папке. Для форматирования и настройки разделов жёсткого диска применяйте эти сценарии совместно с DiskPart, включая инструментарий восстановления. Для установления соответствия вашему устройству, если это необходимо, отрегулируйте размеры разделов.

      CreatePartitions-UEFI.txt создаёт разделы System, MSR, Windows и инструментов восстановления для устройств с UEFI.

      Данный сценарий временно присваивает такие буквы: System=S, Windows=W, а Recovery=R. Раздел MSR не получает буквенного обозначения. Значение буквы W применяется во избежание потенциального конфликта букв. После перезапуска разделу Windows присваивается буква C, а прочие разделы не получают буквенного обозначения.

      Раздел Recovery обязан быть разделом после раздела Windows для гарантии того, что winre.wim может отслеживаться в актуальном состоянии на протяжении жизни данного устройства.

      Приводимая ниже схема отображает получаемые в результате разделы:

       

      Рисунок B-1



      
      rem == CreatePartitions-UEFI.txt ==
      rem == Данные команды применяются с помощью DiskPart для
      rem    создания четырёх разделов
      rem    для устройства на основе UEFI/GPT.
      rem    Если требуется, отрегулируйте размеры соответствующего раздела для 
      rem    заполнения вашего диска. ==
      select disk 0
      clean
      convert gpt
      rem == 1. Раздел System =========================
      create partition efi size=100
      rem    ** Замечание: Для расширенного формата устройств 4Kn,
      rem               замените  это значение на размер = 260 ** 
      format quick fs=fat32 label="System"
      assign letter="S"
      rem == 2. Раздел Microsoft Reserved (MSR) =======
      create partition msr size=16
      rem == 3. Раздел Windows ========================
      rem ==    a. Создаём раздел Windows ==========
      create partition primary 
      rem ==    b. Создаём пространство для инструментов восстановления ===
      rem       ** Обновите это размер для приведения в соответствие
      rem          имеющимися инструментами восстановления (winre.wim)
      rem          плюс немного свободного пространства.
      shrink minimum=500
      rem ==    c. Подготавливаем раздел Windows ========= 
      format quick fs=ntfs label="Windows"
      assign letter="W"
      rem === 4. Раздел Recovery ======================
      create partition primary
      format quick fs=ntfs label="Recovery"
      assign letter="R"
      set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
      gpt attributes=0x8000000000000001
      list volume
      exit
      		
    • CreatePartitions-UEFI-FFU.txt Данный сценарий отталкивается от CreatePartitions-UEFI.txt, однако он не создаёт раздела восстановления. Это обусловлено тем, что наш раздел Windows выступает самым последним разделом на своём диске и может расширяться. В случае применения данного сценария наш раздел восстановления может быть настроен позднее при помощи ApplyRecovery.bat.

      
      rem == CreatePartitions-UEFI-FFU.txt ==
      rem == Данные команды применяются DiskPart для
      rem    создания четырёх разделов
      rem    под устройство на основе UEFI/GPT.
      rem    Если требуется, отрегулируйте размеры соответствующего раздела для 
      rem    заполнения вашего диска. ==
      select disk 0
      clean
      convert gpt
      rem == 1. Раздел System =========================
      create partition efi size=100
      rem    ** Замечание: Для расширенного формата устройств 4Kn,
      rem               замените  это значение на размер = 260 ** 
      format quick fs=fat32 label="System"
      assign letter="S"
      rem == 2. Раздел Microsoft Reserved (MSR) =======
      create partition msr size=16
      rem == 3. Раздел Windows ========================
      rem ==    a. Создаём раздел Windows ==========
      create partition primary 
      rem ==    c. Подготавливаем раздел Windows ========= 
      format quick fs=ntfs label="Windows"
      assign letter="W"
      list volume
      exit
       	   
    • CreatePartitions-BIOS.txt создаёт разделы System, MSR, Windows и инструментов восстановления для устройств с BIOS.

      Данный сценарий временно присваивает такие буквы: System=S, Windows=W, а Recovery=R. Значение буквы W применяется во избежание потенциального конфликта букв. После перезапуска разделу Windows присваивается буква C, а прочие разделы не получают буквенного обозначения.

      Раздел Recovery обязан быть разделом после раздела Windows для гарантии того, что winre.wim может отслеживаться в актуальном состоянии на протяжении жизни данного устройства.

      Приводимая ниже схема отображает получаемые в результате разделы:

       

      Рисунок B-2



      
      rem == CreatePartitions-BIOS.txt ==
      rem == Эти команды применяются DiskPart для
      rem    создания трёх разделов
      rem    в устройстве на основе BIOS/MBR.
      rem    Если требуется, отрегулируйте размеры соответствующего раздела для 
      rem    заполнения вашего диска. ==
      select disk 0
      clean
      rem == 1. Раздел System ======================
      create partition primary size=100
      format quick fs=ntfs label="System"
      assign letter="S"
      active
      rem == 2. Раздел Windows =====================
      rem ==    a. Создаём раздел Windows =======
      create partition primary
      rem ==    b. Создаём пространство для инструментов восстановления ===
      rem       ** Обновите это размер для приведения в соответствие
      rem          имеющимися инструментами восстановления (winre.wim)
      rem          плюс немного свободного пространства.
      shrink minimum=500
      rem ==    c. Подготавливаем раздел Windows ========= 
      format quick fs=ntfs label="Windows"
      assign letter="W"
      rem == 3. Раздел Recovery ====================
      create partition primary
      format quick fs=ntfs label="Recovery image"
      assign letter="R"
      set id=27
      list volume
      exit
       	   
    • CreatePartitions-BIOS-FFU.txt Данный сценарий отталкивается от CreatePartitions-BIOS.txt, однако он не создаёт раздела восстановления. Это обусловлено тем, что наш раздел Windows выступает самым последним разделом на своём диске и может расширяться. В случае применения данного сценария наш раздел восстановления может быть настроен позднее при помощи ApplyRecovery.bat.

      
      rem == CreatePartitions-BIOS-FFU.txt ==
      rem == Эти команды применяются DiskPart для
      rem    создания трёх разделов
      rem    в устройстве на основе BIOS/MBR.
      rem    Если требуется, отрегулируйте размеры соответствующего раздела для 
      rem    заполнения вашего диска. ==
      select disk 0
      clean
      rem == 1. Раздел System ======================
      create partition primary size=100
      format quick fs=ntfs label="System"
      assign letter="S"
      active
      rem == 2. Раздел Windows =====================
      rem ==    a. Создаём раздел Windows =======
      create partition primary
      rem ==    c. Подготавливаем раздел Windows ========= 
      format quick fs=ntfs label="Windows"
      assign letter="W"
      list volume
      exit
       	   
    • ApplyRecovery.bat Пользуйтесь этим сценарием для подготовки раздела восстановления Windows. Этот сценарий вызывается ApplyImage.bat, однако может также запускаться самостоятельно.

      [Замечание]Замечание

      При копировании и вставке приводимого ниже содержимого для создания необходимого файла .bat при обнаружении встроенного ПО вы можете столкнуться с ошибкой. Для успешного обнаружения встроенного ПО убедитесь что в начинающейся с for /f "tokens=2* delims= " %%A строке присутствует следующий за пробелом символ табуляции между delims= и " %%A.

      
      @echo == ApplyRecovery.bat ==
      @rem *********************************************************************
      @echo Выполняем проверку в каком режиме запускалось это устройство: в BIOS или в UEFI.
      wpeutil UpdateBootInfo
      for /f "tokens=2* delims=  " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B
      @echo            Обратите внимание: за delims с пробелом следует символ TAB.
      @if x%Firmware%==x echo ERROR: Не могу определить под каким встроенным ПО мы запущены.
      @if x%Firmware%==x echo        Обычно помогает исправление: В приведённой выше команде:
      @if x%Firmware%==x echo             for /f "tokens=2* delims=    "
      @if x%Firmware%==x echo        ...замените пробелы на символ TAB следующий за пробелом.
      @if x%Firmware%==x goto END
      @if %Firmware%==0x1 echo The PC is booted in BIOS mode. 
      @if %Firmware%==0x2 echo The PC is booted in UEFI mode. 
      @echo  *********************************************************************
      @echo У вас на этом диске уже имеется раздел восстановления? (Y или N):
      @SET /P RECOVERYEXIST=(Y or N):
      @if %RECOVERYEXIST%.==y. set RECOVERYEXIST=Y
      @if %RECOVERYEXIST%.==Y. GOTO COPYTOTOOLSPARTITION
      @if not %RECOVERYEXIST%.==Y. GOTO CREATEFFURECOVERY
      @echo  *********************************************************************
      :COPYTOTOOLSPARTITION
      @echo  == Копируем имеющийся образ Windows RE в свой раздел инструментов Windows RE ==
      md R:\Recovery\WindowsRE
      xcopy /h W:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
      @echo  *********************************************************************
      @echo  == Регистрируем значение местоположения для инструментов восстановления ==
      W:\Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target W:\Windows
      @echo  *********************************************************************
      @IF EXIST W:\Recovery\Customizations\USMT.ppkg (GOTO CUSTOMDATAIMAGEWIM) else goto HIDEWIMRECOVERYTOOLS
      :CUSTOMDATAIMAGEWIM
      @echo  == В случае Compact OS, предоставляется пакет восстановления единственного экземпляра ==
      @echo.     
      @echo     *Замечание: данный шаг работает только если вы создали пакет ScanState с названием
      @echo      USMT.ppkg как это указывается в лабораторном занятии OEM Deployment. Если вы не следовали 
      @echo      этим шагом в данном лабораторном занятии, выберите N.
      @echo.      
      @echo     Варианты: N: Нет
      @echo               Y: Да
      @echo               D: Да, но отложите шаги очистки до первого запуска.
      @echo                  Воспользуйтесь этим если шаги очистки требуют более 30 минут.
      @echo                  отложите шаги очистки до первого запуска.
      @SET /P COMPACTOS=Deploy as Compact OS? (Y, N, or D):
      @if %COMPACTOS%.==y. set COMPACTOS=Y
      @if %COMPACTOS%.==d. set COMPACTOS=D
      @if %COMPACTOS%.==Y. dism /Apply-CustomDataImage /CustomDataImage:W:\Recovery\Customizations\USMT.ppkg /ImagePath:W:\ /SingleInstance
      @if %COMPACTOS%.==D. dism /Apply-CustomDataImage /CustomDataImage:W:\Recovery\Customizations\USMT.ppkg /ImagePath:W:\ /SingleInstance /Defer
      @echo  *********************************************************************
      :HIDEWIMRECOVERYTOOLS
      @echo == Скрываем раздел инструментов восстановления
      if %Firmware%==0x1 diskpart /s %~dp0HideRecoveryPartitions-BIOS.txt
      if %Firmware%==0x2 diskpart /s %~dp0HideRecoveryPartitions-UEFI.txt
      @echo *********************************************************************
      @echo == Проверяем состояние конфигурации своих образов. ==
      W:\Windows\System32\Reagentc /Info /Target W:\Windows
      @echo    (Замечание: состояние Windows RE может оказаться Disabled, это НОРМАЛЬНО.)
      @echo *********************************************************************
      @echo      Всё сделано!
      @echo      Отключите устройство USB drive от эталонного диска.
      @echo      Для перезапуска наберите exit.
      @echo.
      GOTO END
      :CREATEFFURECOVERY
      @echo *********************************************************************
      @echo == Создание раздела инструментов восстановления
      @if %Firmware%==0x1 diskpart /s CreateRecoveryPartitions-BIOS.txt
      @if %Firmware%==0x2 diskpart /s CreateRecoveryPartitions-UEFI.txt
      @echo находим диск Windows
      @echo  *********************************************************************
      @IF EXIST C:\Windows SET windowsdrive=C:\
      @IF EXIST D:\Windows SET windowsdrive=D:\
      @IF EXIST E:\Windows SET windowsdrive=E:\
      @IF EXIST W:\Windows SET windowsdrive=W:\
      @echo Наш диск Windows это %windowsdrive%
      md R:\Recovery\WindowsRE
      @echo  *********************************************************************
      @echo Поиск Winre.wim
      @IF EXIST %windowsdrive%Recovery\WindowsRE\winre.wim SET recoveryfolder=%windowsdrive%Recovery\WindowsRE\
      @IF EXIST %windowsdrive%Windows\System32\Recovery\winre.wim SET recoveryfolder=%windowsdrive%Windows\System32\Recovery\
      @echo  *********************************************************************
      @echo копирование Winre.wim
      xcopy /h %recoveryfolder%Winre.wim R:\Recovery\WindowsRE\
      @echo  *********************************************************************
      @echo  == Регистрируем значение местоположения инструментов восстановления ==
      %windowsdrive%Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target %windowsdrive%Windows
      @echo  *********************************************************************
      @IF EXIST W:\Recovery\Customizations\USMT.ppkg (GOTO CUSTOMDATAIMAGEFFU) else goto HIDERECOVERYTOOLSFFU
      :CUSTOMDATAIMAGEFFU
      @echo  == В случае Compact OS, предоставляется пакет восстановления единственного экземпляра ==
      @echo.     
      @echo     *Замечание: данный шаг работает только если вы создали пакет ScanState с названием
      @echo      USMT.ppkg как это указывается в лабораторном занятии OEM Deployment. Если вы не следовали 
      @echo      этим шагом в данном лабораторном занятии, выберите N.
      @echo.      
      @echo     Варианты: N: Нет
      @echo               Y: Да
      @echo               D: Да, но отложите шаги очистки до первого запуска.
      @echo                  Воспользуйтесь этим если шаги очистки требуют более 30 минут.
      @echo                  отложите шаги очистки до первого запуска.
      @SET /P COMPACTOS=Deploy as Compact OS? (Y, N, or D):
      @if %COMPACTOS%.==y. set COMPACTOS=Y
      @if %COMPACTOS%.==d. set COMPACTOS=D
      @if %COMPACTOS%.==Y. dism /Apply-CustomDataImage /CustomDataImage:%windowsdrive%Recovery\Customizations\USMT.ppkg /ImagePath:%windowsdrive% /SingleInstance
      @if %COMPACTOS%.==D. dism /Apply-CustomDataImage /CustomDataImage:%windowsdrive%Recovery\Customizations\USMT.ppkg /ImagePath:%windowsdrive% /SingleInstance /Defer
      :HIDERECOVERYTOOLSFFU
      @rem *********************************************************************
      @echo == Скрываем раздел инструментов восстановления
      @if %Firmware%==0x1 diskpart /s HideRecoveryPartitions-BIOS.txt
      @if %Firmware%==0x2 diskpart /s HideRecoveryPartitions-UEFI.txt
      @echo *********************************************************************
      @echo == Проверяем значение состояния своих образов. ==
      %windowsdrive%Windows\System32\Reagentc /Info /Target %windowsdrive%Windows
      @echo    (Замечание: состояние Windows RE может оказаться Disabled, это НОРМАЛЬНО.)
      @echo *********************************************************************
      @echo      Всё сделано!
      @echo      Отключите устройство USB drive от эталонного диска.
      @echo      Для перезапуска наберите exit.
      @GOTO END
      :END
       	   
    • CreateRecoveryPartitions-UEFI.txt

      
      rem == CreateRecoveryPartitions-UEFI.txt ==
      rem == Находим и помечаем раздел Windows
      rem ** Данный сценарий полагается на схему разделов из
      rem    CreatePartitions-UEFI или CreatePartitions-UEFI-FFU
      select disk 0
      select partition 3
      assign letter="W"
      rem == Расширяем свой раздел Windows 
      extend
      rem == Создаём пространство для инструментов восстановления
      rem ** Обновляем данный размер для приведения в соответствие размеру
      rem    наших инструментов восстановления (winre.wim)
      rem    плюс немного свободного пространства.
      shrink minimum=500
      rem == Создаём раздел восстановления
      create partition primary
      format quick fs=ntfs label="Recovery"
      assign letter="R"
      set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
      gpt attributes=0x8000000000000001
      list volume
      exit 	   
      
       	   
    • CreateRecoveryPartitions-BIOS.txt

      
      rem == CreateRecoveryPartitions-BIOS.txt ==
      rem == Находим и помечаем раздел Windows
      rem ** Данный сценарий полагается на схему разделов из
      rem    CreatePartitions-BIOS или CreatePartitions-BIOS-FFU
      select disk 0
      select partition 2
      assign letter="W"
      rem == Расширяем раздел Windows ==
      shrink minimum=500
      extend
      rem == Создаём пространство для инструментов восстановления
      rem ** Обновляем данный размер для приведения в соответствие размеру
      rem    наших инструментов восстановления (winre.wim)
      rem    плюс немного свободного пространства.
      shrink minimum=500
      rem == Подготавливаем свой раздел восстановления ====== 
      select disk 0
      create partition primary
      format quick fs=ntfs label="Recovery image"
      assign letter="R"
      set id=27
      list volume
      exit
       	   
    • HideRecoveryPartitions-UEFI.txt

      
      rem === HideRecoveryPartitions-UEFI.txt ===
      rem ** Данный сценарий полагается на схему разделов из 
      rem    CreatePartitions-UEFI или CreatePartitions-UEFI-FFU
      select disk 0
      select partition 4
      set id=de94bba4-06d1-4d40-a16a-bfd50179d6ac
      gpt attributes=0x8000000000000001
      remove
      list volume
      exit
       	   
    • Макет запуска LayoutModification.xml в Windows 10 предоставляет OEM возможность добавления к макету <Пуск> плиток по умолчанию для включения веб- ссылок, дополнительных плиток, приложений Windows, и прикладных приложений. OEM- производители могут применять данный макет для его использования в нескольких областях или рынка не дублируя большую часть работы. Кроме того, OEM- производители могут добавлять до ьрёх приложений по умолчанию в раздел часто используемых приложений в системной области, что предоставляет пользователю управляемые системой списки, включая важные или часто применяемые системные местоположения и недавно установленные приложения.

      Чтобы воспользоваться преимуществами всей этой новой функциональности и получить наиболее надёжный и законченный опыт настройки первичного экрана для Windows 10 рассмотрите возможность наличия файла LayoutModification.xml. Данный файл указывает как в меню <Пуск> должны размещаться плитки OEM. Дополнительные сведения о настройке нового макета начального экрана доступны в разделе Настройка начального экрана Windows 10 документации для партнёров по Windows 10.

      
      <LayoutModificationTemplate
          xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
          xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
          xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
          Version="1">
        <RequiredStartGroupsCollection>
          <RequiredStartGroups
            Region="DE|ES|FR|GB|IT|US">
            <AppendGroup Name="Fabrikam Group 1">
                <start:DesktopApplicationTile
                  DesktopApplicationID="Microsoft.Windows.Explorer" 
                Size="2x2" 
                Row="0" 
                Column="4"/>
            </AppendGroup>    
            <AppendGroup
              Name="Fabrikam Group 2">
              <start:Tile AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge" 
                Size="2x2" 
                Row="0"
                Column="0"/>
                <!-- <start:Tile AppUserModelID="App2!App" Size="2x2" Row="2" Column="0"/>  Update the APUMID to reflect the app you installed with the region specified -->
            </AppendGroup>
          </RequiredStartGroups>
          <RequiredStartGroups>
            <AppendGroup Name="Fabrikam Group 1">
              <start:SecondaryTile
                AppUserModelID="Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge"
                TileID="MyWeblinkTile"
                Arguments="http://www.fabrikam.com"
                DisplayName="Fabrikam"
                Square150x150LogoUri="ms-appx:///Assets/MicrosoftEdgeSquare150x150.png"
                Wide310x150LogoUri="ms-appx:///Assets/MicrosoftEdgeWide310x150.png"
                ShowNameOnSquare150x150Logo="true"
                ShowNameOnWide310x150Logo="false"
                BackgroundColor="#FF112233"
                Size="2x2"
                Row="0"
                Column="2"/>
              <!-- <start:Tile AppUserModelID="App2!App" Size="2x2" Row="2" Column="0"/>  Update the APUMID to reflect the app you installed with no specific region -->
            </AppendGroup>    
          </RequiredStartGroups>
        </RequiredStartGroupsCollection> 
        <AppendOfficeSuite/>
        <AppendOfficeSuiteChoice Choice="DesktopBridgeSubscription"/>      
      </LayoutModificationTemplate>
       	   
    • При помощи TaskbarLayoutModification.xml вы можете закрепить приложения в Панели задач. За дополнительными сведениями отсылаем вас к разделу Плитки панели задач OEM.

      
      <?xml version="1.0" encoding="utf-8"?>
      <LayoutModificationTemplate
      xmlns="http://schemas.microsoft.com/Start/2014/LayoutModification"
      xmlns:defaultlayout="http://schemas.microsoft.com/Start/2014/FullDefaultLayout"
      xmlns:start="http://schemas.microsoft.com/Start/2014/StartLayout"
      xmlns:taskbar="http://schemas.microsoft.com/Start/2014/TaskbarLayout"
      Version="1">
      
      <CustomTaskbarLayoutCollection PinListPlacement="Replace">
          <defaultlayout:TaskbarLayout>
              <taskbar:TaskbarPinList>
                  <taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
                  <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk"/>
              </taskbar:TaskbarPinList>
          </defaultlayout:TaskbarLayout>
          <defaultlayout:TaskbarLayout Region="US|GB">
              <taskbar:TaskbarPinList >
                  <taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk" />
                  <taskbar:UWA AppUserModelID="Microsoft.WindowsCalculator_8wekyb3d8bbwe!App" />
              </taskbar:TaskbarPinList>
          </defaultlayout:TaskbarLayout>
          <defaultlayout:TaskbarLayout Region="CN|TW">
              <taskbar:TaskbarPinList>
                  <taskbar:DesktopApp DesktopApplicationLinkPath="%APPDATA%\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk" />
                  <taskbar:UWA AppUserModelID="Microsoft.Windows.Photos_8wekyb3d8bbwe!App" />
                  <taskbar:DesktopApp DesktopApplicationLinkPath="%ALLUSERSPROFILE%\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk"/>
              </taskbar:TaskbarPinList>
          </defaultlayout:TaskbarLayout>
      </CustomTaskbarLayoutCollection>
      </LayoutModificationTemplate>
       	   
    • Запуск для аудита

      Добавляет файл ответов для образа Windows в C:\mount\windows\Windows\Panther\unattend.xml для указания ему при запуске в режиме аудита. Вы можете создавать этот файл ответов в Диспетчере образа системы Windows Windows System Image Manager.

      BootToAudit-x64

      
      <?xml version="1.0" encoding="utf-8"?>
      <unattend xmlns="urn:schemas-microsoft-com:unattend">
      <!-- BootToAudit-x64.xml -->
          <settings pass="oobeSystem">
              <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                  <Reseal>
                      <Mode>Audit</Mode>
                  </Reseal>
              </component>
          </settings>
      </unattend>
       	   
    • Сохранение настроек Windows при восстановлении

      Windows автоматически не сохраняет настройки, создаваемые в файлах установки unattend.xml , ни при персонализации меню Пуск Windows, создаваемого при помощи LayoutModification.xml при полном сбросе системы, ни при первой регистрации через oobe.xml. Для гарантии сохранности ваших персональных настроек, они содержат этапы помещения файлов unattend.xml, LayoutModification.xml и oobe.xml обратно на место. Вот некоторые образца сценариев, которые показывают как удерживать эти настройки и помещать их обратно в точки. Сохраните копии unattend.xml, LayoutModification.xml и oobe.xml плюс два данных текстовых файла ResetConfig.xml и EnableCustomizations.cmd в C:\Recovery\OEM\::

      ResetConfig.xml

      
      <?xml version="1.0" encoding="utf-8"?>
      <!-- ResetConfig.xml -->
      <Reset>
        <Run Phase="BasicReset_AfterImageApply">
          <Path>EnableCustomizations.cmd</Path>
          <Duration>2</Duration>
        </Run>
        <Run Phase="FactoryReset_AfterImageApply">
          <Path>EnableCustomizations.cmd</Path>
          <Duration>2</Duration>
        </Run>
      </Reset>
       	   

      EnableCustomizations.cmd

      
      rem EnableCustomizations.cmd
      
      rem Set the variable %TARGETOS%      (Typically this is C:\Windows)
      for /F "tokens=1,2,3 delims= " %%A in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\RecoveryEnvironment" /v TargetOS') DO SET TARGETOS=%%C
      
      rem Set the variable %TARGETOSDRIVE% (Typically this is C:)
      for /F "tokens=1 delims=\" %%A in ('Echo %TARGETOS%') DO SET TARGETOSDRIVE=%%A
      
      rem Add back Windows settings, Start menu, and OOBE.xml customizations
      copy "%TARGETOSDRIVE%\Recovery\OEM\Unattend.xml" "%TARGETOS%\Panther\Unattend.xml" /y
      copy "%TARGETOSDRIVE%\Recovery\OEM\LayoutModification.xml" "%TARGETOSDRIVE%\Users\Default\AppData\Local\Microsoft\Windows\Shell\LayoutModification.xml" /y
      xcopy "%TARGETOSDRIVE%\Recovery\OEM\OOBE\Info" "%TARGETOS%\System32\Info\" /s
      
      rem Recommended: Create a pagefile for devices with 1GB or less of RAM.
      wpeutil CreatePageFile /path=%TARGETOSDRIVE%\PageFile.sys /size=256
       	   

      Для знакомства с применением точек расширения для кнопки включения сброса обратитесь к разделу Add extensibility scripts to push-button reset.

    • Повторная установка прикладных приложений поставки Windows.

      После добавления нового языка установите заново прикладные приложения поставки Windows. Вы можете устанавливать эти прикладные приложения повторно без их первичного удаления.

      ReinstallInboxApps-x64.cmd

      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Getstarted_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Getstarted_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.GetHelp_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.GetHelp_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Messaging_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Messaging_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Microsoft3DViewer_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Microsoft3DViewer_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.MicrosoftSolitaireCollection_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.MicrosoftSolitaireCollection_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Advertising.Xaml.x64.10.0.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Advertising.Xaml.x86.10.0.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Services.Store.Engagement.x64.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Services.Store.Engagement.x86.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.MSPaint_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.MSPaint_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Office.OneNote_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Office.OneNote_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.OneConnect_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.OneConnect_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.People_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.People_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Services.Store.Engagement.x64.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Services.Store.Engagement.x86.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Advertising.Xaml.x64.10.0.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Advertising.Xaml.x86.10.0.appx
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.SkypeApp_kzf8qxf38zg5c.appxbundle /licensepath:.\Appx\Microsoft.SkypeApp_kzf8qxf38zg5c.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.StorePurchaseApp_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.StorePurchaseApp_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Wallet_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Wallet_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WebMediaExtensions_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WebMediaExtensions_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Windows.Photos_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Windows.Photos_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsAlarms_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsAlarms_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsCalculator_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsCalculator_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsCamera_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsCamera_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsCommunicationsApps_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsCommunicationsApps_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Advertising.Xaml.x64.10.0.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Advertising.Xaml.x86.10.0.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsFeedbackHub_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsFeedbackHub_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsMaps_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsMaps_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.7.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.7.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsSoundRecorder_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsSoundRecorder_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WindowsStore_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.WindowsStore_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.XboxApp_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.XboxApp_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.XboxGameOverlay_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.XboxGameOverlay_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.XboxIdentityProvider_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.XboxIdentityProvider_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.XboxSpeechToTextOverlay_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.XboxSpeechToTextOverlay_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.ZuneMusic_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.ZuneMusic_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.ZuneVideo_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.ZuneVideo_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\microsoft.print3d_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\microsoft.print3d_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.Xbox.TCUI_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.Xbox.TCUI_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Framework.x86.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x64.1.6.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.NET.Native.Runtime.x86.1.6.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.XboxGamingOverlay_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.XboxGamingOverlay_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.MixedReality.Portal_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.MixedReality.Portal_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.ScreenSketch_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.ScreenSketch_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.YourPhone_8wekyb3d8bbwe.appxbundle /licensepath:.\Appx\Microsoft.YourPhone_8wekyb3d8bbwe.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.HEIFImageExtension_8wekyb3d8bbwe.x64.appx /licensepath:.\Appx\Microsoft.HEIFImageExtension_8wekyb3d8bbwe.x64.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VP9VideoExtensions_8wekyb3d8bbwe.x64.appx /licensepath:.\Appx\Microsoft.VP9VideoExtensions_8wekyb3d8bbwe.x64.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.WebpImageExtension_8wekyb3d8bbwe.x64.appx /licensepath:.\Appx\Microsoft.WebpImageExtension_8wekyb3d8bbwe.x64.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      @echo Optional codecs - the following packages are optional depending on your codec choices and needs
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.HEVCVideoExtension_8wekyb3d8bbwe.x64.appx /licensepath:.\Appx\Microsoft.HEVCVideoExtension_8wekyb3d8bbwe.x64.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx 
      
      DISM /image:C:\Mount\Windows /add-ProvisionedAppxPackage /packagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.MPEG2VideoExtension_8wekyb3d8bbwe.x64.appx /licensepath:.\Appx\Microsoft.MPEG2VideoExtension_8wekyb3d8bbwe.x64.xml /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x64.14.00.appx /dependencypackagepath:C:\Temp\Lab\Apps\Inbox\amd64\Microsoft.VCLibs.x86.14.00.appx
       	   
    • Поиск букв устройств при помощи сценария

      Для выявления устройств, которые обладают папкой с названием "Images" воспользуйтесь данным сценарием в Windows PE:

      
      @echo Find a drive that has a folder titled Images.
      @for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @if exist %%a:\Images\ set IMAGESDRIVE=%%a
      @echo The Images folder is on drive: %IMAGESDRIVE%
      @dir %IMAGESDRIVE%:\Images /w
       	   
     

    Применение созданного образа

    Запустите своё устройство при помощи созданного ранее Windows PE.

    Очистите необходимый жёсткий диск и настройте новые разделы жёсткого диска при помощи приведённого выше сценария CreatePartitions-UEFI.txt (или CreatePartitions-BIOS.txt для более старых устройств с наследованием - legacy - BIOS).

    Ниже приводится упрощённый сценарий применения образа:

    
    diskpart /s CreatePartitions-UEFI.txt
    		

    Примените необходимый образ воспользовавшись сценарием из предыдущего раздела, например:

    
    E:\ApplyImage.bat E:\Images\MyBoot.wim
    		

    Ниже приводится упрощённый сценарий применения образа для созданной нами разбивки диска:

    
    rem == ApplyImage.bat ==
    
    rem == Данные команды развёртывают предписанный файл образа Windows
    rem    в раздел Windows partition и настраивают системный раздел.
    
    rem    Usage:   ApplyImage WimFileName 
    rem    Example: ApplyImage E:\Images\ThinImage.wim ==
    
    rem == Устанавливаем высокопроизводительную схему электропитания для ускорения развёртывания ==
    call powercfg /s 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
    
    rem == Применяем указанный образ к разделу Windows ==
    dism /Apply-Image /ImageFile:%1 /Index:1 /ApplyDir:W:\
    
    rem == Копируем файлы запуска в раздел System ==
    W:\Windows\System32\bcdboot W:\Windows /s S:
    
    :rem == Копируем образ Windows RE image в
    :rem    раздел инструментов Windows RE  ==
    md R:\Recovery\WindowsRE
    xcopy /h W:\Windows\System32\Recovery\Winre.wim R:\Recovery\WindowsRE\
    
    :rem == Регистрируем местоположение инструментов восстановления ==
    W:\Windows\System32\Reagentc /Setreimage /Path R:\Recovery\WindowsRE /Target W:\Windows
    
    :rem == Проверяем значение состояния конфигурации своих образов. ==
    W:\Windows\System32\Reagentc /Info /Target W:\Windows
    		

    Источник: Capture and apply a Windows image using a single .WIM file. Если ваш файл образа не умещается на один носитель, вы можете разделить его на несколько носителей.

    Перенос копии загрузочного диска при помощи robocopy

    Разбиение диска на разделы

    Разбить диск на разделы можно следуя процедуре предыдущего раздела или из консоли diskmgmt.msc.

    Копирование загрузочного диска при помощи robocopy

    Файлы со старого диска можно скопировать при помощи утилиты robocopy. Данный вариант, теоретически, может оказаться привлекательным для определённой дефрагментации и избавления от шлака. Например:

    
    robocopy E:\ D:\ /E /COPYALL /SL /XJ /R:3 /W:3 /UNILOG:"D:\rcopy.log" /TEE
    		

    Возможные ошибки копирования фиксируются в файле rcopy.log. Подробнее о вариантах применения robocopy, например, в статье Использование Robocopy для синхронизации и резервного копирования файлов, примеры.

    Восстановление начального загрузчика

    Восстановление загрузчика UEFI/GPT.

    Определяем системный раздел:

    
    > Diskpart
    Diskpart> List vol
    
     Volume ###  Ltr  Label      FS     Type       Size    Status
     ----------  ---  ---------- -----  ---------  ------  --------
     Volume 0     F                     DVD-ROM        0B  No Media
     Volume 1                    FAT32  Partition   100MB  Healthy
     Volume 2                    NTFS   Partition   350MB  Healthy
     Volume 3     C              NTFS   Partition    99MB  Healthy
    		

    В нашем случае это Volume 1 с типом FAT32 и размером 100MB. Назначаем ему букву M:

    
    Diskpart> select volume 1
    Diskpart> assign letter M:
    Diskpart> exit
    		

    Теперь изменяем конфигурацию BCD начального загрузчика:

    
    cd /d m:\efi\microsoft\boot\
    ren BCD BCD.bak
    bcdboot С:\Windows /l en-us /s M: /f ALL
    		

    Восстановление загрузчика BIOS/MBR.

    Определяем раздел Windows:

    
    > Diskpart
    Diskpart> List vol
    
     Volume ###  Ltr  Label      FS     Type       Size    Status
     ----------  ---  ---------- -----  ---------  ------  --------
     Volume 0     F                     DVD-ROM        0B  No Media
     Volume 1                    FAT32  Partition   100MB  Healthy
     Volume 2                    NTFS   Partition   350MB  Healthy
     Volume 3     C              NTFS   Partition    99MB  Healthy
    
    Diskpart> exit
    		

    Разделу Windows назначена буква C:. Восстанавливаем на C: загрузчик BCD:

    
    bcdboot C:\Windows /S C:
    		

    Исправляем в начальном загрузчике записи MBR и BCD:

    
    bootrec.exe /FixMbr
    bootrec.exe /FixBoot
    bootrec.exe /RebuildBcd
    		

    Восстанавливаем доверительные отношения между скопированной рабочей станцией и доменом AD

    К сожалению, скопировав саму систему, мы можем столкнуться ещё с рядом проблем, по причине которых мы не сможем продолжить полноценную работу в своём домене. Это же, к примеру, может происходить и при переносе виртуальных машин, кстати. Попытаемся дать ряд советов.

    Проверка и изменение NLA

    При подключении с воссозданной машиной через интерфейс удалённого рабочего стола вы можете сталкиваться с ошибкой, выдающей следующее сообщение: The Remote Computer requires network level authentication. Оно сигнализирует, что пользователь представляет определённый набор данных до установки сеанса подключения (для превращения процесса аутентификации в более безопасный), но этот уровень не соответствует требуемому. В Интернете присутствует множество советов как отключать данный уровень, но нам представляется более правильным проверить состояние NLA и изменить его, в случае необходимости. Для этого воспользуемся двумя сценариями PowerShell lazywinadmin.

    Get-NetworkLevelAuthentication.ps1:

    
    function Get-NetworkLevelAuthentication {
        <#
    .SYNOPSIS
        This function will get the NLA setting on a local machine or remote machine
    
    .DESCRIPTION
        This function will get the NLA setting on a local machine or remote machine
    
    .PARAMETER  ComputerName
        Specify one or more computer to query
    
    .PARAMETER  Credential
        Specify the alternative credential to use. By default it will use the current one.
    
    .EXAMPLE
        Get-NetworkLevelAuthentication
    
        This will get the NLA setting on the localhost
    
        ComputerName     : XAVIERDESKTOP
        NLAEnabled       : True
        TerminalName     : RDP-Tcp
        TerminalProtocol : Microsoft RDP 8.0
        Transport        : tcp
    
    .EXAMPLE
        Get-NetworkLevelAuthentication -ComputerName DC01
    
        This will get the NLA setting on the server DC01
    
        ComputerName     : DC01
        NLAEnabled       : True
        TerminalName     : RDP-Tcp
        TerminalProtocol : Microsoft RDP 8.0
        Transport        : tcp
    
    .EXAMPLE
        Get-NetworkLevelAuthentication -ComputerName DC01, SERVER01 -verbose
    
        This will get the NLA setting on the servers DC01 and the SERVER01
    
    .EXAMPLE
        Get-Content .\Computers.txt | Get-NetworkLevelAuthentication -verbose
    
        This will get the NLA setting for all the computers listed in the file Computers.txt
    
    .EXAMPLE
        Get-NetworkLevelAuthentication -ComputerName (Get-Content -Path .\Computers.txt)
    
        This will get the NLA setting for all the computers listed in the file Computers.txt
    
    .NOTES
        DATE        : 2014/04/01
        AUTHOR      : Francois-Xavier Cat
        WWW         : http://lazywinadmin.com
        Twitter     : @lazywinadmin
    
        Article : http://lazywinadmin.com/2014/04/powershell-getset-network-level.html
    .LINK
        https://github.com/lazywinadmin/PowerShell
    #>
        #Requires -Version 3.0
        [CmdletBinding()]
        PARAM (
            [Parameter(ValueFromPipeline)]
            [String[]]$ComputerName = $env:ComputerName,
    
            [Alias("RunAs")]
            [pscredential]
            [System.Management.Automation.Credential()]
            $Credential = [System.Management.Automation.PSCredential]::Empty
        )#Param
        BEGIN {
            TRY {
                IF (-not (Get-Module -Name CimCmdlets)) {
                    Write-Verbose -Message 'BEGIN - Import Module CimCmdlets'
                    Import-Module -Name CimCmdlets -ErrorAction 'Stop' -ErrorVariable ErrorBeginCimCmdlets
                }
            }
            CATCH {
                IF ($ErrorBeginCimCmdlets) {
                    Write-Error -Message "BEGIN - Can't find CimCmdlets Module"
                }
            }
        }#BEGIN
    
        PROCESS {
            FOREACH ($Computer in $ComputerName) {
                TRY {
                    # Building Splatting for CIM Sessions
                    $CIMSessionParams = @{
                        ComputerName  = $Computer
                        ErrorAction   = 'Stop'
                        ErrorVariable = 'ProcessError'
                    }
    
                    # Add Credential if specified when calling the function
                    IF ($PSBoundParameters['Credential']) {
                        $CIMSessionParams.credential = $Credential
                    }
    
                    # Connectivity Test
                    Write-Verbose -Message "PROCESS - $Computer - Testing Connection..."
                    Test-Connection -ComputerName $Computer -count 1 -ErrorAction Stop -ErrorVariable ErrorTestConnection | Out-Null
    
                    # CIM/WMI Connection
                    #  WsMAN
                    IF ((Test-WSMan -ComputerName $Computer -ErrorAction SilentlyContinue).productversion -match 'Stack: 3.0') {
                        Write-Verbose -Message "PROCESS - $Computer - WSMAN is responsive"
                        $CimSession = New-CimSession @CIMSessionParams
                        $CimProtocol = $CimSession.protocol
                        Write-Verbose -message "PROCESS - $Computer - [$CimProtocol] CIM SESSION - Opened"
                    }
    
                    # DCOM
                    ELSE {
                        # Trying with DCOM protocol
                        Write-Verbose -Message "PROCESS - $Computer - Trying to connect via DCOM protocol"
                        $CIMSessionParams.SessionOption = New-CimSessionOption -Protocol Dcom
                        $CimSession = New-CimSession @CIMSessionParams
                        $CimProtocol = $CimSession.protocol
                        Write-Verbose -message "PROCESS - $Computer - [$CimProtocol] CIM SESSION - Opened"
                    }
    
                    # Getting the Information on Terminal Settings
                    Write-Verbose -message "PROCESS - $Computer - [$CimProtocol] CIM SESSION - Get the Terminal Services Information"
                    $NLAinfo = Get-CimInstance -CimSession $CimSession -ClassName Win32_TSGeneralSetting -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
                    [pscustomobject][ordered]@{
                        'ComputerName'     = $NLAinfo.PSComputerName
                        'NLAEnabled'       = $NLAinfo.UserAuthenticationRequired -as [bool]
                        'TerminalName'     = $NLAinfo.TerminalName
                        'TerminalProtocol' = $NLAinfo.TerminalProtocol
                        'Transport'        = $NLAinfo.transport
                    }
                }
    
                CATCH {
                    Write-Warning -Message "PROCESS - Error on $Computer"
                    $_.Exception.Message
                    if ($ErrorTestConnection) { Write-Warning -Message "PROCESS Error - $ErrorTestConnection" }
                    if ($ProcessError) { Write-Warning -Message "PROCESS Error - $ProcessError" }
                }#CATCH
            } # FOREACH
        }#PROCESS
        END {
    
            if ($CimSession) {
                Write-Verbose -Message "END - Close CIM Session(s)"
                Remove-CimSession $CimSession
            }
            Write-Verbose -Message "END - Script is completed"
        }
    }
     	   

    Set-NetworkLevelAuthentication.ps1:

    
    function Set-NetworkLevelAuthentication {
        <#
    .SYNOPSIS
        This function will set the NLA setting on a local machine or remote machine
    
    .DESCRIPTION
        This function will set the NLA setting on a local machine or remote machine
    
    .PARAMETER  ComputerName
        Specify one or more computers
    
    .PARAMETER EnableNLA
        Specify if the NetworkLevelAuthentication need to be set to $true or $false
    
    .PARAMETER  Credential
        Specify the alternative credential to use. By default it will use the current one.
    
    .EXAMPLE
        Set-NetworkLevelAuthentication -EnableNLA $true
    
    .EXAMPLE
        Set-NetworkLevelAuthentication -EnableNLA $true -computername "SERVER01","SERVER02"
    
    .EXAMPLE
        Set-NetworkLevelAuthentication -EnableNLA $true -computername (Get-Content ServersList.txt)
    
    .NOTES
        DATE    : 2014/04/01
        AUTHOR    : Francois-Xavier Cat
        WWW        : http://lazywinadmin.com
        Twitter    : @lazywinadmin
    
        Article : http://lazywinadmin.com/2014/04/powershell-getset-network-level.html
    .LINK
        https://github.com/lazywinadmin/PowerShell
    #>
        #Requires -Version 3.0
        [CmdletBinding()]
        PARAM (
            [Parameter(ValueFromPipeline, ValueFromPipelineByPropertyName)]
            [System.String[]]$ComputerName = $env:ComputerName,
    
            [Parameter(Mandatory)]
            [System.Boolean]$EnableNLA,
    
            [Alias("RunAs")]
            [pscredential]
            [System.Management.Automation.Credential()]
            $Credential = [System.Management.Automation.PSCredential]::Empty
        )#Param
        BEGIN {
            TRY {
                IF (-not (Get-Module -Name CimCmdlets)) {
                    Write-Verbose -Message '[BEGIN] Import Module CimCmdlets'
                    Import-Module -Name CimCmdlets -ErrorAction 'Stop' -ErrorVariable ErrorBeginCimCmdlets
                }
            }
            CATCH {
                IF ($ErrorBeginCimCmdlets) {
                    Write-Error -Message "[BEGIN] Can't find CimCmdlets Module"
                }
            }
        }#BEGIN
    
        PROCESS {
            FOREACH ($Computer in $ComputerName) {
                Write-Verbose -message $Computer
                TRY {
                    # Building Splatting for CIM Sessions
                    Write-Verbose -message "$Computer - CIM/WIM - Building Splatting"
                    $CIMSessionParams = @{
                        ComputerName  = $Computer
                        ErrorAction   = 'Stop'
                        ErrorVariable = 'ProcessError'
                    }
    
                    # Add Credential if specified when calling the function
                    IF ($PSBoundParameters['Credential']) {
                        Write-Verbose -message "[PROCESS] $Computer - CIM/WMI - Add Credential Specified"
                        $CIMSessionParams.credential = $Credential
                    }
    
                    # Connectivity Test
                    Write-Verbose -Message "[PROCESS] $Computer - Testing Connection..."
                    Test-Connection -ComputerName $Computer -Count 1 -ErrorAction Stop -ErrorVariable ErrorTestConnection | Out-Null
    
                    # CIM/WMI Connection
                    #  WsMAN
                    IF ((Test-WSMan -ComputerName $Computer -ErrorAction SilentlyContinue).productversion -match 'Stack: 3.0') {
                        Write-Verbose -Message "[PROCESS] $Computer - WSMAN is responsive"
                        $CimSession = New-CimSession @CIMSessionParams
                        $CimProtocol = $CimSession.protocol
                        Write-Verbose -message "[PROCESS] $Computer - [$CimProtocol] CIM SESSION - Opened"
                    }
    
                    # DCOM
                    ELSE {
                        # Trying with DCOM protocol
                        Write-Verbose -Message "[PROCESS] $Computer - Trying to connect via DCOM protocol"
                        $CIMSessionParams.SessionOption = New-CimSessionOption -Protocol Dcom
                        $CimSession = New-CimSession @CIMSessionParams
                        $CimProtocol = $CimSession.protocol
                        Write-Verbose -message "[PROCESS] $Computer - [$CimProtocol] CIM SESSION - Opened"
                    }
    
                    # Getting the Information on Terminal Settings
                    Write-Verbose -message "[PROCESS] $Computer - [$CimProtocol] CIM SESSION - Get the Terminal Services Information"
                    $NLAinfo = Get-CimInstance -CimSession $CimSession -ClassName Win32_TSGeneralSetting -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
                    $NLAinfo | Invoke-CimMethod -MethodName SetUserAuthenticationRequired -Arguments @{ UserAuthenticationRequired = $EnableNLA } -ErrorAction 'Continue' -ErrorVariable ErrorProcessInvokeWmiMethod
                }
    
                CATCH {
                    Write-Warning -Message "Error on $Computer"
                    Write-Error -Message $_.Exception.Message
                    if ($ErrorTestConnection) { Write-Warning -Message "[PROCESS] Error - $ErrorTestConnection" }
                    if ($ProcessError) { Write-Warning -Message "[PROCESS] Error - $ProcessError" }
                    if ($ErrorProcessInvokeWmiMethod) { Write-Warning -Message "[PROCESS] Error - $ErrorProcessInvokeWmiMethod" }
                }#CATCH
                FINALLY {
                    if ($CimSession) {
                        # CLeanup/Close the remaining session
                        Write-Verbose -Message "[PROCESS] Finally Close any CIM Session(s)"
                        Remove-CimSession -CimSession $CimSession
                    }
                }
            } # FOREACH
        }#PROCESS
        END {
            Write-Verbose -Message "[END] Script is completed"
        }
    }
     	   

    Для просмотра текущих установок выполните

    
    PS > .\Get-Set-NetworkLevelAuthentication.ps1
    		

    Для изменения текущих настроек выполните

    
    PS > Set-NetworkLevelAuthentication -EnableNLA $true
    		

    Восстановление доверительных отношений

    К сожалению, настройка должным образом NLA может не спасти. Вы будете продолжать испытывать проблемы с восстановленной машиной при весьма неожиданных обстоятельствах. К примеру, будете получать сообщения что у вас недостаточно прав на доступ к ресурсам домена (хотя у вас их может быть даже больше чем нужно) и ряд прочих чудес. Очень хорошо, если вы столкнётесь с таким проявлением проблем в системе: The security database on the server does not have a computer account for this workstation trust relationship. (База данных диспетчера учётных записей на сервере не содержит записи для регистрации компьютера через доверительные отношения с этой рабочей станцией.) или нечто типа Не удалось установить доверительные отношения между этой рабочей станцией и основным доменом, что сразу укажет вам на суть проблемы. К сожалению, это не всегда так.

    Суть проблемы состоит в том, что когда прообраз вашего восстановленного компьютера был зарегистрирован в AD, для него была создана отдельная учётная запись с типом computer. У каждого компьютера, как и у пользователя, имеется свой пароль, необходимый для его аутентификации в домене и установления доверенного подключения. В отличии от паролей пользователей, он устанавливается автоматически. Компьютеры регулярно (по умолчанию это раз в 30 дней) изменяют свои пароли в AD. Максимальный срок жизни пароля компьютера устанавливается в GPO Domain member: Maximum machine account password, которая пребывает в разделе Computer Configuration-> Windows Settings-> Security Settings-> Local Policies-> Security Options и устанавливается в диапазоне от 0 до 999 дней. На пароль компьютера не распространяется политика паролей для пользователя. Даже когда компьютер был выключен более установленного политикой срока, после его включения он нормально идентифицируется первым DC в AD и только после этого его локальная служба Netlogon изменит пароль (находится в улье реестра его локальная служба HKLM\SECURITY\Policy\Secrets\$machine.ACC) и затем в AD в ближайшем DC, который через FSMO с ролью эмулятора PDC изменяется в остальных контроллерах. Но ваш компьютер мог быть восстановлен с того момента, когда пароль в AD ещё не был изменён. А после его изменения в AD он уже не будет обладать доверием. Или же в определённый момент времени в домене показались оба компьютера (прототип и его восстановленная копия). Или же, в компьютере может сбиться системное время. Дальше можете продолжить это ряд ситуаций. В общем, суть проблемы ясна. Проще её решить, чем выяснять причину (хотя это может быть не так, если ваш домен подвергся компрометации).

    Первая задача состоит в том, чтобы всё- таки зарегистрироваться в этом компьютере. Это вы можете сделать под локальной учётной записью данного компьютера, либо под доменной записью, предварительно физически отключившись от сетевой среды AD (выдернув сетевой кабель, например). Дальше в консоли Windows PowerShell выполните:

    
    PS > Test-ComputerSecureChannel –verbose
    VERBOSE: Performing the operation "Test-ComputerSecureChannel" on target <ваш компьютер> 
    False
    VERBOSE: The secure channel between the local computer and the domain <ваш домен> is broken.
    		

    Для принудительной смены пароля можно воспользоваться командлетом Reset-ComputerMachinePassword, например:

    
    PS > Reset-ComputerMachinePassword -Server <dc01> -Credential <domain\domain_admin>
    VERBOSE: Performing the operation "Test-ComputerSecureChannel" on target <ваш компьютер> 
    False
    VERBOSE: The secure channel between the local computer and the domain <ваш домен> is broken.
    		

    , где <dc01> контроллер домена, а <domain\domain_admin> обладающий должными полномочиями пользователь, естественно, из соображений безопасности, нежели непосредственно применять учётную запись администратора домена, лучше для этой операции временно делегировать права выполняющему данную операцию пользователю.

    После этого снова проверьте наличие безопасного канала и убедитесь что теперь возвращается значение True:

    
    PS > Test-ComputerSecureChannel 
    True  (The Secure channel between the local computer and the <domain> is in good condition)
    		

    Того же эффекта можно достичь и самой командой Test-ComputerSecureChannel, вводя необходимые учётные данный во всплывающем окне регистрации:

    
    PS > Test-ComputerSecureChannel –Repair –Credential (Get-Credential)		

    С помощью командлета Get-ADComputer из модуля AD Windows PowerShell можно проверять значение времени последней смены пароля компьютера:

    
    PS > Get-ADComputer –Identity <computer> -Properties PasswordLastSet
    		

    Наличие безопасного канала можно выполнять и такой командой:

    
    > nltest /sc_verify:<domain>
    Flags: b0 HAS_IP  HAS_TIMESERV
    Trusted DC Name \\<Controller.domain>
    Trusted DC Connection Status Status = 0 0x0 NERR_Success
    Trust Verification Status = 0 0x0 NERR_Success
    The command completed successfully
    		

    В более ранних версиях без надлежащего PowerShell это выполнялось после регистрации под локальным администратором (.\Administrator):

    
    > Netdom resetpwd /Server:<DomainController> /UserD:<Administrator> /PasswordD:<Password>