functions/get-d365tfsworkspace.ps1

<#
.SYNOPSIS
Get the TFS / VSTS registered workspace path
 
.DESCRIPTION
Gets the workspace path from the configuration of the local tfs in visual studio
 
.PARAMETER Path
Path to the directory where the Team Foundation Client executable is located
 
.PARAMETER TfsUri
Uri to the TFS / VSTS that the workspace is connected to
 
.EXAMPLE
Get-D365TfsWorkspace -TfsUri https://PROJECT.visualstudio.com
 
This will invoke the default tf.exe client located in the Visual Studio 2015 directory
and fetch the configured URI.
 
.NOTES
Author: Mötz Jensen (@Splaxi)
#>

function Get-D365TfsWorkspace {
    [CmdletBinding(DefaultParameterSetName = 'Default')]
    param (
        [Parameter(Mandatory = $false, ParameterSetName = 'Default', Position = 1 )]
        [string]$Path = $Script:TfDir,

        [Parameter(Mandatory = $false, ParameterSetName = 'Default', ValueFromPipelineByPropertyName = $true, Position = 2 )]
        [string]$TfsUri = $Script:TfsUri
    )
    
    $executable = Join-Path $Path "tf.exe"
    if (!(Test-PathExists -Path $executable -Type Leaf)) {return}

    if([system.string]::IsNullOrEmpty($TfsUri)){
        Write-PSFMessage -Level Host -Message "The supplied uri <c='em'>was empty</c>. Please update the active d365 environment configuration or simply supply the -TfsUri to the cmdlet."
        Stop-PSFFunction -Message "Stopping because TFS URI is missing."
        return
    }

    Write-PSFMessage -Level Verbose -Message "Invoking tf.exe"
    #* Small hack to get the output from the execution into a variable.
    $res = & $executable "vc" "workspaces" "/collection:$TfsUri" "/format:detailed" 2>$null

    if (![string]::IsNullOrEmpty($res)) {
        [PSCustomObject]@{
            TfsWorkspacePath = ($res | select-string "meta").ToString().Trim().Split(" ")[1]
        }
    }
    else {
        Write-PSFMessage -Level Host -Message "No matching workspace configuration found for the specified URI. Either the URI is wrong or you haven't configured the server connection / workspace details correctly."
    }
}