Private/Get-TeamCityProperties.ps1

function Get-TeamCityProperties 
{
    <#
    .SYNOPSIS
    Loads TeamCity system build properties into a hashtable
    Doesn't do anything if not running under TeamCity
 
    .DESCRIPTION
    Teamcity generates a build properties file and stores the location in the environent
    variable TEAMCITY_BUILD_PROPERTIES_FILE.
 
    Loads the TeamCity system build properties into a hashtable.
 
    .PARAMETER propertiesfile
    Path to properties xml file. Defaults to environent
    variable TEAMCITY_BUILD_PROPERTIES_FILE.
 
    .NOTES
    We assume you are in the project root, for several of the fallback options
 
    .EXAMPLE
    Get-TeamCityProperties
 
    .LINK
    https://gist.github.com/piers7/6432985
 
    .LINK
    Get-BuildVariables
    #>

    [OutputType([hashtable])]
    param(
        [string]$propertiesfile = $env:TEAMCITY_BUILD_PROPERTIES_FILE + '.xml'
    )

    if(![String]::IsNullOrEmpty($env:TEAMCITY_VERSION))
    {
        Write-Verbose -Message "Loading TeamCity properties from $propertiesfile"
        $propertiesfile = (Resolve-Path $propertiesfile).Path

        $buildPropertiesXml = New-Object -TypeName System.Xml.XmlDocument
        $buildPropertiesXml.XmlResolver = $null
        $buildPropertiesXml.Load($propertiesfile)

        $buildProperties = @{}
        foreach($entry in $buildPropertiesXml.SelectNodes('//entry'))
        {
            $buildProperties[$entry.Key] = $entry.'#text'
        }
        
        Write-Output -InputObject $buildProperties
    }
}