在自动、无人值守的 Windows 安装中运行脚本的正确方法

在自动、无人值守的 Windows 安装中运行脚本的正确方法

我编写了一些自定义脚本来定制 Windows 10,例如删除过度占用内存的软件并通过注册表编辑器设置文件资源管理器选项,我使用这些脚本应用于所有用户和/或系统。

我已经创建了一个autounattend.xml应答文件,其中包含一些简单的参数,例如格式化磁盘、创建分区和选择要安装的 Windows 版本等,然后使用该reseal参数在初始安装后自动将计算机登录到审核模式并绕过 OOBE 屏幕。

我的脚本均已在审核模式(在 OOBE 屏幕上按 CTRL、SHIFT + F3)下进行了测试,对于任何继续使用系统的用户来说,只要系统处于正常工作状态,它们都可以完美运行。此外,我使用安装介质unattend.xml中的一个文件$OEM$\$$\System32\Sysprep来完成安装,在离开 Sysprep 并重新启动计算机后即可。这将设置一个新的本地管理帐户和密码,该帐户和密码会自动登录到桌面。实际上,我有两个无人值守的应答文件,它们被分成两部分,所以我实际上不确定这是否是正确的做法,但它似乎效果很好。

我现在想完全自动化安装,以便我目前在审核模式下手动运行的脚本无需任何用户干预即可执行。在 Windows 系统映像管理器中,可以RunAsynchronousCommand找到 组件amd64_Microsoft-Windows-Deployment_10.0.19041.1_neutral,该组件只能添加到Pass 6 auditUser。在$OEM$我的安装介质上的文件夹中有以下目录结构$1\Scripts,其中包含各种批处理和 PowerShell 脚本。我想将 的路径参数指向RunAsynchronousCommand该文件夹创建的脚本文件夹$OEM$,但似乎没有任何效果。

因为我使用的是由两部分组成的答案文件,所以我应该将其放入RunAsynchronousCommand我的autounattend.xmlunattend.xml答案文件中吗?

当所有一切正常时,我是否需要Reseal从答案文件中删除任何属性?

以下是我的安装介质上的两个应答文件的内容:

/自动无人值守.xml

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <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>
            <ImageInstall>
                <OSImage>
                    <InstallFrom>
                        <MetaData wcm:action="add">
                            <Key>/IMAGE/NAME</Key>
                            <Value>Windows 10 Pro</Value>
                        </MetaData>
                    </InstallFrom>
                    <WillShowUI>Always</WillShowUI>
                </OSImage>
            </ImageInstall>
            <UserData>
                <ProductKey>
                    <WillShowUI>Always</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>
                <WillShowUI>Always</WillShowUI>
            </SetupUILanguage>
            <InputLocale>en-gb</InputLocale>
            <SystemLocale>en-gb</SystemLocale>
            <UILanguageFallback>en-us</UILanguageFallback>
            <UILanguage>en-gb</UILanguage>
        </component>
    </settings>
    <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>
    <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

$OEM$/$$/System32/Sysprep/Unattend.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>1</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>
                <HideOnlineAccountScreens>true</HideOnlineAccountScreens>
                <HideEULAPage>true</HideEULAPage>
                <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
                <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
                <ProtectYourPC>3</ProtectYourPC>
                <HideLocalAccountScreen>true</HideLocalAccountScreen>
                <SkipUserOOBE>true</SkipUserOOBE>
                <SkipMachineOOBE>true</SkipMachineOOBE>
            </OOBE>
            <BluetoothTaskbarIconEnabled>true</BluetoothTaskbarIconEnabled>
            <DesktopOptimization>
                <ShowWindowsStoreAppsOnTaskbar>false</ShowWindowsStoreAppsOnTaskbar>
                <GoToDesktopOnSignIn>true</GoToDesktopOnSignIn>
            </DesktopOptimization>
            <StartTiles>
                <PromoteOEMTiles>false</PromoteOEMTiles>
            </StartTiles>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

相关内容