PowerShell e TFS:tf.exe rispetto ai cmdlet TFS di Power Tools?
-
29-10-2019 - |
Domanda
Sto creando uno script per eseguire grandi quantità di spostamenti nella mia istanza TFS.Ho i cmdlet tfs disponibili con TFS Power Tools 2010, ma la relativa documentazione di aiuto è molto scarsa.Nello specifico, Add-TfsPendingChange non sembra supportare la ridenominazione, il che mi costringe a utilizzare invece "tf.exe rename".
Prima di tutto:ho in qualche modo perso la documentazione per i cmdlet?Ho provato get-help sui comandi, ma non supportano i flag -detailed o -examples.C'è qualcosa di più disponibile?
In secondo luogo:quale motivo devo preferire uno qualsiasi dei cmdlet rispetto al normale tf.exe?Ci sono vantaggi oltre al passaggio di oggetti attraverso la pipe quando si eseguono funzioni simili?
Soluzione
I cmdlet TF sono un'offerta un po 'minimalista a questo punto e che include la documentazione fornita.In generale, userei i cmdlet TF dove supportano ciò che sto cercando di fare, specialmente se hai domande.L'elaborazione dell'output dei cmdlet della query è molto più semplice perché forniscono oggetti ricchi invece del flusso di testo che devi analizzare quando usi qualcosa come tf status . /r
.
Inoltre, tieni presente che su un sistema Windows x64, i cmdlet TF funzionano solo in un host PowerShell a 32 bit.
Altri suggerimenti
I cmdlet TF non sono esattamente inutili, ma ... abbiamo deciso di cercare di usarli nel nostro ambiente di costruzione in questo momento, anche se significa analisi del testo.
A parte la cosa x64, ci sono molti comandi mancanti (grazie @Keith) e parametri mancanti e Soprattutto , non funzionano in sessioni remote!
Una terza opzione consiste nell'utilizzare gli assembly pubblici TFS da PowerShell.In questo modo è possibile accedere a tutte le funzionalità del client TFS e continuare a utilizzare anche i cmdlet TFS.Sia che tu scelga questo approccio tf.exe
e gli altri eseguibili della riga di comando TFS dipendono dall'ambiente di scripting che preferisci.
Ecco un comando PowerShell per fare riferimento agli assembly pubblici TFS 2013 (per TFS 2012 o 2010 basta cambiare 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"
}
Per il tuo esempio di ridenominazione, potresti quindi:
- Usa il
Get-TfsWorkspace
cmdlet per istanziare aMicrosoft.TeamFoundation.VersionControl.Client.Workspace
oggetto. - Chiama il
Workspace
dell'oggetto PendRename, Ottieni modifiche in sospeso E Registrare metodi.
Qualcosa come questo:
$workspace = Get-Workspace
$workspace.PendRename($oldItemPath, $newItemPath)
$pendingChange = $workspace.GetPendingChanges($oldItemPath)
$workspace.Checkin($pendingChange, $comment)