2011-02-04 19 views
8

Estoy en el medio de crear una secuencia de comandos para hacer una gran cantidad de movimientos en mi instancia de TFS. Tengo los cmdlets tfs disponibles con TFS Power Tools 2010, pero la documentación de get-help para ellos es muy escasa. Específicamente, Add-TfsPendingChange no parece ser compatible con rename, lo que me obliga a utilizar "tf.exe rename" en su lugar.Powershell y TFS: tf.exe en comparación con los cmdlets TFS de Power Tools?

En primer lugar: ¿de alguna manera he perdido la documentación de los cmdlets? He intentado obtener ayuda en los comandos, pero no admiten indicadores detallados o detallados. ¿Hay algo más disponible?

En segundo lugar: ¿por qué razón tengo que preferir alguno de los cmdlets sobre el tf.exe normal? ¿Hay otros beneficios además de pasar objetos a través de la tubería cuando se realizan funciones similares?

Respuesta

6

Los cmdlets de TF son un poco minimalistas en este momento y eso incluye la documentación provista. En general, utilizaría los cmdlets TF donde admiten lo que intento hacer, especialmente si tiene alguna consulta. Procesar el resultado de los cmdlets de consulta es mucho más fácil porque le dan objetos enriquecidos en lugar de la secuencia de texto que debe analizar al usar algo como tf status . /r.

También tenga en cuenta que en un sistema Windows x64, los cmdlets TF solo funcionan en un host PowerShell de 32 bits.

+1

Niza de la llamada en la cosa de la consola X 86. Encontré el archivo dll-Help.xml, pero leerlo con get-help es mucho más agradable. ¡Gracias! – bwerks

+0

Guau, aparentemente los cmdlets son completamente incapaces de detectar/manejar los cambios de fusión tampoco. Volver a tf.exe voy parece. – bwerks

+0

En el futuro, considere usar los ensamblados públicos de TFS desde dentro de PowerShell (vea el código de muestra en mi respuesta). – weir

6

Los cmdlets tf no son exactamente inútiles, pero ... decidimos no intentar usarlos en nuestro entorno de compilación en este momento, aunque eso signifique un análisis de texto.

Aparte de lo x64, hay un montón de missing commands (gracias @Keith) y los parámetros que faltan, y lo más importante , que no funcionan en sesiones remotas!

3

Una tercera opción es usar los ensamblajes públicos de TFS desde dentro de PowerShell. Cuando hace esto, puede acceder a todas las capacidades del cliente TFS y aún usar cmdlets TFS también. Si elige este enfoque sobre tf.exe y los otros ejecutables de línea de comandos TFS depende del entorno de scripting que prefiera.

Aquí es un comando de una PowerShell para hacer referencia a los TFS 2013 asambleas públicas (por TFS 2012 o 2010 sólo cambia Version=12.0.0.0 a Version=11.0.0.0 o 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 su ejemplo el cambio de nombre, que podría entonces:

  1. Uso del Get-TfsWorkspace cmdlet para crear instancias de un objeto Microsoft.TeamFoundation.VersionControl.Client.Workspace.
  2. Llame al Workspace objeto PendRename, GetPendingChanges y Checkin métodos.

Algo como esto:

$workspace = Get-Workspace 
$workspace.PendRename($oldItemPath, $newItemPath) 
$pendingChange = $workspace.GetPendingChanges($oldItemPath) 
$workspace.Checkin($pendingChange, $comment)