So based on some blogs I’ve read and a recent project I have worked on to realize a fully automated Operating System Build, I wanted to share my settings just to clarify which settings need to be present within the bootstrap.ini and the customsettings.ini.
Part I: Bootstrap.ini
First of all, there is the bootstrap.ini. Customizing the bootstrap.ini affects all the settings which a machine will be booted with. In my case it was necessary to provide a static IP configuration because the server back-end where I had a test virtual machine to my disposal had no active DHCP running, therefore it is necessary to specify the IP configuration for one or more machines.
If we want to do this for one machine, we need to have a unique identifier which the settings can be applied to, in this case it would be the MAC Address of the virtual machine which in our case will not change automatically (VMware HyperVisor, on Hyper-V you need to specify a static IP). Therefore we set our Priority to MAC Addres 1st, and then the Default configuration options 2nd because we want those options to be applied to all clients.
Priority = MACADDRESS, Default
Then it is time to configure our network adapter, in case of a virtual machine it is likely that we have only one network adapter present. Therefore we need to specify the MAC Address of that adapter between the “[ ]”.
Next we specify the number of available network adapters, in case there is one we set our “OSDAdapterCount” to 1.
If there is no DHCP available we set the OSDAdapter0EnableDHCP to FALSE to make sure that when the machine boots into WinPE no instruction will be executed to request an dynamic provided IP address.
By specifying the following settings we provide our adapter configuration as we would normally do in Windows also when we want to specify a static IP address:
OSDAdapter0IPAddressList=Enter the machine’s IP address here
OSDAdapter0SubnetMask=Provide the correct subnet here
OSDAdapter0Gateways=Provide the gateway address
OSDAdapter0DNSServerList=Provide multiple DNS servers by using “,”
OSDAdapter0DNSSuffix=Provide the DNS Suffix so that machines that are not domain joined can still communicate with domain joined servers and computers
*Note: working with multiple network adapters needs further explaination and luckely another MDT Exprert “Andrew Barnes a.k.a. Scriptimus Prime” has written a nice blog about that: MDT 2012: Automating Network Interface Configuration
Now we have specified our IP configuration based on MAC Address we can specify our Default settings which will be applied to al machines who will connect to the MDT deploymentshare.
Obviously we need a connection to our deploymentshare which is located on the network, with the property “DeployRoot” we specify the network location where the share is located.
By specifying “SkipBDDWelcome” we skip the screen where we can chose for running a new deployment, so that the wizard will automatically advance to the customized MDT wizard for deploying machines.
It is also possible to specify the keyboard layout allready, this is especially handy when you need to authenticate to your deployment share by password with keyboard symbols and characters.
Then off-course it is time to configure our user account which is used to connect to the deploymentshare. No additional rights other then Read, List and Execute are necessary so an specified service account with ‘Domain User’ rights will do the trick if you set your NTFS and Sharing permissions right on the deploymentshare!
So far my first part of explaining how to realize a fully automated deployment.
Please feel free to contribute in the comments
Download the script here:
One question about : OSDAdapter0DNSSuffix=contoso.local
After doing an workgroup-deployment with these settings i didn`t find te contoso.local in the dns-suffix of the NIC.
Is this true or should it be there?
Hi Mvd, the settings defined here, regard your WinPE session, so after the machine is installed these settings are lost. Unless you configure the same settings in your customsettings.ini which I have written here: http://renshollanders.nl/?p=374 then the DNS suffix should be filled in when you look at the properties.
Question: i have set my keyboardlocale to the following: KeyboardLocale=nl-BE (also tried 0813:00000813) in my bootstrap.ini file yet for some reason the deployment wizard is still set to the default united states keyboard when if for example need to choose a computername. Any idea how i can fix this?
Did you also put this value in the CustomSettings.ini since you mention Bootstrap.ini?
I found the issue.
The keyboardlayout in my Windows 7 image was working since it takes the setting from the customsettings.ini file (KeyboardLocale=0813:00000813)
However it seems that this does not work for the bootstrap.ini file. I had a look inside the litetouch.swf script and found that it references KeyboardLocalePE instead of KeyboardLocale!!
So i entered KeyboardLocalePE=0813:00000813 instead and now my deployment wizard uses the correct keyboardlayout!!
(I am using MDT 2012)
That’s great to hear you resolved it. Indeed KeyboardLocalePE applies for the boot image. Sometimes I see questions of people on technet, who regardless of their setting in customsettings.ini, their KeyboardLocale will just not work. So in that case KeyboardLocale can also be specified in the bootstrap.ini.
Anyways good suggestion, I’ll change my blog about bootstrap.ini asap!
Thanks, have a nice weekend!
Pingback: Windows Server 2012 R2 Deployment | erik's weblog
Hi This looks like an issue I have been wrestling with for sometime.
SCCM 2012 sp1
MDT 2012 Integration
I am using UDI Wizard along wth customsettings.ini
I want to have users get the UDI wizard and choose the settings like what OU they want the computer to go into during the task sequence.
I then want the computer name to be based on the OU that has been chosen eg:
If the user picks Eastern Regions in the UDI Wizard then during the taks sequence the name of the computer will be be based on the OU that the computer is put int for example – EASw7L-%serial%
I need help understand how to setup the variables using OSDDomainOUName if needed and what step to use this in the Join Domain vs Apply Network Settings.
We can do a remote connection so you can see whats going on if that will make things easier.
Thanks for any help with this!
Thanks for your question. Have you ever considered using the MDT database and use the locations options? Basically the locations option, is based on the default gateway of that particular branche office. For those machines you can then either prepopulate the OSDComputername with EASW7 L (for laptop) and %Serial% for its serial number. Secondly you can determine for each location a different OU.
If this is to much of a hassle or in some way not desired, perhaps then there is another option. I’ve once wrote a blog about determine some task sequence settings based on the first two characters of a hostname. Please see this link for more information:
This can either be used with Litetouch or UDI installation.
hey rens ive costumized my ini file but it does not do any of the values i have put up. i have even copied youre file but it does not work. do i need to restart the system or something before the changes take place?
Hi, no need to reboot the MDT server, the client however needs to be rebooted. The settings in customsettings.ini are effective immediately for new computers. There is a possibility that your target computer needs to receive a diskpart clean operation, to swipe the disks empty, since MDT copies the scripts, customsettings.ini and tasksequence to the local machine. If this is still present on the disk of the machine, you will not see any difference between the updated customsettings.ini in your deploymentshare, and the settings on the machine you are trying to deploy.
Thanks for all you do!! I really enjoy all your posts! I have one small problem I haven’t been able to solve at work or at home in my MDT test lab. I’m trying to do DomainJoin. I’ve added the following to my CustomSettings.ini
Towards the end of my TS I have Recover From Domain
Every time I run the TS. The OS is deployed. I the TS finishes with the warning, “ZTIDomainJoin has attempted to join to domain [mdt.local] too many times. Count = 4”
This is an OS being deployed to a VM as a new computer with a new computer name. The OU the computer is being joined to is Computers. Full and almost all Permissions have been delegated to the OU create/delete objects.
My question is- Do I need to use Recover From Domain in the TS even though I have the DomainJoin code in the Rules (CustomSetting.ini?)
I was also wondering if I could just use the unattend.xml file only to join to the domain?
Have you tried joining the domain manually with the specified credentials and does this function, if so there can be only two things wrong: First: the OU, which you don’t seem to use, so new objects should appear in AD under the computer objects folder. Second: Your JoinDomain vs. DomainAdminDomain, they should be the same. so for both, it’s “contoso.com” alternatively, you may also use/test the “netbios domain name?” for example, if your domain is “contoso.com” you may try joining with “contoso”.
Hope this helps!
Thank your for your kind comment!
Regarding the comment of Sven Bracke, I can confirm the you not should use KeyboardLocale in the bootstrap.ini but KeyboardLocalePE. Because when you use KeyboardLocale you can’t reuse the setting in the CustomSettings.ini with an other value. So KeyBoardLocalePE can be used in the bootstrap.ini the determine your keyboard en language in the MDT Deployment Wizard and for the keyboard en language in your image you use KeyBoardLocale in CustomSettings.ini.
Hi Rens –
I’m hoping you can help me out regarding to MDT and its database.
Essentially I just want our lab machines to resolve its hostname, static IP, and DNS. Active directory is not an option for us; 1. Because MDT and DHCP are on the different server, and 2. WDS is set up as a stand alone.
So I set up SQL Server within WDS/MDT server, added the SQL Server to MDT, and then created a database. I had only created one entry so far for a test machine, using identifier MAC Address. I set the appropriate IP, DNS, and gateway. BUT each time I imaged that client machine, it keeps pulling DHCP.
Within ‘details’ tab in my database, the client machine is set to DHCP – false.
Any help is greatly appreciated.
You will not receive a static IP address through configuration with an MDT database. You will need DHCP in the first place, or configure a static ip address in the bootstrap and customsettings.ini. But this means that each machine you are going to deploy will receive initially that same IP address. My suggestions would be to configure DHCP scope with a range of one or two IP addresses.
Great to see this.. Just one quick note that the sample Bootstrap.txt file has header as MacAddress which wont work as it is case sensitive, it should be MACADDRESS