Windows 2008 R2 Pre-Activated Template (SYSPREP)

activationsysprepwindows-server-2008-r2

I am trying to configure a template image for Windows 2008 R2 that is pre-activated. I have read through numerous sources that say to use the Microsoft-Windows-Security-SPP\SkipRearm option, however even when using this, it does not seem to work: I will configure my template image, activate windows, then run sysprep (c:\windows\system32\sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:c:\Sysprep\sysprep.xml) however when I deploy this image to a new machine I see the "you have three days to activate windows" message in the system control panel. Note: Keep in mind the license being used is from a SPLA, not a retail license.

As far as I have been lead to believe from numerous sources, the SkipRearm setting should allow us to deploy new machines that are pre-activated. Am I missing something here? Below is my sysprep.xml.

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <servicing></servicing>
    <settings pass="windowsPE">
        <component name="Microsoft-Windows-Setup">
            <UserData>
                <ProductKey>
                    <Key>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</Key>
                </ProductKey>
                <AcceptEula>true</AcceptEula>
                <FullName>Company</FullName>
                <Organization>Company</Organization>
            </UserData>
            <EnableFirewall>false</EnableFirewall>
            <Restart>Restart</Restart>
            <EnableNetwork>true</EnableNetwork>
        </component>
        <component name="Microsoft-Windows-International-Core-WinPE">
            <SetupUILanguage>
                <UILanguage>en-US</UILanguage>
            </SetupUILanguage>
            <InputLocale>en-US</InputLocale>
            <SystemLocale>en-US</SystemLocale>
            <UILanguage>en-US</UILanguage>
            <UILanguageFallback>en-US</UILanguageFallback>
            <UserLocale>en-US</UserLocale>
        </component>
    </settings>
    <settings pass="specialize">
        <component name="Microsoft-Windows-Shell-Setup">
            <ComputerName>*</ComputerName>
            <ProductKey>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</ProductKey>
            <TimeZone>Eastern Standard Time</TimeZone>
            <ShowWindowsLive>false</ShowWindowsLive>
            <CopyProfile>true</CopyProfile>
            <RegisteredOrganization>Company</RegisteredOrganization>
            <RegisteredOwner>Company</RegisteredOwner>
        </component>
    </settings>
    <settings pass="generalize">
        <component name="Microsoft-Windows-OutOfBoxExperience">
            <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon>
        </component>
        <component name="Microsoft-Windows-ServerManager-SvrMgrNc">
            <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon>
        </component>
        <component name="Microsoft-Windows-Security-SPP">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
    <settings pass="oobeSystem">
        <component name="Microsoft-Windows-Shell-Setup">
            <UserAccounts>
                <AdministratorPassword>
                    <Value>Password123!</Value>
                    <PlainText>true</PlainText>
                </AdministratorPassword>
            </UserAccounts>
            <Themes>
                <DefaultThemesOff>true</DefaultThemesOff>
            </Themes>
            <TimeZone>Eastern Standard Time</TimeZone>
            <FirstLogonCommands>
                <SynchronousCommand wcm:action="add">
                    <CommandLine>cmd /c rd /S /Q c:\Sysprep</CommandLine>
                    <Description>Remove Sysprep Dir</Description>
                    <Order>1</Order>
                </SynchronousCommand>
            </FirstLogonCommands>
            <OOBE>
                <HideEULAPage>true</HideEULAPage>
            </OOBE>
        </component>
        <component name="Microsoft-Windows-International-Core">
            <InputLocale>en-US</InputLocale>
            <SystemLocale>en-US</SystemLocale>
            <UILanguage>en-US</UILanguage>
            <UILanguageFallback>en-US</UILanguageFallback>
            <UserLocale>en-US</UserLocale>
        </component>
    </settings>
    <cpi:offlineImage cpi:source="wim:e:/tools/waik/windows2008r2/install.wim#Windows Server 2008 R2 SERVERSTANDARD" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>

Best Answer

You can't use Generalize, SkipRearm, and OOBE together. The Generalize process creates all new licensing info, thus it will overwrite the existing activation, unless SkipRearm is specified. However, when both Generalize and OOBE are specified SkipRearm will be ignored. The key must also be a MAK key (when Generalize/SkipRearm is used); Retail Keys can be used with OOBE only; or VL (but if you had a VL key you should be using KMS anyway); sounds like you have the correct key though.

Update: Fixed an omission regarding the combination of options. Reference: How Sysprep Works