Keressen Entra ID felhasználókat a PowerShell segítségével
Használjon szűrőket a postafiókok és az Entra ID felhasználói fiókok megcélzásához
A PowerShell-szkriptek gyakran azzal kezdődnek, hogy megkeresik a feldolgozandó Entra ID felhasználói fiókokat vagy Exchange-postafiókokat. A klasszikus megközelítés egy parancsmag futtatása, például a Get-ExoMailbox vagy a Get-MgUser a kívánt objektumok megtalálásához. A dolgok azonban kissé bonyolulttá válhatnak, amikor megpróbálja visszakeresni az optimális készletet. Például:
- Csak felhasználói postafiókok (kivéve a megosztott és a szobai postafiókokat).
- Csak a licenccel rendelkező fiókok (a Microsoft 365-szolgáltatások használatára vonatkozó licencekhez rendelt felhasználói fiókokra összpontosítva).
Az első készlet könnyen megtalálható:
[array]$Mailboxes = Get-ExoMailbox -RecipientTypeDetails UserMailbox -ResultSize UnlimitedA második a következővel:
[array]$Users = Get-MgUser -Filter "assignedLicenses/`$count ne 0 and userType eq 'Member'" -ConsistencyLevel eventual -CountVariable Records -All -Property Id, displayName, AssignedLicensesAz utóbbi példa szintaxisa összetettebb, mert Graph szűrőt használ a legalább egy licenccel rendelkező fiókok megkeresésére (a szám nagyobb, mint 0), amelyek tagjai (nem vendégek) a bérlőnek. A Microsoft ezt az Entra ID objektumok speciális lekérdezésének is nevezi, ezért van jelen a konzisztenciaszint paraméter.
A probléma az, hogy a megosztott postafiókok és a szobai postafiókok által használt fiókok rendelkezhetnek licencekkel. A megosztott postaládáknak licencekre van szükségük az archívum használatához, vagy megnövelt postafiókkvótával rendelkeznek, míg a szobai postaládáknak van licencük, ha Teams Rooms-eszközök használják őket. Előfordulhat, hogy a szkript nem feltétlenül szeretné feldolgozni ezeket a fiókokat, mert a szándék az emberek tulajdonában lévő fiókokkal, nem pedig szobákkal vagy eszközökkel foglalkozik.
A megosztott és szobai postaládák tömbjének létrehozása után egyszerűen szűrhető a felhasználók tömbje, hogy eltávolítsa a tömbben nem szereplő fiókokat:
[array]$NonUserAccounts = Get-ExoMailbox -RecipientTypeDetails SharedMailbox, RoomMailbox -ResultSize Unlimited | Select-Object UserPrincipalName, ExternalDirectoryObjectId
Write-Host "Removing non-user accounts from set to be processed..."
$Users = $Users | Where-Object {$_.Id -notin $NonUserAccounts.ExternalDirectoryObjectId}
Az eredmény egy tömb, amely emberekhez tartozó licencelt felhasználói fiókokat tartalmaz. Ezt a technikát használom a szkriptben, hogy HTML-jelentést készítsek a vezetőkről és közvetlen jelentéseikről.
Keresse meg az alkalmazottak felhasználói fiókjait
Az Entra ID számos attribútumot tartalmaz az alkalmazottak adataihoz. Három fontos tulajdonság a következő:
- EmployeeId: A szervezet által hozzárendelt alkalmazott azonosítóját tartalmazó karakterlánc. Ez gyakran egy szám.
- EmployeeHireDate: A dátum értéke, amikor az alkalmazott csatlakozott a szervezethez.
- EmployeeType: Az alkalmazott típusát jelző karakterlánc-érték. Ebben az attribútumban tárolhat például olyan értékeket, mint az „Ideiglenes”, „Állandó” és „Részmunkaidős”.
Az alkalmazottattribútumok nem részei a Graph által visszaadott alapértelmezett készletnek. A szokásos módon szűrhet az attribútumok alapján, de ha látni szeretné az adatokat, meg kell adnia az attribútumokat a Graph kérésben. Ez a Get-MgUser parancs például megkeresi az EmployeeId attribútumban bizonyos értékű tagfiókokat anélkül, hogy az attribútum értékét belefoglalná a Graph által visszaadott adatokba. A térrel való összehasonlítás egyike azoknak a hibáknak, amelyekről tudni kell, amikor a Graph-al dolgozik.
[array]$Employees = Get-MgUser -filter "userType eq 'Member' and EmployeeId ge ' '"
$Employees | Format-Table DisplayName, EmployeeId
DisplayName EmployeeId
----------- ----------
Rene Artois
Tony Redmond
Az alkalmazotti adatok megtekintéséhez adja meg a visszaküldendő hívás tulajdonságait:
[array]$Employees = Get-MgUser -filter "userType eq 'Member' and EmployeeId ge ' '" -Property Id, displayname, userprincipalname, employeeid, employeehiredate, employeetype
$Employees | Format-Table DisplayName, EmployeeId, EmployeeType, EmployeeHireDate
DisplayName EmployeeId EmployeeType EmployeeHireDate
----------- ---------- ------------ ----------------
Rene Artois 111888 Permanent 08/03/2018 00:00:00
Tony Redmond 150847 Permanent 01/01/2011 00:00:00
Sajnos a grafikon nem támogatja a szűrést az alkalmazott típusa vagy a munkavállaló felvételi dátuma alapján (referenciaként tekintse meg ezt az oldalt). Ha a felvétel dátuma alapján szeretne szűrni, hozza létre az alkalmazottak tömbjét a fentiek szerint, és használjon ügyféloldali szűrőt. Ez a kód például az elmúlt tíz évben felvett alkalmazottakat találja meg:
$CheckDate = (Get-Date).AddDays(-3650)
$Employees | Where-Object {$CheckDate -as [datetime] -lt $_.EmployeeHireDate}
Míg ez a parancs megkeresi az állandóként megjelölt alkalmazotttípusú fiókokat.
$Employees | Where-Object {$_.EmployeeType -eq "Permanent"}Szüksége lesz egy kliensoldali szűrőre is a hasonló, egyezés és más összehasonlító operátorok használatához, amelyek elérhetők a PowerShellben. A felhasználói fiókok kiértékelésekor a grafikonkérések a következőkre korlátozódnak: eq, and, vagy és stars with.
Keressen felhasználói fiókokat Exchange egyéni attribútumokkal
Az Entra ID elleni bármilyen lekérdezés használata a lekérdezett attribútumokban található pontos adatoktól függ. Az a tapasztalatom, hogy viszonylag kevés Microsoft 365-bérlő tölti fel az Entra ID-ben elérhető alkalmazottattribútumokat. Ennek az lehet az oka, hogy sok szervezet hibrid, vagy más okuk miatt nem használja az alkalmazottattribútumokat (például nem tudja, hogy elérhetők), vagy más sémák használatban vannak. Például az Active Directoryt és az Exchange Servert használó szervezetek néha úgy jelölik meg az „emberi” fiókokat, hogy értéket tárolnak egy egyéni (bővítmény) attribútumban. Az attribútum olyan értékeket tárolhat, mint az Alkalmazotti, Ideiglenes, Tanácsadói és Szolgáltatási fiók, hogy jelezze a fiók célját. Ez a példa olyan licencelt felhasználói fiókokat keres, amelyekben az ExtensionAttribute2 az „Alkalmazott” értéket tárolja, hogy megjelölje az emberekhez tartozó fiókokat.
[array]$EmployeeAccounts = Get-MgUser -Filter "onPremisesExtensionAttributes/extensionAttribute2 eq 'Employee' and assignedLicenses/`$count ne 0 and userType eq 'Member'" -ConsistencyLevel eventual -CountVariable Records -AllHa szervezete egyéni Exchange-attribútumokat használ az alkalmazottak adatainak tárolására, nincs jó ok arra, hogy átváltson az Entra ID attribútumok használatára, kivéve, ha más célra akarja vagy kell használnia az Exchange-attribútumokat. A váltás az Exchange Online attribútumainak beolvasása és az Entra ID-be történő beírása, tehát ez egyszerű. Íme néhány egyszerű kód, amely illusztrálja az alkalmazottak adatainak lekérését az Exchange Online-ból, és beírja azokat a felhasználói fiókba. Az EmployeeType értéke a CustomAttribute2-ből származik, míg az EmployeeHireDate értéke a postafiók létrehozásának dátumából származik.
[array]$Mailboxes = Get-ExoMailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited -Properties CustomAttribute2, WhenCreated
ForEach ($Mbx in $Mailboxes) {
Update-MgUser -UserId $Mbx.ExternalDirectoryObjectId -EmployeeType $Mbx.CustomAttribute2 -EmployeeHireDate (Get-Date($Mbx.WhenCreated))
}
Felosztás felosztása
Néha egy szervezet olyan sok fiókot ölel fel, hogy sok időbe telik az összes fiók lekérése. Ilyen körülmények között feloszthatja a feldolgozást úgy, hogy a számlákat kényelmes készletekre osztja fel. Vannak, akik részlegeket használnak a feldolgozás alapjául, mások pedig országokat. Ebben a példában a vezetéknév alapján lekérjük a licencelt felhasználói fiókokat. Az 1. ábra mutatja az eredményt.
[array]$Surnames = "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "W", "X", "Y", "Z"
ForEach ($S in $Surnames) {
$Filter = "assignedLicenses/`$count ne 0 and userType eq 'Member' and startsWith(surname,('$S'))"
[array]$Users = Get-MgUser -Filter $Filter -ConsistencyLevel eventual -CountVariable Records -All
If ($Users) {
Write-Host ("{0} users have surname starting with {1}" -f $Users.count, $S)
Write-Host "---------------------------------------------"
$Users | Format-Table DisplayName, Surname
Write-Host ""
} Else {
Write-Host ("No users found with surname starting with {0}" -f $S)
}
}
Egy átmenet része
A postafiókok és/vagy felhasználói fiókok keresése érdekében hatékony hívások kezdeményezése egy PowerShell-szkript létrehozása vagy feltörése lehet. Az elavult Azure AD-modulról a Graph API-ra vagy a Graph SDK-parancsokra való átállás egy új szűrőformátumot vezet be, amellyel nehezebb dolgozni, és amely hiányzik a szabványos PowerShell-összehasonlító operátorokon keresztül elérhető rugalmasságból. A szkriptek frissítése a Graph használatához időnként kihívást jelenthet, de a dolgok megtekintésének pozitív módja az, hogy lehetőséget kínál a kód hatékonyságának javítására. Ez nem valami fontos kis- és közepes szervezetek számára, de óriási különbséget jelent több tízezer fiók vagy postafiók kezelésekor.
