Pergunta

Estou criando um script para fazer uma grande quantidade de movimentos na minha instância do TFS.Tenho os cmdlets tfs disponíveis com o TFS Power Tools 2010, mas a documentação de ajuda para eles é muito escassa.Especificamente, Add-TfsPendingChange não parece suportar renomeação, o que me força a usar "renomear tf.exe".

Primeiramente:de alguma forma, perdi a documentação dos cmdlets?Tentei obter ajuda nos comandos, mas eles não suportam sinalizadores -detailed ou -examples.Há mais alguma coisa disponível?

Em segundo lugar:que motivo tenho para preferir qualquer um dos cmdlets ao tf.exe normal?Existem outros benefícios além de passar objetos pelo tubo ao executar funções semelhantes?

Foi útil?

Solução

Os cmdlets TF são uma oferta um tanto minimalista neste ponto e isso inclui a documentação fornecida.Em geral, eu usaria os cmdlets TF onde eles oferecem suporte ao que estou tentando fazer - especialmente se você tiver alguma dúvida.Processar a saída dos cmdlets de consulta é muito mais fácil porque eles fornecem objetos ricos em vez do fluxo de texto que você deve analisar ao usar algo como tf status . /r.

Lembre-se também de que em um sistema Windows x64, os cmdlets TF funcionam apenas em um host PowerShell de 32 bits.

Outras dicas

Os cmdlets TF não são exatamente inúteis, mas ... decidimos que tentam usá-los em nosso ambiente de construção agora, mesmo que isso signifique análise de texto.

Além da coisa x64, há muitos comandos ausentes (obrigado @Keith) e parâmetros ausentes, e mais importante , eles não funcionam em sessões remotas!

Uma terceira opção é usar os assemblies públicos do TFS no PowerShell.Ao fazer isso, você poderá acessar todos os recursos do cliente TFS e ainda usar os cmdlets do TFS.Se você escolher esta abordagem em vez tf.exe e os outros executáveis ​​de linha de comando do TFS dependem de qual ambiente de script você prefere.

Aqui está um comando do PowerShell para fazer referência aos assemblies públicos do TFS 2013 (para TFS 2012 ou 2010, basta alterar Version=12.0.0.0 para Version=11.0.0.0 ou Version=10.0.0.0).

'Microsoft.TeamFoundation.Client', 'Microsoft.TeamFoundation.Common', 'Microsoft.TeamFoundation.VersionControl.Client' |
    ForEach-Object {
        Add-Type -AssemblyName "$_, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    }

Para o seu exemplo de renomeação, você poderia então:

  1. Use o Get-TfsWorkspace cmdlet para instanciar umMicrosoft.TeamFoundation.VersionControl.Client.Workspace objeto.
  2. Ligar para Workspace objeto PendRenomear, Obter alterações pendentes e Check-in métodos.

Algo assim:

$workspace = Get-Workspace
$workspace.PendRename($oldItemPath, $newItemPath)
$pendingChange = $workspace.GetPendingChanges($oldItemPath)
$workspace.Checkin($pendingChange, $comment)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top