0

我需要以编程方式收集有关总许可和分配许可的信息。此处描述的方式:https ://tech.nicolonsky.ch/manage-azure-ad-group-based-licensing-with-powershell/ - 不适用于 AzureUSGovernment 环境。出现以下错误:“Get-AADLicenseSku:AADSTS900382:Cross Cloud 请求中不支持机密客户端。”

所以,我正在寻找一种方法来调整它并在 AzureUSGovernment 上使用它。但是找不到main.iam.ad.ext.azure.us的资源ID据我了解,main.iam.ad.ext.azure.com的ID是74658136-14ec-4630-ad9b-26e160ff0f。但我不明白它来自哪里。预先感谢您的帮助。我根据原始脚本创建了一个脚本:

        $context = Get-AzContext
        
        if ($null -eq $context) {
            $null = Connect-AZAccount -EA stop
            $context = Get-AzContext
        }
        $apiToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id, $null, "Never", $null, "https://main.iam.ad.ext.azure.us")

        $header = @{
            'Authorization'          = 'Bearer ' + $apiToken.AccessToken.ToString()
            'Content-Type'           = 'application/json'
            'X-Requested-With'       = 'XMLHttpRequest'
            'x-ms-client-request-id' = [guid]::NewGuid()
            'x-ms-correlation-id'    = [guid]::NewGuid()
        }

        Write-Verbose "Connected to tenant: '$($context.Tenant.Id)' as: '$($context.Account)'"


       $baseUrl = "https://main.iam.ad.ext.azure.us/api/"

        try {
            $request = Invoke-WebRequest -Method Get -Uri $($baseUrl + "AccountSkus") -Headers $header
            $requestContent = $request | ConvertFrom-Json
            return $requestContent
        }
        catch {
            # convert the error message if it appears to be JSON
            if ($_.ErrorDetails.Message -like "{`"Classname*") {
                $local:errmsg = $_.ErrorDetails.Message | ConvertFrom-Json
                if ($local:errmsg.Clientdata.operationresults.details) {
                    Write-Error $local:errmsg.Clientdata.operationresults.details
                }
                else {
                    Write-Error $local:errmsg
                }
            }
            else {
                Write-Error $_
            }
        }

但它失败并出现以下错误:“Invoke-RestMethod:401 - 未经授权:由于凭据无效,访问被拒绝。服务器错误

401 - 未经授权:由于凭据无效,访问被拒绝。您无权使用您提供的凭据查看此目录或页面。”

我尝试使用用户帐户和服务主体。全局管理员角色分配给两者。

4

1 回答 1

0

我找到了解决方案。在我上面的脚本中^^,我替换了

$apiToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id, $null, "Never", $null, "https://main.iam.ad.ext.azure.us")

$apiToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate($context.Account, $context.Environment, $context.Tenant.Id, $null, "Never", $null, "ee62de39-b9b0-4886-aa58-08b89c4e3db3")

现在它可以工作了。这是响应的示例:

name            : Office 365 E3 - GCCHIGH
accountId       : XXXXXX-XXXX-4427-8719-XXXXXXXXXXXX
accountSkuId    : TEST:ENTERPRISEPACK_USGOV_GCCHIGH
availableUnits  : 0
totalUnits      : 1
consumedUnits   : 1
skuId           : aea38a85-XXXX-XXXX-aa00-XXXXXXXXXXXX
isDepartment    : False
warningUnits    : 0
serviceStatuses : {@{provisioningStatus=Success; servicePlan=}, @{provisioningStatus=Success; servicePlan=}, @{provisioningStatus=Success; servicePlan=}, @{provisioningStatus=Success; servicePlan=}...}
于 2021-03-09T04:17:36.173 回答