VisualStudioTeamServices.psm1
<#
Name: VisualStudioTeamServices.psm1 Description: Module file for VisualStudioTeamServices Author: Christopher Mank Date: 12/07/2015 #> <# .SYNOPSIS Gets Work Items from VSTS .DESCRIPTION This cmdlet takes in connection info for your VSTS account and a query to access work items. These work items are then returned. .PARAMETER StrUserName The username used to access the VSTS account .PARAMETER StrPassword The password for the given username passed .PARAMETER StrVstsAccountName The account name for your VSTS account. This is the section that comes before the ".visualstudio.com" portion of your account URL. .PARAMETER StrQuerySelectNoSpaces The SELECT clause of the work item query .PARAMETER StrQueryWhere The WHERE clause of the work item query .EXAMPLE Get-VstsWorkItemByQuery .NOTES AUTHOR: Christopher Mank LASTEDIT: December, 07, 2015 #> Function Get-VstsWorkItemByQuery { [OutputType([System.Object])] Param ( [Parameter(Mandatory=$True)] [String]$StrUserName, [Parameter(Mandatory=$True)] [String]$StrPassword, [Parameter(Mandatory=$True)] [String]$StrVstsAccountName, [Parameter(Mandatory=$True)] [String]$StrQuerySelectNoSpaces, [Parameter(Mandatory=$True)] [String]$StrQueryWhere ) # Configure the basic authentication header and account info $StrCred = ("{0}:{1}" -f $StrUserName, $StrPassword) $StrCred = [System.Text.Encoding]::UTF8.GetBytes($StrCred) $StrCred = [System.Convert]::ToBase64String($StrCred) $HshHeader = @{Authorization=("Basic {0}" -f $StrCred)} $StrVstsAccountUrl = "https://$StrVstsAccountName.visualstudio.com/DefaultCollection/_apis" # Build the query from the query parts $StrQuery = "{`"query`": `"Select $StrQuerySelectNoSpaces From WorkItems Where $StrQueryWhere`"}" # Query Vsts for Work Items $JsnResponse = Invoke-RestMethod -Uri "$StrVstsAccountUrl/wit/wiql?api-version=1.0" -Headers $HshHeader -Method Post -ContentType application/json -Body $StrQuery # Return function if we didn't find any results If ($JsnResponse.workItems.Count -eq 0) { Return } # Loop through returned Work Items to build CSV list Foreach ($objWorkItem In $JsnResponse.workItems) { $StrIdList += $objWorkItem.id.ToString() + "," } $StrIdList = $StrIdList.TrimEnd(",") # Get Work Item data from Vsts $JsnResponse = Invoke-RestMethod -Uri "$StrVstsAccountUrl/wit/WorkItems?ids=$StrIdList&fields=$StrQuerySelectNoSpaces&api-version=1.0" -Headers $HshHeader -Method Get # Write Output Write-Output $JsnResponse.value } <# .SYNOPSIS Creates Work Items in VSTS .DESCRIPTION This cmdlet takes in connection info for your VSTS account and a project name and work item title. It then creates the work item based on the type passed. .PARAMETER StrUserName The username used to access the VSTS account .PARAMETER StrPassword The password for the given username passed .PARAMETER StrVstsAccountName The account name for your VSTS account. This is the section that comes before the ".visualstudio.com" portion of your account URL. .PARAMETER StrProjectName The name of the VSTS project .PARAMETER StrWiTypeName The type of work item to create (Backlog Item, Bug, etc.) .PARAMETER StrTitle The title of the work item .EXAMPLE New-VstsWorkItem .NOTES AUTHOR: Christopher Mank LASTEDIT: December, 07, 2015 #> Function New-VstsWorkItem { [OutputType([System.Object])] Param ( [Parameter(Mandatory=$True)] [String]$StrUserName, [Parameter(Mandatory=$True)] [String]$StrPassword, [Parameter(Mandatory=$True)] [String]$StrVstsAccountName, [Parameter(Mandatory=$True)] [String]$StrProjectName, [Parameter(Mandatory=$True)] [String]$StrWiTypeName, [Parameter(Mandatory=$True)] [String]$StrTitle ) # Configure the basic authentication header and account info $StrCred = ("{0}:{1}" -f $StrUserName, $StrPassword) $StrCred = [System.Text.Encoding]::UTF8.GetBytes($StrCred) $StrCred = [System.Convert]::ToBase64String($StrCred) $HshHeader = @{Authorization=("Basic {0}" -f $StrCred)} $StrVstsAccountUrl = "https://$StrVstsAccountName.visualstudio.com/DefaultCollection/$StrProjectName/_apis" # Build request body $JsnBody = "[` {` `"op`": `"add`", `"path`": `"/fields/System.Title`", `"value`": `"$StrTitle`" } ]" # Create new Vsts Work Item $StrUri = "$StrVstsAccountUrl/wit/workitems/`$$StrWiTypeName" + "?api-version=1.0" $JsnResponse = Invoke-RestMethod -Uri $StrUri -Headers $HshHeader -Method Patch -ContentType application/json-patch+json -Body $JsnBody # Write Output Write-Output $JsnResponse } <# .SYNOPSIS Updates Work Items in VSTS .DESCRIPTION This cmdlet takes in connection info for your VSTS account and a work item Id and updates the title with the information passed. .PARAMETER StrUserName The username used to access the VSTS account .PARAMETER StrPassword The password for the given username passed .PARAMETER StrVstsAccountName The account name for your VSTS account. This is the section that comes before the ".visualstudio.com" portion of your account URL. .PARAMETER IntWorkItemId The Work Item Id to update .PARAMETER StrTitle The title of the work item .EXAMPLE Update-VstsWorkItem .NOTES AUTHOR: Christopher Mank LASTEDIT: December, 07, 2015 #> Function Update-VstsWorkItem { [OutputType([System.Object])] Param ( [Parameter(Mandatory=$True)] [String]$StrUserName, [Parameter(Mandatory=$True)] [String]$StrPassword, [Parameter(Mandatory=$True)] [String]$StrVstsAccountName, [Parameter(Mandatory=$True)] [String]$IntWorkItemId, [Parameter(Mandatory=$True)] [String]$StrTitle ) # Configure the basic authentication header and account info $StrCred = ("{0}:{1}" -f $StrUserName, $StrPassword) $StrCred = [System.Text.Encoding]::UTF8.GetBytes($StrCred) $StrCred = [System.Convert]::ToBase64String($StrCred) $HshHeader = @{Authorization=("Basic {0}" -f $StrCred)} $StrVstsAccountUrl = "https://$StrVstsAccountName.visualstudio.com/DefaultCollection/_apis" # Build request body $JsnBody = "[` {` `"op`": `"add`", `"path`": `"/fields/System.Title`", `"value`": `"$StrTitle`" } ]" # Update Vsts Work Item $StrUri = "$StrVstsAccountUrl/wit/workitems/$IntWorkItemId" + "?api-version=1.0" $JsnResponse = Invoke-RestMethod -Uri $StrUri -Headers $HshHeader -Method Patch -ContentType application/json-patch+json -Body $JsnBody # Write Output Write-Output $JsnResponse } |