Сегодня я извлекаю наших пользователей 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"
}
}
Не обязательно должно быть несколько каналов, но, насколько я понимаю, это необходимо для получения всех данных и добавления их в psobjects, но это далеко выходит за рамки моего понимания того, как построить запрос.
Вы хотите получить всех пользователей Entra и назначенные им лицензии с помощью сценария PowerShell?
Проверьте, подходит ли это вам
вам следует рассмотреть возможность переноса вашего кода в MS Graph, поскольку Azure AD устарела. кроме того, того, чего вы хотите достичь, можно добиться, полностью используя фильтр OData: $filter=assignedLicenses/$count ne 0 and userType eq 'Member' and onPremisesSyncEnabled eq true
Чтобы получить всех пользователей 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
Хотите ли вы выполнить операцию с несколькими каналами или для получения информации подойдет обычный PowerShell?