Azure devops 如何删除/修复重影工作区

Azure devops 如何删除/修复重影工作区,azure-devops,Azure Devops,不知怎的,我最终得到了一个“幽灵”工作区。它不会显示在VisualStudio的“管理工作区”下。当我连接到VS Team Services和开放源码控制资源管理器时,它会弹出一个带有TF14061的错误对话框(“工作区不存在”) 当我尝试将其从sidekicks中删除时,也会导致TF14061: tf vc workspace "MYCOMPUTER;My Name" /delete /collection:https://me.visualstudio.com/defaultcollecti

不知怎的,我最终得到了一个“幽灵”工作区。它不会显示在VisualStudio的“管理工作区”下。当我连接到VS Team Services和开放源码控制资源管理器时,它会弹出一个带有TF14061的错误对话框(“工作区不存在”)

当我尝试将其从sidekicks中删除时,也会导致TF14061:

tf vc workspace "MYCOMPUTER;My Name" /delete /collection:https://me.visualstudio.com/defaultcollection

TF14061: The workspace MYCOMPUTER;My Name does not exist.
在我的计算机上搜索搁置集时,我可以看到工作区:

tf workspaces /computer:MYCOMPUTER /owner:* /collection:https://me.visualstudio.com/defaultcollection
结果:

=======================================================================================================================
Workspace  : MYCOMPUTER
Owner      : My Name
Computer   : MYCOMPUTER
Comment    :
Collection : https://me.visualstudio.com/defaultcollection
Permissions: Private
Location   : Server
File Time  : Current

Working folders:
$/: C:\local
仅按工作区名称或所有者名称搜索工作区根本不会返回工作区

我试图创建一个新的工作区并将其映射到同一个文件夹,但我得到的错误是,该文件夹已映射到另一个工作区

如何删除此虚拟工作区

编辑:附加信息 即使所有者相同,这些重复工作区的安全令牌似乎也不同。一个匹配我的Azure AD帐户,另一个匹配我的Microsoft帐户。这很奇怪,因为我的Microsoft帐户在此服务器上没有权限


注意:我使用的是Visual Studio Team Services。

这里发生的情况是,您有两个具有相同显示名称的标识。其中一个标识是使用Microsoft帐户(MSA)创建的旧标识。新身份是您的Azure AD帐户(AAD)。在内部,它们有不同的guid。使用显示的所有者名称运行tf命令workspace/delete命令时,不明确的显示名称将解析为当前标识(AAD),而不是实际拥有工作区的旧标识(MSA)

我记不清了,但如果您确定可以安全地删除任何具有该工作区名称的所有者的所有工作区(请非常小心,确保您不会删除其他人的工作区),则可以运行tf workspace/delete并为所有者使用通配符


我建议您尝试并使用管理工作区功能,看看是否可以删除旧身份下的工作区。如果可行的话,这将是最安全、最简单的方法。

巴克在身份问题上的观点肯定是正确的。我昨天在Azure广告迁移后偶然发现了它。幸运的是,有一条路可走。下面是我在Team Foundation .NET程序集的帮助下找到的PopHealS壳解决方案。(作为记录,我使用的是PowerShell 5.0版。)

  • 将这些程序集加载到PowerShell会话中(其中的版本与Visual Studio的安装相匹配;在我的示例中,版本=12.0.0.0对应于VS 2013):
  • 这似乎是由于无法从PowerShell内直接传递
    $null
    。我以前有过这个问题,这对我有帮助(但现在似乎已经退休了)

  • 将限定名称传递给
    TF.exe
    ,以删除工作区(请记住它是PowerShell,因此是
    -->%
    ):
  • tf工作区/集合:$uri--%/delete'WorkspaceName;11111111-2222-3333-4444-555555555555' 请注意,您还可以调用针对VCS发出的
    queryworkspace()
    返回的对象上的方法


    HTH

    您可以使用tf workspaces命令获取所有工作区的详细XML信息,包括所有者uniqe id和所有者别名用户名:

    tf workspaces /owner:* /format:xml
    
    样本输出:

    <Workspace computer="computer" name="wrkspacename" ownerdisp="Some Name" 
        ownerid="S-1-5-00-0000000000-0000000000-000000000-0000" 
        ownertype="System.Security.Principal.WindowsIdentity"
        owner="12345678-90ab-cdef-1234-567890abcdef"
        owneruniq="12345678-90ab-cdef-1234-567890abcdef">
      <Comment />
      <Folders>
        <WorkingFolder local="C:\Folder" item="$/Folder" />
      </Folders>
      <LastAccessDate>2019-01-01T01:02:03.456+00:00</LastAccessDate>
      <OwnerAliases>
        <string>SERVER\Name</string>
        <string>Name</string>
        <string>Some Name</string>
      </OwnerAliases>
    </Workspace>
    

    您是否尝试使用“tf workspaces/owner:*/computer:MachineName/collection:”命令列出您计算机上所有用户创建的工作区?@Eddie MSFT刚刚尝试了它,它也显示了工作区。您是否检查了以下链接:?我尝试手动删除缓存并运行tf workspaces/remove:*删除缓存。两个人都没有帮我。我还没有对我的电脑重新命名。请注意,所有者有我的姓名,但在我按所有者姓名搜索时,工作区不会显示。此外,我还可以创建一个新的工作区,其名称完全相同。我只是(显然)无法映射到“ghost”工作区中使用的同一目录。如果可以使用相同的名称创建新工作区,则工作区的所有者名称应该不同。您的评估基本正确。我们确实在一年前从MSA迁移到AAD。但MSA的所有权限已被吊销。僵尸工作区的所有者id与AAD匹配。然而,安全令牌不知何故包含MSA id。TF助手也无法删除这些工作区。如果您要在打开免费支持案例,我们将与您一起解决此问题。我们几天前打开了一张支持通知单,似乎正在处理中。@Onots我这里也有同样的问题。。。你找到解决办法了吗?@mehrandvd 10月20日VSTS出现了一个回归,这个回归在10月23日得到了修复。参见弗朗索瓦,我可以在PS会话中加载VS 2017的组件吗?就像你在上面展示的那样?如果是,您是否知道VS 2017对应的版本以及公钥令牌是否会保持不变?您好,SRP,它也应该适用于VS 2017,但VS 2017的情况有所改变。老实说,我没有用VS2017测试它,而是用VS2019测试。您需要安装PowerShell Gallery上提供的PowerShell模块“VSSetup”。然后,您可以执行以下几行PowerShell来加载程序集:请参阅我的下一条评论和灵感。Get-VSSetupInstance |选择VSSetupInstance-Require Microsoft.VisualStudio.TeamExplorer-Latest | Get ChildItem-Recurse-Filter TeamFoundation-Directory | Convert Path | Join Path-ChildPath*| Get ChildItem-Recurse-包括Microsoft.TeamFoundation.Client.dll、Microsoft.TeamFoundation.VersionControl.Client.dll |转换路径| ForEach对象-进程{添加类型-LiteralPath$|非常感谢-xml输出最终帮助我看到了“Windows Live ID\foo.bar”。company@outlook.com"我需要使用的格式。请注意,在某些情况下,您可能需要明确指定集合(如果使用Azure DevOps,则似乎有必要),例如
    tf workspace/delete wrkspacename;123456
    $vcs.QueryWorkspaces('WorkspaceName', $null, $null) | % QualifiedName
    Invoke-Method -InputObject $vcs -MethodName 'QueryWorkspaces' -Arguments $null, $null, 'ComputerName' | % QualifiedName
    tf workspace /collection:$uri --% /delete 'WorkspaceName;11111111-2222-3333-4444-555555555555'
    
    tf workspaces /owner:* /format:xml
    
    <Workspace computer="computer" name="wrkspacename" ownerdisp="Some Name" 
        ownerid="S-1-5-00-0000000000-0000000000-000000000-0000" 
        ownertype="System.Security.Principal.WindowsIdentity"
        owner="12345678-90ab-cdef-1234-567890abcdef"
        owneruniq="12345678-90ab-cdef-1234-567890abcdef">
      <Comment />
      <Folders>
        <WorkingFolder local="C:\Folder" item="$/Folder" />
      </Folders>
      <LastAccessDate>2019-01-01T01:02:03.456+00:00</LastAccessDate>
      <OwnerAliases>
        <string>SERVER\Name</string>
        <string>Name</string>
        <string>Some Name</string>
      </OwnerAliases>
    </Workspace>
    
    tf workspace /delete wrkspacename;12345678-90ab-cdef-1234-567890abcdef