Wednesday, June 16, 2010

Setting Broadcom NICs to 100/FULL during an OSD Task Sequence

In our environment we require all our workstation NICs to be set to 100/FULL. Currently this is a manual step at the time of deployment and from time to time it can be missed. As I was migrating all of our images to Config Manager my goal was to automate as much as possible - such as NIC speed and duplex. Hard coding a NIC for a Windows PE boot image is pretty straight forward – extract the driver, open up the INF file, locate the section were the default speed is listed, set it to whatever value you require and then inject the driver into your boot image. However if you use the same approach when installing drivers during an OS deployment task sequence and you are using a Broadcom NIC your NIC driver will fail to load correctly causing the task sequence to error out. Once you edit the INF file you break WHQL driver signing therefore Windows XP will not install the driver. A quick way around this is to leave the INF file untouched and set it 100/FULL by calling the following script during your task sequence.

Dim WSHShell, RegLocate, RegLocate1
Set WSHShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next

'Locate registry setting for media type
RegLocate = "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\0001\RequestedMediaType"

'Change media type to 100/Full Duplex
WSHShell.RegWrite RegLocate,"6","REG_SZ"

'Exit
WScript.Quit 
  1. Create a package in Config Mgr containing your script - no program necessary
  2. In your task sequence add a command line step after your driver installs
  3. Name this step something like "Set Broadcom NIC to 100/FULL" (helps for future reference) 
  4. Add the following command line - cscript.exe script name.vbs
  5. Enable the package check box and browse for the package containing your script
Add a condition to this step and enter the following WMI query to ensure that your script only runs on Broadcom based NICs.

SELECT * FROM Win32_NetworkAdapter WHERE Manufacturer LIKE 'Broadcom%'

Sunday, June 13, 2010

Configuration Manager PXE Cache Behaviour

If you’ve spent any time dealing with Config Mgr OS deployments using PXE you’ve probably had machines fail to connect to PXE service point with errors such as “TFTP download failed” or “unable to connect to PXE server “. Believe it or not this is by design – especially if you are using unknown computer support. This is most likely due to a previous task sequence being advertised to that machine. By default Config Mgr will cache the PXE advertisement for 60 minutes (Default setting) and then it will expire. Most of the time you can right click the collection the collection that the machine sits in and select “Clear last PXE advertisement” but sometimes you have to go as far as restarting the WDS services. Microsoft published a hotfix under KB969113 for Config Mgr SP1 that will reduce the interval from 60 minutes to 2 minutes and in SP2 the cache expiry can be set in the registry.


On an x86 machine the located under:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SMS\PXE

On an x64 machine the registry key is under:

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SMS\PXE

Create a new DWORD value CacheExpire and set the desired value in seconds. Be careful if you have R2 installed and unknown computer support enabled because if you set the cache expire value too low and you are using a mandatory task sequence your machine will continuously start the same task sequence every time it reboots. There is a good post on the System Center Configuration Team blog that details PXE cache expire behaviour - http://blogs.technet.com/b/configmgrteam/archive/2010/05/27/pxe-cache-expire-behavior-in-configuration-manager-2007-sp1-and-sp2.aspx