История продолжается:
Если вы выполните команду tf из командной строки cmd, все будет так, как описано в предыдущем ответе. Если вы сделаете это из командной строки PowerShell, вы получите следующее:
PS C:\> & tf.exe workfold c:\projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk /login:macaw\serge,Trasimeno5
TF10125: The path 'c:\projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk' must start with $/
выдает ошибку!
Я перепробовал все, но безрезультатно. Я даже попробовал это через объектную модель TFS, но это стало действительно сложным. Чтобы получить рабочее пространство для локальной папки, вам сначала нужно указать имя сервера tfs. Вероятно, можно выполнить итерацию всех отображенных в настоящий момент рабочих областей и выполнить итерацию по определенным там серверам (что, вероятно, и делает tf.exe), чтобы проверить, принадлежит ли локальная папка этой рабочей области.
Я наконец-то нашел следующее решение:
Я создаю простой командный файл ExecTfWorkprodCommand.bat со следующим кодом:
@echo off
rem This is a kind of strange batch file, needed because execution of this command in PowerShell gives an error.
rem This script retrieves TFS sourcecontrol information about a local folder using the following command:
rem tf workfold /login:domain\user,password
rem %1 is path to the tf.exe executable
rem %2 is the local path
rem %3 is the domain\user [optional, integrated security used if ommited]
rem %4 is the password [optional, if %3 is not specified]
rem Output is in format:
rem ===============================================================================
rem Workspace: Macaw.SolutionsFactory@VS-D-SVDOMOSS-1 (Serge)
rem Server : tfs.macaw.nl
rem $/Macaw.SolutionsFactory/FactoryIdeTools/trunk: C:\Projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk
if [%3]==[] goto integratedsecurity
%1 workfold "%2" /login:%3,%4
goto end
:integratedsecurity
%1 workfold "%2"
:end
И я вызываю этот пакетный скрипт из PowerShell. Из результата хочу разобрать:
- Имя сервера Tfs
- Папка на сервере
Пример кода для решения этой проблемы:
$tfsProductInfo = & "ExecTfWorkprodCommand.bat "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\TF.exe" "c:\projects\Macaw.SolutionsFactory\FactoryIdeTools\trunk" domain\user password
if ($tfsProductInfo -eq $null)
{
Write-Output "Can't determine Tfs source control information on local folder"
}
else
{
$tfsserver = [Regex]::Split($tfsProductInfo[2], ": ")[1].Trim()
$serverpath = [Regex]::Split($tfsProductInfo[3], ": ")[0].Trim()
$localpath = [Regex]::Split($tfsProductInfo[3], ": ")[1].Trim()
Write-Output "Server : $tfsserver"
Write-Output "Server path: $serverpath"
Write-Output "Local path : $localpath"
}