So I am working in a Windows 2003 server virtual machine that is hosted by my client and is a member of their domain. This VM is my development VM, and it has MOSS installed and uses many of the same service accounts that our production environment uses so that it's a realistic development environment. This morning, I went to do a compile of a workflow solution I am working on. I have build scripts set up, and they do several things including manaully deploying a shared utility DLL to the GAC and restarting the WSS timer service (sptimerv3), because some of my workflows that use this DLL run after a delay, and when they run after a delay activity, they run under the context of the WSS Timer, so to make sure that the timer is seeing the latest version of the DLL, as well as any app config changes that I have put in the app config file I created for the timer, I restarted the timer. Except that this is what I got:
The Windows SharePoint Services Timer service is not started.
More help is available by typing NET HELPMSG 3521.
System error 1069 has occurred.
The service did not start due to a logon failure.
Well, my timer service is using a domain account, and today is 1/2/2009, I am working from home, and the client's office is closed. Even if they were open, I do not have any AD admin rights. However, I do have read rights to the domain, and I have Softerra's free LDAP browser (http://www.ldapbrowser.com/) and I have PowerShell. That's all I need to confirm my suspicion that the service account expired at the end of 2008.
In the LDAP browser, I do a directory search using the filter
(&(objectclass=*)(CN=TimerServ*))
where TimerServ is the beginning of the Common Name that the timer service is using. There are also other attributes you could search on instead of CN, for example sAMAccountName.
Either way, the result I get back is an LDAP entry that has the following attribute:
So how do you convert that value to a date time?
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=321717&SiteID=1 and
http://msdn.microsoft.com/en-us/library/system.datetime.fromfiletime(VS.85).aspx
But more practically, this line of PowerShell does the trick.
[DateTime][System.DateTime]::FromFileTime(128752632000000000)
It returns
Thursday, January 01, 2009 12:00:00 AM
Yep, the first time the Farm Admin restarts the timer service in 2009, he's going to have a service that doesn't start. I brought this to his attention right away, so he knows he has to talk to the AD admins Monday morning, and he'll get it fixed before it's an issue.
In the mean time, I have to switch my timer service on my dev machine over to another account (my user account) that has equivalent local permissions.
Happy New Year!
Michael