Как запустить скрипты с установочного носителя в файле autounattend.xml?

Как запустить скрипты с установочного носителя в файле autounattend.xml?

Я создал несколько скриптов PowerShell (.ps1) и Batch (.bat), которые я хотел бы сделать частью автоматизированной установки Windows. Я уже настроил все остальное в моем файле autounattend.xml с помощью диспетчера образов системы Windows, и он работает отлично, за исключением выполнения моих скриптов.

До того, как попытаться полностью автоматизировать, я обычно входил в режим аудита (CTRL+SHIFT+F3), минуя OOBE, а затем запускал свои скрипты оттуда. Зная, что мои скрипты работают в режиме аудита, в диспетчере образов системы Windows я решил вставить синхронные команды на проходе 6 в audituser.

Это мой файл autouattend.xml на данный момент

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup" 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">
            <AutoLogon>
                <Password>
                    <Value>cABhAHMAcwB3AG8AcgBkAFAAYQBzAHMAdwBvAHIAZAA=</Value>
                    <PlainText>false</PlainText>
                </Password>
                <Enabled>true</Enabled>
                <LogonCount>3</LogonCount>
                <Username>LocalAdmin</Username>
            </AutoLogon>
            <UserAccounts>
                <LocalAccounts>
                    <LocalAccount wcm:action="add">
                        <Password>
                            <Value>cABhAHMAcwB3AG8AcgBkAFAAYQBzAHMAdwBvAHIAZAA=</Value>
                            <PlainText>false</PlainText>
                        </Password>
                        <Name>LocalAdmin</Name>
                        <Group>Administrators</Group>
                        <DisplayName></DisplayName>
                        <Description>Local adminstrator stored on the system drive</Description>
                    </LocalAccount>
                </LocalAccounts>
            </UserAccounts>
            <OOBE>
                <SkipMachineOOBE>true</SkipMachineOOBE>
                <SkipUserOOBE>true</SkipUserOOBE>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideEULAPage>true</HideEULAPage>
            </OOBE>
        </component>
    </settings>
    <settings pass="windowsPE">
        <component name="Microsoft-Windows-Setup" 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">
            <EnableNetwork>false</EnableNetwork>
            <DiskConfiguration>
                <Disk wcm:action="add">
                    <CreatePartitions>
                        <CreatePartition wcm:action="add">
                            <Order>1</Order>
                            <Size>500</Size>
                            <Type>Primary</Type>
                        </CreatePartition>
                        <CreatePartition wcm:action="add">
                            <Order>2</Order>
                            <Type>EFI</Type>
                            <Size>100</Size>
                        </CreatePartition>
                        <CreatePartition wcm:action="add">
                            <Order>4</Order>
                            <Extend>true</Extend>
                            <Type>Primary</Type>
                        </CreatePartition>
                        <CreatePartition wcm:action="add">
                            <Order>3</Order>
                            <Size>16</Size>
                            <Type>MSR</Type>
                        </CreatePartition>
                    </CreatePartitions>
                    <ModifyPartitions>
                        <ModifyPartition wcm:action="add">
                            <Format>NTFS</Format>
                            <Label></Label>
                            <Order>1</Order>
                            <PartitionID>1</PartitionID>
                            <TypeID>DE94BBA4-06D1-4D40-A16A-BFD50179D6AC</TypeID>
                        </ModifyPartition>
                        <ModifyPartition wcm:action="add">
                            <Order>2</Order>
                            <Format>FAT32</Format>
                            <PartitionID>2</PartitionID>
                            <Label>System</Label>
                        </ModifyPartition>
                        <ModifyPartition wcm:action="add">
                            <PartitionID>3</PartitionID>
                            <Order>3</Order>
                        </ModifyPartition>
                        <ModifyPartition wcm:action="add">
                            <PartitionID>4</PartitionID>
                            <Order>4</Order>
                            <Format>NTFS</Format>
                        </ModifyPartition>
                    </ModifyPartitions>
                    <WillWipeDisk>true</WillWipeDisk>
                    <DiskID>0</DiskID>
                </Disk>
            </DiskConfiguration>
            <ImageInstall>
                <OSImage>
                    <InstallTo>
                        <DiskID>0</DiskID>
                        <PartitionID>4</PartitionID>
                    </InstallTo>
                    <InstallFrom>
                        <MetaData wcm:action="add">
                            <Key>/IMAGE/NAME</Key>
                            <Value>Windows 10 Pro</Value>
                        </MetaData>
                    </InstallFrom>
                </OSImage>
            </ImageInstall>
            <UserData>
                <ProductKey>
                    <WillShowUI>OnError</WillShowUI>
                    <Key />
                </ProductKey>
                <AcceptEula>true</AcceptEula>
            </UserData>
        </component>
        <component name="Microsoft-Windows-International-Core-WinPE" 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">
            <SetupUILanguage>
                <UILanguage>en-gb</UILanguage>
            </SetupUILanguage>
            <InputLocale>en-gb</InputLocale>
            <SystemLocale>en-gb</SystemLocale>
            <UILanguageFallback>en-us</UILanguageFallback>
            <UILanguage>en-gb</UILanguage>
        </component>
    </settings>
    <settings pass="auditUser">
        <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">
            <RunSynchronous>
                <RunSynchronousCommand wcm:action="add">
                    <Order>2</Order>
                    <Path>powershell.exe -executionpolicy remotesigned -File &quot;Files\Scripts\2A-Create_Daily_System_Restore_Point.ps1&quot;</Path>
                </RunSynchronousCommand>
                <RunSynchronousCommand wcm:action="add">
                    <Description>Remove Windows Bloatware Provisioned Apps</Description>
                    <Order>1</Order>
                    <Path>powershell.exe -executionpolicy remotesigned -File &quot;%~dp0\Files\Scripts\1-Remove_Bloatware_Apps.ps1&quot;</Path>
                </RunSynchronousCommand>
                <RunSynchronousCommand wcm:action="add">
                    <Order>3</Order>
                    <Path>cmd.exe /c %~dp0\Files\Scripts\3-Remove_Folders_from_This_PC.bat</Path>
                </RunSynchronousCommand>
            </RunSynchronous>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:d:/users/will/documents/it%20projects/windows%2010%20image/install.wim#Windows 10 Home" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

Я собираюсь разместить каталог под названием 'Scripts' в корне установочного носителя Windows, поэтому мой вопрос: как мне вызвать эти скрипты в autounattend.xml с установочного носителя? Есть ли переменная, которая ссылается на диск и путь, где находится установочный носитель?

решение1

Думаю, я нашел решение.

  1. Извлеките установочный носитель ISO/Windows в папку
  2. Создайте папку внутри sources\каталога(ов) извлеченного установочного носителя с именем$OEM$
  3. Создайте зеркало системного диска, чтобы у вас был каталог со следующим путем:sources\$OEM$\$$\Setup\Scripts (C:\Windows\Setup\Скрипты)

Папка $OEM$ отражает системный диск, поэтому все, что находится внутри этих папок, копируется во время установки. Что касается скриптов, запускаемых из файла autounattend.xml, вам просто нужно вызвать скрипты из%SystemDrive%\WinDir\Setup\Scripts

Более подробную информацию можно найти здесь >https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/hh825027%28v%3dwin.10%29

решение2

Afaik, auditUserпроход не будет выполнен во время установки Windows, если система не переведена в режим аудита. Поэтому, кроме вашего решения, есть еще два возможных решения:

  1. Поместите свои команды в specializepass или oobeSystempass. Обычно установочному носителю назначается буква X:, но если вы хотите быть уверены, что программа установки найдет скрипты, вы можете использовать некоторое условие, например:
                <RunSynchronousCommand wcm:action="add">
                    <Description>Run script</Description>
                    <Order>1</Order>
                    <!-- Enumerate through all drives looking for the MYIT_OEMBypass.ps1 script, if found, run it. Leave the command prompt open. -->
                    <Path>cmd /c "(FOR %i IN (C D E F G H I J K L N M) DO IF EXIST %i:\MYIT_OEMBypass.ps1 Powershell -executionpolicy ByPass %i:\MYIT_OEMBypass.ps1) & pause"</Path>
                </RunSynchronousCommand>
  1. Дайте указание программе установки Windows сразу перейти в режим аудита (sysprep) при 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>
                <ForceShutdownNow>false</ForceShutdownNow>
            </Reseal>
        </component>

Используя этот метод, выможет держатьваши команды при auditUserпередаче. Это также помогает настроить профиль по умолчанию со всеми вашими любимыми настройками, так что любой профиль, созданный позже, также будет иметь все эти настройки.

Однако по умолчаниюавтоunattend.xml будет скопирован и установлен как скрипт unattend.xml sysprep, что, очевидно, вызовет проблемы. Поэтому вам нужно будет внести некоторые незначительные изменения, чтобы указать sysprep использоватьдругойunattend.xml. Более подробное руководство по этому методу можно найти здесь: https://rzander.azurewebsites.net/modern-os-deployment-mosd/

Связанный контент