If you've been reading this blog, you'll notice that I'm a fan of PowerShell and their integration and .NET stories. While PowerShell has great support for command-line exe's (you can do the same separation of stdout/stderr, for instance, that bash has had over tcsh for so many years), the more I use PowerShell, the more I hate most exe's.
Why is that? Because of the poor integration story. Unless you're willing to do some heavy lifting, you're normally stuck with input mechanisms like temp files, command-line params (in the fixed-size buffer you have available for passing those), environment variables, and a few other similar things. Nothing great, nothing very structured (natively, you can always use a serialization format like xml), and it's always a bit of work. Your output mechanisms aren't much better, as you're looking at an int (the exit code) and variable amounts of data from your stdout and stderr mechanisms. It's one of those things where the mechanisms afforded worked great for the simple cases, but once you wanted to do more complex things, you had to introduce more work, usually text-based processing (find . -exec ... | grep foo | sort -u | awk '{ print $2 }' | cut -c19-32 | ...)
Even inside TFS, some of our story in V1 is pretty limited to command-line utilities. This is the truest in the admin/ops story, as you're often stuck with things like TfsAdminUtil, TfsSecurity, parts of tf.exe (permissions, for instance), BisSubscribe.exe, TfsReg.exe, TfsDeleteProject.exe, ProcessTemplateManager.exe, etc.
Don't get me wrong - in many cases the exe is all you need. In many cases, it's exactly what you need. But what if it isn't?
In my Perfect World, you wouldn't be limited to exe's, but you'd have more of a stack available to you and you'd integrate at the points that were most convenient. As a comparison point, you can see how in the version control part, you have the web services (go TeamPrise!), the object model, tf.exe, and the VSIP interfaces (not to mention the usual Visual Studio macros and tricks you can do). Having more and richer integration/extension points makes it less and less important whether we handle every need in-box, because it makes it easier for others to leverage our work.
Exchange 2007 really has the story I want us to go after. Their admin story is fully centered and focused on PowerShell, and the GUI they provide is just a usability gain on top of the cmdlets (and like I said above, cmdlets IMHO should, in turn, be nothing more than a usability gain over your object model). PowerShell has let that team throw away a lot of the plumbing code that doesn't really help customers and let them write and expose rich interfaces that make things that used to take 200 lines of vbscript down to 2 or 3 lines of PowerShell.
Don't get me wrong, though, you can still get a lot of the benefits of PowerShell even with TFS v1 (after all, I've got some scripts that use the GSS interfaces instead of calling TfsSecurity.exe), but I'm looking forward to a future version where we're doing more of the heavy lifting in-box and doing more to surface a lot of this functionality that we've coded, but "hidden" behind interfaces like exe's that may not be as useful to you.
If you're still reading (and I'm amazed if you are), then what I really would like to know is:
These questions are not just to figure out what goes into a given release and what doesn't, but also (just as important), *when* it goes into a release. If something is of huge importance, everyone is better off the earlier that code goes into the product, so it has more betas and CTP's to get hammered on but people, but inside and outside Microsoft.
Is our existing exe's all I want to see exposed? Of course not! Many of the other tools are ones that don't really even have to be in-box, but could be shipped out-of-band (power toytool style). Some of these are actually small enough that I have scripts already for them and just need to clean them up a bit and post them.
Any other tools you'd like to see?
And, finally, just to fill in some more questions I've wondered: