Цикл 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

🤔 А знаете ли вы, что...
PowerShell обеспечивает интеграцию с средствами облачного хранения данных, такими как Azure Storage.


50
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.