Geeks With Blogs


View Tarun Arora's profile on LinkedIn

profile for Tarun Arora at Stack Overflow, Q&A for professional and enthusiast programmers

Tarun Arora - Visual Studio ALM MVP ALM, Agile, Automation, Performance Testing, Software QA, Cloud, ...

A couple of weeks back I had posted a blog post on getting a list of software installed on the build agent by simply customizing the build process template. Building on top of the same solution, I have created a website” which gets updated once every day with the list of software installed on the TFS hosted build server.

In this blogpost, I’ll show you how I have implemented this solution, but first a screen shot of what information the website carries,

  • The name of the software installed on the TFS Service hosted build
  • The version of the install on the TFS Service hosted build
  • The Publisher of the software installed on the TFS Service hosted build
  • When that software was installed on the TFS Service hosted build
  • A link to help documentation


The Implementation

The implementation is fairly straight forward,

1. Configure the build process template to run power shell script 

2. Create a SQL Azure database and add a table SoftwareDeployed, at the very basic level, the table should carry these columns,


3. Change the powershell script to import sql ps snapins, store the results of the powershell query in the sql database

$ErrorActionPreference = "Stop"


if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
    throw "SQL Server Provider for Windows PowerShell is not installed."
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)

# Set mandatory variables for the SQL Server provider
Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0
Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30
Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false
Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000

# Load the snapins, type data, format data
cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Update-TypeData -PrependPath SQLProvider.Types.ps1xml 
update-FormatData -prependpath SQLProvider.Format.ps1xml 

$db_server = ""
$tblSoftwareDetail = "SoftwareDetail"
$username = "dbUserName"
$pwd = "dbPassword

# First, clear existing table
$sql_query_del = "Delete from $tblSoftwareDetail"
Invoke-Sqlcmd -ServerInstance $db_server -Database $db -Username $username -Password $pwd -Query $sql_query_del

# Get list of software installed on the build server
gp HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Select DisplayName, DisplayVersion, Publisher, 
InstallDate, HelpLink, UninstallString | foreach {
    $name = $_.DisplayName
    $version = $_.DisplayVersion
    $publisher = $_.Publisher
    $installDate = $_.InstallDate
    $helplink = $_.HelpLink
    $uninstallLink = $_.UninstallString
    Write-Host " Display Name: $name, Version: $version, Publisher: $publisher, InstallDate: $installDate, 
Helplink: $helplink, UninstallLink: $uninstallLink"

    $sql_query = "INSERT INTO $tblSoftwareDetail (Name, Version, Publisher, InstallDate, Helplink, Uninstall) 
VALUES ('$name', '$version', '$publisher', '$installDate', '$helplink', '$uninstallLink')"
    Invoke-Sqlcmd -ServerInstance $db_server -Database $db -Username $username -Password $pwd -Query $sql_query

4. Configure the build to run on a daily schedule to ensure that the software repository list stays up to date.


5. Create a windows azure website and publish a simple website to surface this information to the UI.


I hope you find this blog post… If you have any feedback please feel free to leave a comment. Thank you for taking the time out and reading this blog post. If you enjoyed the post, remember to subscribe to Stay tuned!


Posted on Friday, March 8, 2013 1:26 AM TfsService , TFS2012 , PowerShell | Back to top

Comments on this post: List of Software on TFS Service Hosted Build

comments powered by Disqus

Copyright © Tarun Arora [Microsoft MVP] | Powered by: