以下是Unattend.xml的示例内容:
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<settings pass="windowsPE">
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<UserData>
<ProductKey>
<!--Key>($PRODUCTKEY)</Key-->
<Key></Key>
<WillShowUI>Never</WillShowUI>
</ProductKey>
<AcceptEula>true</AcceptEula>
</UserData>
<DiskConfiguration>
<WillShowUI>OnError</WillShowUI>
<Disk wcm:action="add">
<CreatePartitions>
<CreatePartition wcm:action="add">
<Order>1</Order>
<Size>100</Size>
<Type>Primary</Type>
</CreatePartition>
<CreatePartition wcm:action="add">
<Extend>true</Extend>
<Order>2</Order>
<Type>Primary</Type>
</CreatePartition>
</CreatePartitions>
<ModifyPartitions>
<ModifyPartition wcm:action="add">
<Active>true</Active>
<Format>NTFS</Format>
<Label>System</Label>
<Order>1</Order>
<PartitionID>1</PartitionID>
</ModifyPartition>
<ModifyPartition wcm:action="add">
<Order>2</Order>
<PartitionID>2</PartitionID>
<Label>Windows</Label>
<Letter>C</Letter>
<Format>NTFS</Format>
</ModifyPartition>
</ModifyPartitions>
<DiskID>0</DiskID>
<WillWipeDisk>true</WillWipeDisk>
</Disk>
</DiskConfiguration>
<ImageInstall>
<OSImage>
<InstallTo>
<DiskID>0</DiskID>
<PartitionID>2</PartitionID>
</InstallTo>
<InstallFrom>
<MetaData wcm:action="add">
<Key>/IMAGE/INDEX</Key>
<Value>1</Value>
</MetaData>
</InstallFrom>
<WillShowUI>OnError</WillShowUI>
<InstallToAvailablePartition>false</InstallToAvailablePartition>
</OSImage>
</ImageInstall>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<SetupUILanguage>
<UILanguage>en-US</UILanguage>
</SetupUILanguage>
<InputLocale>007f:00000804</InputLocale>
<SystemLocale>zh-CN</SystemLocale>
<UILanguage>zh-CN</UILanguage>
<UserLocale>zh-CN</UserLocale>
</component>
</settings>
<settings pass="oobeSystem">
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>($PASS)</Value>
<PlainText>true</PlainText>
</Password>
<Description>Local Administrator</Description>
<DisplayName>Administrator</DisplayName>
<Group>Administrators</Group>
<Name>Administrator</Name>
</LocalAccount>
</LocalAccounts>
<AdministratorPassword>
<Value>($PASS)</Value>
</AdministratorPassword>
</UserAccounts>
<OOBE>
<HideEULAPage>true</HideEULAPage>
<SkipMachineOOBE>true</SkipMachineOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
<HideOEMRegistrationScreen>true</HideOEMRegistrationScreen>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
</OOBE>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<InputLocale>007f:00000804</InputLocale>
<SystemLocale>zh-CN</SystemLocale>
<UILanguage>zh-CN</UILanguage>
<UserLocale>zh-CN</UserLocale>
</component>
</settings>
<settings pass="offlineServicing">
</settings>
<settings pass="specialize">
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-TCPIP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<Interfaces>
<Interface wcm:action="add">
<Ipv4Settings>
<DhcpEnabled>false</DhcpEnabled>
<RouterDiscoveryEnabled>false</RouterDiscoveryEnabled>
</Ipv4Settings>
<Ipv6Settings>
<DhcpEnabled>false</DhcpEnabled>
<RouterDiscoveryEnabled>false</RouterDiscoveryEnabled>
</Ipv6Settings>
<Identifier>($WIN_MAC)</Identifier>
<UnicastIpAddresses>
<IpAddress wcm:action="add" wcm:keyValue="1">($IP)/($NETMASK_SHORT)</IpAddress>
<IpAddress wcm:action="add" wcm:keyValue="2">($IPv6)/($NETMASKv6)</IpAddress>
</UnicastIpAddresses>
<Routes>
<Route wcm:action="add">
<Identifier>1</Identifier>
<Metric>10</Metric>
<NextHopAddress>($GATEWAYv4)</NextHopAddress>
<Prefix>0.0.0.0/0</Prefix>
</Route>
<Route wcm:action="add">
<Identifier>2</Identifier>
<Metric>10</Metric>
<NextHopAddress>($GATEWAYv6)</NextHopAddress>
<Prefix>::/0</Prefix>
</Route>
</Routes>
</Interface>
<!--Interface wcm:action="add">
<Ipv4Settings>
<DhcpEnabled>false</DhcpEnabled>
<RouterDiscoveryEnabled>false</RouterDiscoveryEnabled>
</Ipv4Settings>
<Ipv6Settings>
<DhcpEnabled>false</DhcpEnabled>
<RouterDiscoveryEnabled>false</RouterDiscoveryEnabled>
</Ipv6Settings>
<Identifier>Ethernet 2</Identifier>
</Interface-->
</Interfaces>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-DNS-Client" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<Interfaces>
<Interface wcm:action="add">
<Identifier>($WIN_MAC)</Identifier>
<DNSDomain>($HOSTNAME)</DNSDomain>
<DNSServerSearchOrder>
<IpAddress wcm:action="add" wcm:keyValue="1">($NAMESERVER)</IpAddress>
</DNSServerSearchOrder>
<DisableDynamicUpdate>false</DisableDynamicUpdate>
<EnableAdapterDomainNameRegistration>false</EnableAdapterDomainNameRegistration>
</Interface>
</Interfaces>
</component>
<component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<fDenyTSConnections>false</fDenyTSConnections>
</component>
<component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<UserAuthentication>0</UserAuthentication>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<FirewallGroups>
<FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop">
<Active>true</Active>
<Group>@FirewallAPI.dll,-28752</Group>
<Profile>all</Profile>
</FirewallGroup>
</FirewallGroups>
</component>
<component xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS">
<RunSynchronous>
<RunSynchronousCommand wcm:action="add">
<Description>finish</Description>
<Order>1</Order>
<Path>cmd /c echo cmd /c %windir%\System32\curl.exe "($FINISH)" >> %windir%\setup\scripts\SetupComplete.cmd</Path>
<WillReboot>OnRequest</WillReboot>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Description>Delete route</Description>
<Order>2</Order>
<Path>cmd /c echo IF "($IPv4)"=="" (route delete 0.0.0.0/0) ELSE IF "($IPv6)"=="" (route delete ::/0) >> %windir%\setup\scripts\SetupComplete.cmd</Path>
<WillReboot>OnRequest</WillReboot>
</RunSynchronousCommand>
<RunSynchronousCommand wcm:action="add">
<Description>Setting multiple nameservers</Description>
<Order>3</Order>
<Path>cmd /c echo cmd /c %windir%\setup\scripts\nameservers.cmd ($NAMESERVERS) >> %windir%\setup\scripts\SetupComplete.cmd</Path>
<WillReboot>OnRequest</WillReboot>
</RunSynchronousCommand>
</RunSynchronous>
</component>
</settings>
<cpi:offlineImage xmlns:cpi="urn:schemas-microsoft-com:cpi" cpi:source="catalog:c:/distr/7601.17514.101119-1850_x64fre_server_eval_en-us-grmsxeval_en_dvd/sources/install_windows server 2008 r2 serverstandard.clg"/>
</unattend>
dcim5中的install.bat文件内容:
wpeutil InitializeNetwork
wpeinit
ping 127.0.0.1 -n 1 >nul
setlocal EnableDelayedExpansion
IF NOT EXIST "X:\temp\" mkdir X:\temp
cd x:\temp
IF EXIST X:\Windows\System32\efiboot.txt (
REM x:\temp\wget.exe "($MGR_URLv4)?func=osinstall.info&id=($AUTH_ID)&file=UnattendEFI.xml" -O x:\temp\Unattend.xml
wget.exe "($MGR_URLv4)?func=osinstall.info&id=($AUTH_ID)&file=UnattendEFI.xml&disablepxe=yes" -O x:\temp\Unattend.xml
boot_order_changer.exe currentid >x:\temp\efiboot.txt
set /p efiboot=<x:\temp\efiboot.txt
sed.exe x:\temp\Unattend.xml __EFIBOOT__ !efiboot!
) ELSE (
REM x:\temp\wget.exe "($MGR_URLv4)?func=osinstall.info&id=($AUTH_ID)&file=Unattend.xml" -O x:\temp\Unattend.xml
wget.exe "($MGR_URLv4)?func=osinstall.info&id=($AUTH_ID)&file=Unattend.xml&disablepxe=yes" -O x:\temp\Unattend.xml
)
net use k: \\($SMB_PATHv4)
IF ERRORLEVEL 1 (
ping 127.0.0.1 -n 10 >nul
net use k: \\($SMB_PATHv4) /u:aaa bbb
)
cd k:\
k:
ping 127.0.0.1 -n 15 >nul
IF NOT "($WINNTSETUP)"=="yes" (
IF EXIST X:\Windows\System32\efiboot.txt (
DISKPART /s diskpartefi.txt
) ELSE (
DISKPART /s diskpart.txt
)
setup.exe /Unattend:x:\temp\Unattend.xml
setup.exe /Unattend:x:\temp\Unattend.xml
) ELSE (
REM It is more simple than use /diskpart option from WinNTSetup. It required file inside tools subdirectory
IF EXIST X:\Windows\System32\efiboot.txt (
DISKPART /s diskpartefi_winnt.txt
) ELSE (
DISKPART /s diskpart_winnt.txt
)
x:
REM Too many files. Using 7z archive
mkdir x:\temp\winntsetup
xcopy x:\windows\system32\WinNTSetup_v423.7z x:\temp\winntsetup
cd \temp\winntsetup
7zr64.exe x WinNTSetup_v423.7z
WinNTSetup_x64.exe NT6 /source:K:\sources\install.wim /WimIndex:2 /syspart:S: /tempdrive:W: /OEM:"k:\sources\$OEM$" /unattend:"X:\temp\Unattend.xml" /Sysletter:C /setup /reboot
)
cmd
dcim5中的ipex.conf内容:
#!ipxe
iseq ${platform} efi && goto is_efi || goto not_efi
:is_efi
kernel wimboot index=2
initrd efiboot.txt efiboot.txt
initrd -n install.bat ($OSINSTALLINFO_HTTPv4) install.bat
initrd winpeshl.ini winpeshl.ini
initrd bootmgr.exe bootmgr.exe
initrd boot_order_changer.exe boot_order_changer.exe
initrd sed.exe sed.exe
initrd wget.exe wget.exe
initrd 7zr64.exe 7zr64.exe
initrd WinNTSetup_v423.7z WinNTSetup_v423.7z
initrd BCD BCD
initrd boot.sdi boot.sdi
initrd boot.wim boot.wim
boot
:not_efi
# kernel wimboot index=2
kernel wimboot
initrd -n install.bat ($OSINSTALLINFO_HTTPv4) install.bat
initrd winpeshl.ini winpeshl.ini
initrd bootmgr.exe bootmgr.exe
initrd wget.exe wget.exe
initrd 7zr64.exe 7zr64.exe
initrd WinNTSetup_v423.7z WinNTSetup_v423.7z
initrd BCD BCD
initrd boot.sdi boot.sdi
initrd boot.wim boot.wim
boot
Windows安装目录中 diskpart_winnt.txt 的文件内容:
select disk 0
clean
convert mbr
create partition primary size=100
format quick fs=ntfs label="System"
assign letter="S"
active
create partition primary
shrink minimum=650
format quick fs=ntfs label="Windows"
assign letter="W"
create partition primary
format quick fs=ntfs label="Recovery"
assign letter="R"
set id=27
list volume
exit
Windows安装目录中 diskpartefi_winnt.txt 的文件内容:
select disk 0
clean
convert gpt
create partition efi size=100
format quick fs=fat32 label="System"
assign letter="S"
create partition msr size=16
create partition primary
shrink minimum=650
format quick fs=ntfs label="Windows"
assign letter="W"
create partition primary
format quick fs=ntfs label="Recovery tools"
assign letter="R"
set id="de94bba4-06d1-4d40-a16a-bfd50179d6ac"
gpt attributes=0x8000000000000001
list volume
exit