通过 Powershell 远程 TFS 签入
Posted
技术标签:
【中文标题】通过 Powershell 远程 TFS 签入【英文标题】:Remote TFS Checkin via Powershell 【发布时间】:2021-03-09 00:53:35 【问题描述】:我们目前在每台本地 PC 上都有一个计划任务,当使用 schtasks 远程触发时运行命令“TF.exe /checkin”。这样一来,当有人忘记签到时,我们可以远程进行。
但我们希望将其集成到 PowerShell 脚本中,只需输入计算机名称即可远程触发该脚本,但由于某种原因,它似乎不起作用。
这在本地电脑上运行良好
Invoke-Command -ScriptBlock & 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe' checkin /recursive
但是,当添加 -ComputerName 时,它无法工作并出现以下错误。
Invoke-Command -ComputerName *ComputerName* -ScriptBlock & 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe' check-in /recursive
无法确定工作区。您可以通过运行“tf workspaces /collection:TeamProjetCollectionURL”来纠正此问题。 +CategoryInfo: NotSpecified (无法阻止...ColletionUrl'.:string [], Remoteexpection
关于如何解决这个问题的任何想法?我已经尝试过 /collection:https://tfsserver:port/collectionanme 但它也不起作用
错误:如果没有选项 /shelveset,则无法使用选项 /collection,这很奇怪,因为我没有使用 /shelveset。
-----更新----
见下图,在运行 powershell 脚本之前,我在本地电脑上签出了一个文件,然后在远程计算机上运行 Enter-PSSession,然后运行 invoke-command 仍然只签入我的本地文件而不是远程计算机。
---更新04/12---
我不知道为什么它不起作用同样的问题“无法确定工作区”
【问题讨论】:
【参考方案1】:您需要使用以下代码在远程会话中指定工作区路径:
$session = New-PSSession -ComputerName ComputerName
Invoke-Command -Session $session -ScriptBlock Set-Location D:\workspace
Enter-PSSession -Session $session
然后运行 tf 命令:
Invoke-Command -ScriptBlock & 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe' checkin /recursive
整个结果:
【讨论】:
嗨,谢谢你的回复,但是当我尝试它时,它只签入了我的文件而不是远程PC上的文件:D 当你运行$session = New-PSSession -ComputerName ComputerName Invoke-Command -Session $session -ScriptBlock Set-Location D:\workspace Enter-PSSession -Session $session
时,你能看到它返回远程机器路径吗?我已添加截图供您参考。
我已经更新了OT,请看问题。是的,如果我运行上面的代码,我确实看到远程计算机为[ComputerName]: PS C:\U_C>
,然后当我运行Invoke-Command -ScriptBlock & 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\tf.exe' checkin /recursive
时,我得到相同的'无法确定工作区。您可以通过运行“tf workspaces /collection:TeamProjetCollectionURL”来纠正此问题。 +CategoryInfo: NotSpecified (无法阻止...ColletionUrl'.:string [], Remoteexpection'
你需要先运行$session = New-PSSession -ComputerName ComputerName Invoke-Command -Session $session -ScriptBlock Set-Location D:\workspace Enter-PSSession -Session $session
,当它返回[ComputerName]: PS C:\U_C>
时,运行Invoke-Command -ScriptBlock
。
并确保远程会话正在使用工作区所属的用户或工作区设置为公共工作区。否则,tf.exe
将无法为在该计算机中启动远程会话的用户找到工作区。以上是关于通过 Powershell 远程 TFS 签入的主要内容,如果未能解决你的问题,请参考以下文章
用于更新文件和签入 TFS 的 Azure DevOps 管道任务