New Daylight Saving Time rules go into effect on March 11th, 2007 at 2 AM. Microsoft has provided some sample instructions for updating systems, but there are some serious drawbacks:
- There is no support for Windows 2000 servers or workstations. Actually there is but you have to pay for "Extended Support" to get it.
- The patch for Windows Server 2003 is "optional" so you have to select Custom Windows Updates - not Critical Updates which are the default. THIS IS NO LONGER THE CASE; MICROSOFT RECENTLY CHANGED THE PATCH TO CRITICAL.
- The solution Microsoft proposes for updating multiple computers involves a Computer node Group Policy Object, which is fine but it does require a reboot.
Here is the Microsoft KB on the subject.
What I did was put together a console application that queries the AD structure by operating system, then uses SysInternal's PsExec tool to execute a registry update on multiple remote machines.
ENVIRONMENT: Visual Studio 2005, .NET 2.0, C# (you will need to add the reference for
Here is the code:
static void Main(string args)
SearchResultCollection results = null;
StreamWriter sw = new StreamWriter("\\\\sharename\\DST$\\results.log", true);
StreamWriter swerr = new StreamWriter("\\\\sharename\\DST$\\errors.log", true);
string path = "<a href="ldap:
DirectoryEntry entry = new DirectoryEntry(path);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectCategory=computer)
(operatingSystem=Windows 2000 Server))";
results = mySearcher.FindAll();
foreach (SearchResult searchResult in results)
ResultPropertyValueCollection valcol = searchResult.Properties["name"];
string pc = valcol.ToString();
string psargs = "\\\\" + pc + " -u DOMAIN\\username -p password
</a> Process proc = new Process();
proc.StartInfo.FileName = "C:\\sharename\\DST\\psexec.exe";
proc.StartInfo.Arguments = psargs;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
string output = proc.StandardOutput.ReadToEnd();
// This is done this way because SysInternal's PsExec
// does not handle StandardOutput and StandardError
// when running on a remote machine
sw.WriteLine("Computer: " + pc +
" Result(blank = no update): " + output + "\r\n");
catch (Exception ex)
swerr.WriteLine("Error: " + ex.Message);
// To prevent memory leaks, always call
// SearchResultCollection.Dispose() manually.
if (null != results)
results = null;
}// end namespace
The file DTSUpdate.bat has just three lines:
regedit /s \\sharename\DST$\DSTRegistry.reg
Both of these files (DSTRegistry.reg and DSTInfo.vbs) come directly from Microsoft's Web site.
It seems like the DST issue is sneaking up on a lot of companies. It's probably not going to be that big of a deal, but it is best to be prepared. I thought there would already be something similar posted, but I found nothing... so I am putting it out for general use. If someone finds a way to pipe the PsExec output to a file, I would really like to know how that is done. Thanks.