Цикл Get-MgUser удваивает результаты

У меня есть .TXT уникальных отображаемых имен (всего 9). Я просто заполняю массив и просматриваю его. Он возвращает все каждый дважды.

#Display names list path
    $DnPath = "C:\dirname\filname.txt"
    
#Display names array
    $DnArr = get-content -path $DnPath
    
        
$DnArr | Foreach-Object { 
    Get-Mguser -search displayname:$_ -ConsistencyLevel eventual -Property id | Select-Object -Property id
    
    }

Это приводит к (каждый идентификатор дважды)

0eaba174-fab6-4cda-bf09-92391d586d48
15fb3a43-d8a1-4348-8e31-8f5814a38a69
1f08022d-85ba-40ba-9b79-c201c8f477b0
30792149-52da-44ec-9709-1911244bb183
6a4290f2-6397-4d58-9d20-e0b46a7d5d3d
714d794c-3e43-40a8-b752-ed04b2748016
a032dc91-28e6-49f4-bcea-1bbacf2f1a00
cfcf7c8a-5cfa-4362-ae7f-bad6bb1f4b66
e9704b2c-dbdd-4654-89a0-defe38bcadb7
6a4290f2-6397-4d58-9d20-e0b46a7d5d3d
cfcf7c8a-5cfa-4362-ae7f-bad6bb1f4b66
e9704b2c-dbdd-4654-89a0-defe38bcadb7
714d794c-3e43-40a8-b752-ed04b2748016
30792149-52da-44ec-9709-1911244bb183
15fb3a43-d8a1-4348-8e31-8f5814a38a69
1f08022d-85ba-40ba-9b79-c201c8f477b0
0eaba174-fab6-4cda-bf09-92391d586d48
a032dc91-28e6-49f4-bcea-1bbacf2f1a00
Как установить 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
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы получить идентификаторы пользователей путем передачи текстового файла, измените сценарий, как показано ниже:

$DnPath = "C:\dirname\filename.txt"
$DnArr = Get-Content -Path $DnPath
$UniqueUserIds = @()

foreach ($displayName in $DnArr) {
    # Get user ID using the display name
    $user = Get-MgUser -Filter "displayName eq '$displayName'" -Property id

    if ($user) {
        $UniqueUserIds += $user.Id
    }
}
$UniqueUserIds = $UniqueUserIds | Select-Object -Unique
$UniqueUserIds

Мои текстовые файлы выглядят следующим образом:

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

Вместо -Filter лучше использовать -Search. При использовании -Search входная строка, которую вы указываете после displayName, разбивается на части с помощью пробелов, разных регистров или типов символов (цифр и специальных символов) и возвращает всех пользователей, где displayName содержит текущую строку.

$DnArr | Foreach-Object { 
  Get-Mguser -Filter "displayname eq '$_'" -ConsistencyLevel eventual -Property id | Select-Object -Property id
}

При использовании -Filter будут возвращены только пользователи с точным displayName.

Спасибо @user2250152. Очень хорошее понимание.

aJ-47 21.08.2024 14:16

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