Get-AzureADUser с несколькими каналами

Сегодня я извлекаю наших пользователей Entra ID, используя этот фрагмент кода:

Get-AzureADUser -All $true -Filter "UserType eq 'Member'"| Select-Object -Property $args[0] | Where-Object {($_.DirSyncEnabled -eq 'True')}

Позже в моем сценарии я использую фрагмент кода, который нашел в Google, для получения статуса лицензии для каждого пользователя:

Get-AzureAdUser -ObjectId $Object.ObjectId | ForEach{ $licensed=$False;
 
For ($i=0; $i -le ($_.AssignedLicenses | Measure).Count ; $i++)
    { 
    If( [string]::IsNullOrEmpty( $_.AssignedLicenses[$i].SkuId ) -ne $True) { $licensed='Active' } 
    }; 
    If( $licensed -eq $false)
    { $licensed='Inactive'} 
}

Но мне хотелось бы получить все данные из Azure один раз, поэтому я пытаюсь объединить эти два запроса в один запрос.

Если я просто объединю канал, я не получу никаких данных. Просто пустой.

Я подумывал объединить их оба и вместо того, чтобы просто помещать значение в переменную, добавить новый psobject для каждого пользователя. Нравиться:

Get-AzureAdUser -ObjectId $Object.ObjectId | ForEach{ 

    $licensed=$False;
 
    For ($i=0; $i -le ($_.AssignedLicenses | Measure).Count ; $i++) { 
        If( [string]::IsNullOrEmpty( $_.AssignedLicenses[$i].SkuId ) -ne $True) { 
            $Object | Add-Member -MemberType NoteProperty -Name "LicenseStatus" -Value "Active" 
        } 
    }; 
    If( $licensed -eq $false) { 
        $Object | Add-Member -MemberType NoteProperty -Name "LicenseStatus" -Value "Inactive" 
    } 
}

Хотите ли вы выполнить операцию с несколькими каналами или для получения информации подойдет обычный PowerShell?

Rukmini 21.05.2024 08:37

Не обязательно должно быть несколько каналов, но, насколько я понимаю, это необходимо для получения всех данных и добавления их в psobjects, но это далеко выходит за рамки моего понимания того, как построить запрос.

Makke_ 21.05.2024 08:42

Вы хотите получить всех пользователей Entra и назначенные им лицензии с помощью сценария PowerShell?

Rukmini 21.05.2024 08:43

Проверьте, подходит ли это вам

Rukmini 21.05.2024 08:46

вам следует рассмотреть возможность переноса вашего кода в MS Graph, поскольку Azure AD устарела. кроме того, того, чего вы хотите достичь, можно добиться, полностью используя фильтр OData: $filter=assignedLicenses/$count ne 0 and userType eq 'Member' and onPremisesSyncEnabled eq true

Santiago Squarzon 21.05.2024 14:57
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
5
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы получить всех пользователей Microsoft Entra ID (синхронизированных из локальной среды) вместе с их статусом лицензии, используйте приведенный ниже сценарий PowerShell:

# Retrieve all Azure AD users who are members and synchronized from on-premises
$users = Get-AzureADUser -All $true -Filter "UserType eq 'Member'" | Where-Object { $_.DirSyncEnabled -eq $true }

$results = @()
foreach ($user in $users) {
    $licensed = $false
   
    foreach ($license in $user.AssignedLicenses) {
        if (-not [string]::IsNullOrEmpty($license.SkuId)) {
            $licensed = 'Active'
            break
        }
    }
    
    if ($licensed -eq $false) {
        $licensed = 'Inactive'
    }

        $userObject = New-Object PSObject -Property @{
        DisplayName   = $user.DisplayName
        UserPrincipalName = $user.UserPrincipalName
        LicenseStatus = $licensed
    }
    
    $results += $userObject
}

$results

Если вы хотите получить всех пользователей Microsoft Entra ID вместе с их статусом лицензии, используйте приведенный ниже скрипт PowerShell:

# Retrieve all Azure AD users who are members 
$users = Get-AzureADUser -All $true -Filter "UserType eq 'Member'" 

$results = @()
foreach ($user in $users) {
    $licensed = $false
   
    foreach ($license in $user.AssignedLicenses) {
        if (-not [string]::IsNullOrEmpty($license.SkuId)) {
            $licensed = 'Active'
            break
        }
    }
    
    if ($licensed -eq $false) {
        $licensed = 'Inactive'
    }

        $userObject = New-Object PSObject -Property @{
        DisplayName   = $user.DisplayName
        UserPrincipalName = $user.UserPrincipalName
        LicenseStatus = $licensed
    }
    
    $results += $userObject
}

$results

Другие вопросы по теме