Powershell调用-REST方法分页

qlvxas9a  于 2023-01-17  发布在  Shell
关注(0)|答案(2)|浏览(132)

我正在尝试从Azure B2C租户获取所有用户的列表。
在互联网的帮助下,我创建了下面的powershell脚本。但是结果是不完整的,它只显示了100个用户。在四处搜索后,我发现我可能应该做一些分页,但我不能让它工作。
有人能帮我修改下面的脚本以返回所有用户吗?

# Application (client) ID, tenant Name and secret
$clientId = "**********"
$tenantName = "*********"
$clientSecret = "************"
$resource = "https://graph.microsoft.com/"

$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 

$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody

$Url = "https://graph.microsoft.com/beta/users?$select=displayName"
$Data = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $Url -Method Get
$Users = ($Data |select-object Value).Value

$Users | Format-Table DisplayName -AutoSize
falq053o

falq053o1#

好的,我让它在Powershell内核(版本7.1.3)中工作。
这是我最终使用的代码。

# Application (client) ID, tenant Name and secret
$clientId = "**************"
$tenantName = "***************"
$clientSecret = "******************"
$resource = "https://graph.microsoft.com/"

$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 

$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody

$Url = "https://graph.microsoft.com/beta/users?$select=displayName"
$UserResponse = Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $Url -Method Get -Verbose

$CloudUser = $UserResponse.Value
$UserNextLink = $UserResponse."@odata.nextLink"

while ($UserNextLink -ne $null) {

    $UserResponse = (Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $UserNextLink -Method Get -Verbose)
    $UserNextLink = $UserResponse."@odata.nextLink"
    $CloudUser += $UserResponse.value
}

$CloudUser | Format-Table DisplayName -AutoSize
zdwk9cvp

zdwk9cvp2#

最后8行(或左右)大部分是重复的,你可以这样分解:

$Url = "https://graph.microsoft.com/beta/users?$select=displayName"
$headers = @{Authorization = "Bearer $($Tokenresponse.access_token)"}
$CloudUser = @()
do {
    $UserResponse = Invoke-RestMethod -Headers $headers -Uri $Url -Method Get -Verbose
    $CloudUser += $UserResponse.Value
    $Url = $UserResponse."@odata.nextLink"
} while ($Url)

另外,为什么不使用Graph PowerShell模块呢?https://learn.microsoft.com/en-us/powershell/microsoftgraph

相关问题