After some investigation I soon found out that SCCM offers multiple ways to deploy an operating system to new machines and also machines already on your network. So far I have tested and implemented the following:
- PXE boot environment with unknown computer support - I have put a password on this at the moment so that users can't unknowingly image a newly added machine. This is useful where you might be in a scenario where you unbox and build multiple machines at one time, you really don't want to be messing around writing down MAC addresses to import for hundreds of PCS at a time.
- Bootable WinPE CD/USB stick, this method means you don't have to enable a PXE server on the network and is useful in environments like mine that already have multiple PXE servers. Unfortunately this means you will have to manually import the machine MAC address and put it into the OSD collection before it can be installed. The disadvantage here is that you end up with a duplicate system in SCCM once it is renamed, but providing you have scavenging set up it should disappear reasonably quickly.
- If the PC you image is an existing PC with a previous OS (WinXP) you can simply for an install of the SCCM Client and then put the machine into the OSD collection. This can be very handy, but again it will create a duplicate machine in SCCM, which will be marked as "obsolete". This appears to be by design to avoid endless build cycles.
- Stand-alone task sequence media on CD/USB stick for the entire task sequence onto a DVD - this method works well for remote/small offices that don't have any server infrastructure, but SCCM task sequences can be rather large, in my case I need 3 DVDs worth to fit my standard image. It looks like high capacity USB flash drives are more feasible in this scenario.
You can then select the type of media to create or create an ISO of the image for later use. Coming from an Altiris background I have to say I was very impressed easy this was and how well this solution worked.
I've got ahead of myself a little bit here, the largest part of this was the creation of the task sequence to begin with. I was fortunate that I had a base Windows 7 install.wim. Unfortunately it had only been tested on a handful of different models of PCS. After an evaluation of my asset management database I found that I actually had 11 distinct types of desktops that would support Windows7 in my environment. At this point I got a bit of headache, thinking back to Altiris and the multiple images for Windows XP. I wanted to get away from this and have "one image to rule them all".
One Image to Rule them All
The first thing I did was to test my Boot.wim with each device to ensure two things:
- Each device could successfully boot to WinPE image.
- By pressing F8 during PE boot and using the command prompt I could verify that WinPE could see the Hard Disk Drive and Network Card.
Now I had a working preinstall environment I could then begin testing deploying my main image. The next thing I done was to visit the manufacturer websites and download all existing drivers for the products I wanted to move to Windows 7. I downloaded the drivers for eleven models in total and stored them neatly on my SCCM server, sorting by model and device type. I then had another decision to make.
Order Vs Chaos
After some research it would appear there are two ways to approach driver management. One being "Chaos" whereby you simply import every driver possible and then allow every machine being built to scan then entire available driver database. The "Order" solution is a very controlled environment whereby you import drivers for each model into a package and apply only that specific package to its relevant model. Being lazy I liked the sound of Chaos, but In practice I found this method to be much slower at building machines; the more drivers there are available the longer Windows takes to sort through and determine which driver is the most suitable.
I was surprised to find that even when you select x64 drivers only that the packages also seem to contain XP, Vista, x86 drivers too. If you are going to import the packages for an x64 image like mine make sure to remove these drivers.
Trying to adopt the "Order" method was causing me to run into issues. SCCM doesn't like it when you try to import a duplicate driver. It turns out that it's quite common for several HP laptops and desktops to share the exact same hardware, this was causing an error when trying to import this driver even although I just wanted to put that driver into my specific machine package. To get around this I installed patch KB2213600 which will allow SCCM to import duplicates.
With this method I was left with eleven different driver packages which I could apply. The next question would undoubtedly be how does SCCM know to apply that specific driver package?
Using a WMI query to select the model name from the system bios as a condition for installation allows only this package to be installed.
It's not only drivers that benefit from this functionality, what about the differences in software between laptops and desktops? You won't want to install certain software such as a VPN client or a mobile connectivity suite on your desktops! Luckily there are a couple of easy ways around this.
Below shows and example using the "IsLaptop" variable - note that this is only availble when you have MDT integration. Before checking for this variable you will need to perform a "Use Toolkit Package" and a "Gather" from the MDT menu.
This also seems to work bothways. IE you can use "isDesktop" |
You can also check for the presence of a battery.
Hardware Based Applications
When I had created all my packages and performed some test builds I noticed that there were some systems that just wouldn't install the drivers without its accompanying piece of software. ATI and Nvidia graphics packages seem to be the worst culprits, as both rely on their "Catalyst control centre" and "Nvidia Control Panel" to offer any advanced functionality. Bluetooth drivers were also the same as each device requires its own custom Bluetooth stack. I read elsewhere that these types of programs were called "Hardware based applications" being that they blur the lines between drivers and software. I found the simplest way to deal with these is to treat them like any other piece of software. Referring to the suppliers documentation *cough* and after fiddling about I found all the required silent install switches.
So far I'm about 90% there towards finalising the build. There are always little tweaks to go back and add. The other big part of this will be a brand Active Directory/Group policy re-structure which will go a long way to configuring this build. I don't want to add too many registry fixes into the build, but inevitably these will keep coming. At this point my OSD task sequence looks like this.
Please note that grey items are currently disabled experimental steps I was toying with. In the end I don't think I really need these. Using the above I can perform a zero touch installation on a new out-of-box PC or reimage an existing machine by simply dropping the PC into the OSD collection.
Like I said, I'm still an SCCM newbie and I would appreciate any advice on improving this.
Andrew
greate post! too bad I see it only when I'm finished with my task sequences but otherwise it would have been a great source of info!
ReplyDeleteHow long time did it took you to complete yours?
thanks
Hi Ersatyle - thanks for commenting. I know it was very frustrating when I did my task sequence there seemed to be a lack of examples. Although MDT templates were available there seemed to be a lack of the basic info required such as the logic processing behind software and driver management.
ReplyDeleteThe task sequence I made has been changing often since this post, I've added extra features such as on-the-fly updates, Bitlocker support etc.
My company still have not started our Windows 7 migration project yet so I'm making the most of the time trying to make a "global" standard image and categorising and packaging applications to job roles for role-based rap-list deployment. I also have still yet to begin adding support for USMT. I'm always interested to see other peoples task sequences if you would maybe like to post yours? Kind Regards Andrew.
Some good tips there, thanks very much!
ReplyDeleteThank you for taking time and writing about your experiences. This has helped me immensely!
ReplyDeleteHi
ReplyDeleteThanks for this post - learning SCCM myself - moved from altiris. Found this other blog post for capturing any errors useful. http://schadda.blogspot.co.uk/2012/01/sccm-2012-how-to-catch-errors-in-task.html
Nice post dear. I really like it Zero Clients & Thin Clients
ReplyDeleteGreat post
ReplyDeleteWould you be so kind to share your task sequence? without personal info, of course.
I'm rather new in SCCM and much appreciated to have such a good starting point, it's all in the details ;)
Thanks a lot
NV
Would you be kind enough to show me how you were able to deploy IBM Client Access as a package or Application in SCCM . Thanks
ReplyDelete