Over the last few weeks I’ve found myself more and more frequently on the phone to Dell. They’ve recently introduced a system where you can key in the Express Service Tag of the system you’re calling about.

Most of the records we keep are of the service tag, not the express service tag. Keen to quickly convert a service tag, I put together a Windows Gadget to do the conversion from my desktop.
Click here to download and install the gadget. I’ve only tested it on Windows 7 x64, but it should work on Vista too.
Technically speaking, the Express service tag is a Base 10 (Decimal) number. The service tag is just a Base36 representation of that number.
Having decommissioned a few legacy AD DS domains over the last year or so we’ve had a few references in TFS to missing accounts. When attempting to delete the workspace you get the following error:
TF50605: There was an error looking up the SID for OLD-DOMAIN\CCNETNIGHTLYBUILD.
In order to delete the workspace, we need to remap it to a valid user account. Here’s the process to do just that.
Firstly, we should list the workspaces on this computer we’re having problems with (in this case, BUILDSERVER01).
C:\>tf workspaces /owner:* /server:http://tfs-server:8080 | findstr BUILDSERVER01
Workspace Owner Computer Comment
----------------------- ------------------------------- --------------- -------------------------------
BUILDSERVER01 saCCNetNightly BUILDSERVER01 Temporary CruiseControl.NET Wo
BUILDSERVER01 OLD-DOMAIN\CCNETNIGHTLYBUILD BUILDSERVER01 Temporary CruiseControl.NET Wo
BUILDSERVER01 saCCNetNightly BUILDSERVER01
We may as well attempt to delete the workspace, though the process is likely to fail as it wont be able to resolve the SID if the domain is no longer available.
C:\>tf workspace /delete /server:http://tfs-server:8080 BUILDSERVER01;OLD-DOMAIN\CCNETNIGHTLYBUILD
TF50605: There was an error looking up the SID for OLD-DOMAI\CCNETNIGHTLYBUILD.
At this point, we need to open up the TfsVersionControl table and manually point the workspaces to a valid identity. The first stage is to identify the ID of the missing account:
SELECT IdentityId FROM tfsVersionControl.tbl_Identity WHERE (DisplayName LIKE 'OLD-DOMAIN\CCNETNIGHTLYBUILD')
Now that we have the ID, we can locate the workspaces the owner has on the server we’re having problems with.
SELECT WorkspaceId, OwnerId, WorkspaceName FROM tfsVersionControl.tbl_Workspace WHERE (OwnerId = 311) AND (Computer = 'BUILDSERVER01')
We should now update the tfsVersionControl.tbl_Workspace table with a valid IdentityId from the tfsVersionControl.tbl_Identity table. Once that’s done, try the delete command again:
C:\>tf workspace /delete /server:http://tfs-server:8080 "BUILDSERVER01;Dave Hope"
A deleted workspace cannot be recovered.
Workspace 'BUILDSERVER01;Dave Hope' on server 'http://tfs-server:8080' has 0 pending change(s).
Are you sure you want to delete the workspace? (Yes/No) Yes
And hey presto, the workspace is gone.
Having recently deployed a handful of Ubuntu Linux systems for proxies and other roles I wanted to join them to Active Directory for Single Signon. Nobody wants to remember lots of different passwords, lets face it.
I came across a product called Likewise, the free open-source version is available in the standard Ubuntu repositories. Here’s a quick guide for how to get up and running with likewise-open.
Firstly, install Likewise.
$ sudo aptitude install likewise-open
The final part of the installation will prompt you for some information about your Active Directory domain. If you need to change the settings you enter here run dpkg-reconfigure krb5-config.

The second screen asks you for an administrative domain controler where password changes will occur.

With the installation complete we now need to join the system to the Active Directory domain, this is accomplished with one simple command.
$ sudo domainjoin-cli join NWTRADERS.MSFT Administrator

I then wanted domain admins to be able to use sudo. This can easily be achieved by adding the following to the end of the /etc/sudoers file.
%NWTRADERS\\domain^admins ALL=(ALL) ALL