TFSPowershell.Tfs.psm1
#Rest API version to be used $BuildApiVersion = "1.0" #Assemblies folder for TFS Object Model Client $rootPath = $PSScriptRoot $AssembliesDir = "$rootPath\Assemblies" Add-Type -Path "$AssembliesDir\Microsoft.TeamFoundation.Client.dll", "$AssembliesDir\Microsoft.TeamFoundation.Common.dll", "$AssembliesDir\Microsoft.VisualStudio.Services.Common.dll", "$AssembliesDir\Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll", "$AssembliesDir\Microsoft.TeamFoundation.WorkItemTracking.Client.dll" # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Get-TeamProjectCollection { [CmdletBinding()] Param ( [Parameter(mandatory=$true)] [string] $CollectionUrl ) # Get TFS $tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($CollectionUrl) $tfs.EnsureAuthenticated() Write-Output $tfs } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Get-TeamProject { [CmdletBinding()] Param ( [string] $CollectionUrl, [Parameter(mandatory=$true)] [string] $TeamProjectName, [Parameter(ValueFromPipeline=$True)] [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } # Get Team Project $cssService = $Tfs.GetService("Microsoft.TeamFoundation.Server.ICommonStructureService4") Write-Output $cssService.GetProjectFromName($TeamProjectName) } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Get-TeamProjects { [CmdletBinding()] Param ( [string] $CollectionUrl ) $getdUrl = "{0}/_apis/projects?api-version={1}" -f $CollectionUrl, $BuildApiVersion $response = Invoke-RestAPICall -Uri $getdUrl -Method "Get" -Verbose:$VerbosePreference return $response } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Get-AllTFSAlerts { [CmdletBinding()] Param ( [string] $CollectionUrl, [Parameter(ValueFromPipeline=$True)] [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } $eventService = $tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IEventService") $identityService = $tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IIdentityManagementService") foreach ($sub in $eventService.GetAllEventSubscriptions()) { #First resolve the subscriber ID $tfsId = $identityService.ReadIdentity([Microsoft.TeamFoundation.Framework.Common.IdentitySearchFactor]::Identifier, $sub.Subscriber, [Microsoft.TeamFoundation.Framework.Common.MembershipQuery]::None, [Microsoft.TeamFoundation.Framework.Common.ReadIdentityOptions]::None ) if ($tfsId.UniqueName) { $subscriberId = $tfsId.UniqueName } else { $subscriberId = $tfsId.DisplayName } #then create custom PSObject $subPSObj = New-Object PSObject -Property @{ ID = $sub.ID Device = $sub.Device Condition = $sub.ConditionString EventType = $sub.EventType Address = $sub.DeliveryPreference.Address Schedule = $sub.DeliveryPreference.Schedule DeliveryType = $sub.DeliveryPreference.Type SubscriberName = $subscriberId Tag = $sub.Tag } #Send object to the pipeline. You could store it on an Arraylist, but that just #consumes more memory $subPSObj } } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function New-TFSAlert { #FilterExpression "CoreFields/StringFields/Field[Name='Area Path']/NewValue" = '\AreaPath' AND # "CoreFields/StringFields/Field[Name='Authorized As']/NewValue" <> '@@MyDisplayName@@' AND # ("CoreFields/StringFields/Field[Name='Work Item Type']/NewValue" = 'Requirement' OR # "CoreFields/StringFields/Field[Name='Work Item Type']/NewValue" = 'Issue' OR # "CoreFields/StringFields/Field[Name='Work Item Type']/NewValue" = 'Bug') AND # " ""CoreFields/StringFields/Field[Name='State']/NewValue"" <> ""CoreFields/StringFields/Field[Name='State']/OldValue"" " [CmdletBinding()] Param ( [string] $CollectionUrl, [Parameter(mandatory=$true)] [string] $AlertName, [Parameter(mandatory=$true)] [string] $SubscriberAccountName, [Parameter(mandatory=$true)] [string] $FilterExpression, [Parameter(mandatory=$true)] [string] $EventType, [Parameter(ValueFromPipeline=$True)] [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) Write-Verbose "Connecting to TFS..." if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } $eventService = $tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IEventService") $identityService = $tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IIdentityManagementService") Write-Verbose "Retrieving account identification $SubscriberAccountName..." $subsIdentity = $identityService.ReadIdentity([Microsoft.TeamFoundation.Framework.Common.IdentitySearchFactor]::AccountName, $SubscriberAccountName, [Microsoft.TeamFoundation.Framework.Common.MembershipQuery]::None, [Microsoft.TeamFoundation.Framework.Common.ReadIdentityOptions]::None) $subsID = $subsIdentity.Descriptor.Identifier Write-Verbose "Creating alert $AlertName..." $deliveryPreference = New-Object Microsoft.TeamFoundation.Framework.Client.DeliveryPreference $deliveryPreference.Schedule = [Microsoft.TeamFoundation.Framework.Client.DeliverySchedule]::Immediate $deliveryPreference.Type = [Microsoft.TeamFoundation.Framework.Client.DeliveryType]::EmailHtml $eventID = $eventService.SubscribeEvent($subsID,$EventType,$FilterExpression,$deliveryPreference,$AlertName) Write-Verbose "Done." Write-Output $eventID } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Remove-TFSAlert { [CmdletBinding()] Param ( [string] $CollectionUrl, [Parameter(mandatory=$true)] [string] $AlertName, [Parameter(mandatory=$true)] [string] $SubscriberAccountName, [Parameter(ValueFromPipeline=$True)] [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) Write-Verbose "Connecting to TFS..." if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } $eventService = $tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IEventService") $identityService = $tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IIdentityManagementService") Write-Verbose "Retrieving account identification $SubscriberAccountName..." $subsIdentity = $identityService.ReadIdentity([Microsoft.TeamFoundation.Framework.Common.IdentitySearchFactor]::AccountName, $SubscriberAccountName, [Microsoft.TeamFoundation.Framework.Common.MembershipQuery]::None, [Microsoft.TeamFoundation.Framework.Common.ReadIdentityOptions]::None) $subscriberID = $subsIdentity.Descriptor.Identifier Write-Verbose "Retrieving alert $AlertName information..." $subscriptions = $eventService.GetEventSubscriptions($subscriberID, "$AlertName") Write-Verbose "Retrieving alert ID..." $subscriptionId = $subscriptions[0].ID Write-Verbose "Removing alert $AlertName..." $eventService.UnsubscribeEvent($subscriptionId) Write-Verbose "Done." } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Remove-TFSAlertById { [CmdletBinding()] Param ( [string] $CollectionUrl, [Parameter(mandatory=$true,ValueFromPipeline = $true)] [int] $Id, [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) Write-Verbose "Connecting to TFS..." if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } $eventService = $Tfs.GetService("Microsoft.TeamFoundation.Framework.Client.IEventService") Write-Verbose "Removing alert $AlertName..." $eventService.UnsubscribeEvent($Id) Write-Verbose "Done." } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Get-GlobalLists { [CmdletBinding()] Param ( [string] $CollectionUrl, [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) Write-Verbose "Connecting to TFS..." if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } $workItemStore = $tfs.GetService("Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore") return $workItemStore.ExportGlobalLists() } # .ExternalHelp .\MAML\TFSPowershell.Tfs.Help.xml Function Set-GlobalLists { [CmdletBinding()] Param ( [string] $CollectionUrl, [Parameter(mandatory=$true)] [string] $GlobalLists, [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection]$Tfs = $null ) Write-Verbose "Connecting to TFS..." if ($Tfs -eq $null) { $Tfs = Get-TeamProjectCollection -CollectionUrl $CollectionUrl } $workItemStore = $tfs.GetService("Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore") $workItemStore.ImportGlobalLists($GlobalLists) } |