Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get-VSTeamUser return only 500 users event if there is more, Filtering by Get-VSTeamUser | ? DisplayName also not finding existing user #412

Open
5 tasks
JanuszNowak opened this issue Aug 5, 2021 · 8 comments
Labels
Investigating when an issue needs further investigation by a maintainer. Used only by maintainer.

Comments

@JanuszNowak
Copy link

JanuszNowak commented Aug 5, 2021

Steps to reproduce

$users = Get-VSTeamUser 

Expected behavior

$users = Get-VSTeamUser 
$users | Measure
2537

Actual behavior

$users = Get-VSTeamUser 
$users | Measure
500

Environment data

OS

  • macOS
  • [x ] Windows
  • Linux

Server

  • TFS 2017
  • TFS 2018
  • Azure DevOps Server
  • [ x] Azure DevOps Service
> Get-VSTeamAPIVersion
Name                           Value                                                                                                                                                  
----                           -----                                                                                                                                                  
Packaging                      6.0-preview                                                                                                                                            
Version                        VSTS                                                                                                                                                   
ServiceEndpoints               5.0-preview                                                                                                                                            
HierarchyQuery                 5.1-preview                                                                                                                                            
Graph                          6.0-preview                                                                                                                                            
Pipelines                      5.1-preview                                                                                                                                            
TaskGroups                     6.0-preview                                                                                                                                            
ExtensionsManagement           6.0-preview                                                                                                                                            
Git                            5.1                                                                                                                                                    
VariableGroups                 5.1-preview.1                                                                                                                                          
Core                           5.1                                                                                                                                                    
Release                        5.1                                                                                                                                                    
DistributedTaskReleased        5.1                                                                                                                                                    
MemberEntitlementManagement    6.0-preview                                                                                                                                            
Tfvc                           5.1                                                                                                                                                    
Processes                      6.0-preview                                                                                                                                            
Policy                         5.1                                                                                                                                                    
Build                          5.1                                                                                                                                                    
DistributedTask                6.0-preview
> $PSVersionTable
Name                           Value                                                                                                                                                  
----                           -----                                                                                                                                                  
PSVersion                      5.1.19041.1151                                                                                                                                         
PSEdition                      Desktop                                                                                                                                                
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                                
BuildVersion                   10.0.19041.1151                                                                                                                                        
CLRVersion                     4.0.30319.42000                                                                                                                                        
WSManStackVersion              3.0                                                                                                                                                    
PSRemotingProtocolVersion      2.3                                                                                                                                                    
SerializationVersion           1.1.0.1 
@SebastianSchuetze
Copy link
Collaborator

@JanuszNowak hard to test for me. Any idea how I can invite more than 500 users on my own private Org to test this case?

@SebastianSchuetze SebastianSchuetze added the Investigating when an issue needs further investigation by a maintainer. Used only by maintainer. label Oct 10, 2021
@mnieto
Copy link
Contributor

mnieto commented Dec 10, 2021

Please refer to https://docs.microsoft.com/en-us/rest/api/azure/devops/graph/users/list?view=azure-devops-rest-6.1
Since the list of users may be large, results are returned in pages of users. If there are more results than can be returned in a single page, the result set will contain a continuation token for retrieval of the next set of results.
By default a page will contain 500 users. The API returns a X-MS-ContinuationToken header if there is more available users

As suggestion, the Get-VSTeamUser should have a -continuationToken parameter to allow sucesive calls or manage internally the continuation token and return the complete list of users

Also as additional note: the API in the v6.0 supports an aditional parameter scope that allows to filter users by project, collection... given the descriptor

@mnieto
Copy link
Contributor

mnieto commented Sep 9, 2022

@SebastianSchuetze, @DarqueWarrior I would like to open a discussion here:
There are some API endpoints that use X-MS-ContinuationToken header to control paged return
This problem is also faced in #169

This is a problem because Invoke-RestMethod in powershell Desktop (5.1) does not support manage headers in the response. This support was introduced later in powershell 6.0

So, I see some options:

  • create an alternative to _callAPI function that uses Invoke-WebRequest cmdlet, at least, for this cases
  • introduce a big breaking change and do not support powershell Desktop
  • sit waiting MS to:
    • change the API and provide homogeneous behaviour with the ContinuationToken in all the DevOps API calls (new API endpoints return the ContinuationToken as part of the response object)
    • provide new versions of powershell as part of the OS

@SebastianSchuetze
Copy link
Collaborator

@mnieto I cannot speak for @DarqueWarrior but I have his trust. We already decided to ditch the support for all TFS versions and tend to only support Azure DevOps versions that Microsoft supports.

There is already a branch that will introduce the removal of these API endpoint (you can still control ist by enforcing it if needed). But we could introduce this also in Version 8.0.0 and also only support pwsh 6+.

People who can't use it are free to use version less than 8.0.0.

Having said that: We will not create a new _callAPI but rather change the existing. Do you want to give it a shot?
Only thing is: change the minimum needed. We are very cautious in changing core code as we had problems with PRs in the past that we eventually didn't merge since too much unnecessary stuff was changed.

@mnieto
Copy link
Contributor

mnieto commented Sep 11, 2022

Ok, I can try to work on that. which branch should I take as a starting point? feature/v8.0.0? or trunk, as usual?

My idea to implement this is just to add an optional parameter -ResponseHeadersVariable to _callAPI

To manage X-MS-ContinuationToken I wanted to integrate management of this header in the existing _callAPIContinuationToken I created previously to manage ContinuationToken when it comes as part of the response object.

@SebastianSchuetze
Copy link
Collaborator

Make a branch based on V8.0.0.

And go from there. I will update that branch with the newest changes.

The PR would also be into V8.0.0

And feel free to also integrate that into the continuation token. Could you also create an extra MD file to explain how and when to use the internal function for development?

In that way new devs and also we can use it in all cmdlets where it is needed.

@JanuszNowak
Copy link
Author

@SebastianSchuetze I would probably go with rest api https://learn.microsoft.com/en-us/rest/api/azure/devops/memberentitlementmanagement/user-entitlements/add?view=azure-devops-rest-6.0&tabs=HTTP
and maybe use Gmail future to add suffix after [email protected]. Or create AAD users like described here in my post

@SebastianSchuetze
Copy link
Collaborator

You wanna give it a try @JanuszNowak ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Investigating when an issue needs further investigation by a maintainer. Used only by maintainer.
Projects
None yet
Development

No branches or pull requests

3 participants