Last week I needed to add a large number of hotfixes to the Task Sequencer for an XP BDD 2007 build. After adding the first few by hand I quickly sought after an easier method. As I result I came up with the code below. Althougth it may not be that useful to anyone else I thought I'd post it anyway so people can start to see what is possible using Powershell with BDD.
To use this function as is you need to have a Security Updates group in the task sequencer already. Then create a directory called Hotfixes under Applications in your Distribution point. Download the hotfix into the hotfixes directory and then run Add-Hotfix "hotfixname" "Path to TS.xml". So for a hotfix called WindowsXP-KB923191-x86-ENU.exe you would type something like: Add-Hotfix "WindowsXP-KB923191-x86-ENU" "C:\Data\TS.xml"
function
Add-Hotfix ([string] $hotfix, [string]$TSFile) {
$ts = [xml](Get-Content -read -1 $TSFile)
$updates = $ts.psbase.SelectSingleNode("//group[@name='Security Updates']")
$step = $ts.CreateElement("step")
$name = $ts.CreateAttribute("name")
$name.psbase.Value = "Microsoft Update - " + $hotfix
$step.SetAttributeNode($name)
$disable = $ts.CreateAttribute("disable")
$disable.psbase.Value = "false"
$step.SetAttributeNode($disable)
$continueOnError = $ts.CreateAttribute("continueOnError")
$continueOnError.psbase.Value = "false"
$step.SetAttributeNode($continueOnError)
$successCodeList = $ts.CreateAttribute("successCodeList")
$successCodeList.psbase.Value = "0 3010"
$step.SetAttributeNode($successCodeList)
$description = $ts.CreateAttribute("description")
$description.psbase.Value = ""
$step.SetAttributeNode($description)
$startIn = $ts.CreateAttribute("startIn")
$startIn.psbase.Value = "%DEPLOYROOT%\Applications\Hotfixes"$step.SetAttributeNode($startIn)
$action = $ts.CreateElement("action")
$action.psbase.InnerText = $hotfix + ".exe /quiet /passive /norestart"
$step.AppendChild($action)
$updates.AppendChild($step)
$ts.Save($TSFile)
}