AzureADUser'ı Alın - PowerShell ile Azure AD Kullanıcıları Nasıl Bulunur?
Tıpkı şirket içi Active Directory'de olduğu gibi, Azure AD'deki kullanıcılarımızı PowerShell ile yönetebiliriz. Bunun için Powershell’de Get AzureADUser cmdlet’ini kullanmamız gerekecek. Bu cmdlet, PowerShell AzureAD Modülünün bir parçasıdır.
Microsoft 365 kullanırken kullanıcılarınız aslında Azure Active Directory'de (Azure AD) depolanır. Bunları Azure Portal veya Microsoft 365 Yönetim Merkezi aracılığıyla yönetebilirsiniz ancak PowerShell çok daha hızlıdır. Kullanıcı bilgilerini hızlı bir şekilde bulmamızı ve dışa aktarmamızı sağlar.
Bu yazımızda Get AzureADUser cmdlet’ine göz atacağız. Kullanıcı bilgilerini bulma ve dışa aktarma konusunda bazı yararlı örnekler vereceğim. Makalenin sonunda Azure AD kullanıcılarınızı dışarı aktarmak için eksiksiz bir komut dosyam var.
Not
Azure AD modülü 2022 yılı sonunda çalışmayı durduracak. PowerShell için Microsoft Graph SDK'sına geçmemiz gerekecek. Azure AD kullanıcınızı Get-MgUser cmdlet'iyle almak ve dışarı aktarmak için bu makaleyi okuyun.
PowerShell'de Get-AzureAD ile Azure AD Kullanıcılarını Bulma
Başlamadan önce Azure AD Modülünü yüklediğinizden emin olun.
Get-AzureADUser cmdlet'i, Azure Active Directory'den kullanıcı hesaplarının bulunmasına ve çıkarılmasına olanak tanır. Cmdlet yalnızca kullanabileceğimiz birkaç parametreyle birlikte gelir:
- Filtre - oDate v3 sorgusuna dayalı olarak birden çok nesneyi alın
- ObjectId - UPN veya ObjectID'ye göre belirli kullanıcıyı döndürür
- SearchString - SearchString ile eşleşen tüm kullanıcıları alın
- Tümü - Tüm sonuçları alır
- En Üstte - Yalnızca belirtilen miktarı alın
Tavsiye
Varsayılan olarak Get-AzureADUser cmdlet'i yalnızca 100 kayıt döndürür. Tüm sonuçları almak için -all $true parametresinde
Azure AD'de tek bir kullanıcıyı aramak için, UserPrincipalName'i değer olarak kabul eden ObjectID'yi kullanabiliriz.
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.comGet-AzureADUser cmdlet'i varsayılan olarak yalnızca dört alan döndürür. Kullanıcının tüm özelliklerini görmek istiyorsanız, add'in arkasına select * eklemeniz yeterlidir:
Get-AzureADUser -ObjectId adelev@lazydev.onmicrosoft.com | select *Bu makalenin ilerleyen kısımlarında özellikler hakkında daha fazla bilgi vereceğim.
AzureADUser'da SearchString'i kullanma
searchString parametresi ilginç bir parametredir. Belgelere göre, arama dizesi parametresi yalnızca DisplayName veya UserPrincipalName'deki ilk karakterlere göre arama yapar.
Ancak cmdlet'i test ederken çok daha fazla alanda arama yaptığını fark ettim:
- UserPrincipalName - Dizenin ilk kısmı
- DisplayName - Dizenin ilk kısmı
- İş Unvanı - Tam eşleşme
- Bölüm - Tam eşleşme
- Şehir - Tam eşleme
- Durum - Tam eşleşme
- Ülke - Tam eşleşme
Yani searchString parametresi kullanıcının tam adını veya adının ilk kısmını aramak için kullanılabilir. Diğer alanlar için tam değeri aramanız gerekecektir.
Aşağıda geliştirme kiracımdaki kullanıcılarımdan birinin ekran görüntüsünü görüyorsunuz. Kullanıcının ad ve soyad alanlarını yeniden adlandırdım. Ayrıca benzersiz yaptığım bölüm adını da not edin.
Şimdi Get-AzureADUSers searchString cmdlet'i ile Alex Wilber kullanıcısını mümkün olan tüm yollarla bulacağız.
Öncelikle görünen adın ilk kısmını ararız:
Get-AzureADUser -SearchString "Alex"
ObjectId DisplayName UserPrincipalName UserType
-------- ----------- ----- --------
449d2fd4-8165-415f-b4f1- Alex Wilber AlexW@lazydev.onmicrosoft.com Member"Alexed" adını veya "Wilbers" soyadını aramayı denersek, arama dizesi çalışmaz:
# Search on Firstname
Get-AzureADUser -SearchString "Alexed"
---
# No results
# Search on Lastname
Get-AzureADUser -SearchString "Wilber"
---
# No resultsSearchString'i diğer alanlarda kullanma
Diğer tüm alanların tam eşleşmesi gerekir. Alex'in iş unvanı Pazarlama Asistanıdır. Eğer "pazarlama" iş unvanının yalnızca ilk bölümünü ararsak beklenen sonucu alamayız:
Get-AzureADUser -SearchString "Marketing" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Megan Bowen MeganB@lazydev.onmicrosoft.com recruiter MarketingMegan Bowen'ı "Pazarlama" bölümünde çalıştığı için döndürüyor. Alex'in tüm iş unvanını ararken beklenen sonucu alıyoruz:
Get-AzureADUser -SearchString "Marketing Assistant" | Select DisplayName,UserPrincipalName,jobtitle,department
DisplayName UserPrincipalName JobTitle Department
----------- ----------------- -------- ----------
Alex Wilber AlexW@lazydev.onmicrosoft.com Marketing Assistant MarketingDepartmentAynı prensibi Şehir, Eyalet ve Ülke gibi diğer alanlar için de kullanabiliriz.
AzureADU Kullanıcı Filtresini Alın
Bu nedenle, searchString parametresi, bir Azure AD kullanıcısını ilk adla hızlı bir şekilde bulmak için harikadır, ancak diğer veriler için tam olarak doğru değildir. AzureAD kullanıcılarını bulmanın daha güvenilir bir yolu -filter parametresini kullanmaktır.
Filtre sorgusu oDate v3 filtre deyimini temel alır; buna alışmadığınızda bunu doğru şekilde yapmak biraz zor olabilir. Kişisel olarak Get-ADUser cmdlet'inin kullandığı PowerShell İfade Dili ile çalışmayı daha kolay buluyorum.
Data v3 sorgusunun yanıltıcı yanı, tüm operatörlerin tüm alanlarda desteklenmemesidir. Örneğin “Pazarlama Asistanı” iş unvanına sahip tüm kullanıcıları arayabiliriz.
Get-AzureADUser -Filter "jobtitle eq 'Marketing Assistant'"
Bu, tüm kullanıcıların iş unvanının "Pazarlama Asistanı"na eşit olmasını sağlayacaktır. Ancak beklediğim şey, Pazarlama Asistanı olmayan tüm kullanıcıları elde etmek için ne (eşit değil) ifadesini de kullanabileceğimizdir.
Get-AzureADUser -Filter "jobtitle ne 'Marketing Assistant'"Ancak bu operatör desteklenmiyor. Dolayısıyla şu anda AzureADUser Al filtre parametresi tarafından yalnızca aşağıdaki operatörler desteklenmektedir:
| Operator | Description | Example |
|---|---|---|
| eq | Equals to | jobtitle eq ‘Marketing Assistant’ |
| and | And | jobtitle eq ‘Recruiter’ and jobtitle eq ‘hr’ |
| or | Or | jobtitle eq ‘Recruiter’ or jobtitle eq ‘hr’ |
| startswith | String starts with | startswith(jobtitle,’recr’) |
Get-AzureADUser Filtre Örnekleri
Get-AzureADUser cmdlet'inde filter parametresinin kullanımına gelince birkaç örneğe göz atalım:
Tam adı filtreleyin
Get-AzureADUser -Filter "DisplayName eq 'Adele Vance'"Soyada göre filtreleyin
Get-AzureADUser -Filter "Surname eq 'Vance'"Adın ilk kısmında arama yapın
Get-AzureADUser -Filter "startswith(DisplayName,'Ade')"Kullanıcı Türüne göre filtreleme
100'den fazla sonuç beklediğimiz için buraya -all parametresini eklediğimi unutmayın.
# Find all users
Get-AzureADUser -Filter "UserType eq 'Member'" -All $true
# Find all guests
Get-AzureADUser -Filter "UserType eq 'Guest'" -All $trueDevre Dışı Bırakılan Azure AD hesaplarını alın
100'den fazla sonuç beklediğimiz için buraya -all parametresini eklediğimi unutmayın.
Get-AzureADUser -Filter "accountEnabled eq false" -All $trueBirden fazla koşulu kullanma
Get-AzureADUser -Filter "department eq 'Marketing' and jobtitle eq 'Manager'"Azure AD kullanıcılarını diğer alanlara göre bulma
-filter veya -searchstring parametresi kullanıldığında arama sunucuda yapılır ve bu yalnızca filtrelenen sonuçları döndürür. Diğer bir seçenek de önce tüm kullanıcıları Azure AD'den istemek ve ardından filtrelemeyi PowerShell'de yerel olarak yapmaktır.
Örneğin, kullanıcı adının bir kısmında arama yapmak istediğimizde aşağıdakileri yapabiliriz:
Get-AzureADUser -All $true | Where-Object {$_.DisplayName -like "*vanc*"}Bunu Get-AzureADUser cmdlet'i tarafından döndürülen tüm verilerde kullanabilirsiniz ve bu aynı zamanda eşit olmayan işleçleri kullanmamıza da olanak tanır:
Get-AzureADUser -All $true | Where-Object {$_.jobtitle -ne "Marketing Assistant"} | ftKuruluş birimine dayalı AzureADUser'ı edinin
Bu prensibi yalnızca belirli bir organizasyon birimindeki kullanıcıları almak için de kullanabiliriz. Kuruluş biriminin ayırt ediciAdı, Get-AzureADUser sonucunun onPremisesDistinguishedName uzantı özelliğinde depolanır.
Kuruluş birimindeki kullanıcıları filtrelemek için önce tüm kullanıcıları alırız ve ardından yalnızca ayırt edici adın benzer bir ifadeyle eşleştiği kullanıcıları seçeriz:
# Get all users from the OU Test-Users:
Get-AzureADUser -All $true | Where-Object {$_.ExtensionProperty.onPremisesDistinguishedName -like "*OU=Test-Users*"}AzureADUser Özelliklerini Alın
Varsayılan olarak AzureAD Kullanıcı cmdlet'i kullanıcının yalnızca dört alanını gösterir ve bu bize çok fazla bilgi vermez. Ancak gerçekte geri dönen kullanıcı hakkında çok daha fazla bilgi var. Tek bir kullanıcı seçip format listesi çıktısını kullanırsanız kullanıcıya ait tüm verileri göreceksiniz.
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | flİhtiyacınız olan alanları, select cmdlet'ini arkasına aktararak seçebilirsiniz:
Get-AzureADUser -ObjectId alexw@lazydev.onmicrosoft.com | Select DisplayName, Jobtitle, Mail, DepartmentAzure AD Kullanıcılarını CSV'ye aktarın
Tüm Azure AD Kullanıcılarını en önemli özelliklere sahip bir CSV dosyasına aktaracak eksiksiz bir komut dosyası oluşturdum. Komut dosyası ayrıca kullanıcının yöneticisini de toplar ve siz, etkin ve/veya devre dışı bırakılmış kullanıcıların hesaplarını toplamayı seçebilirsiniz.
Komut dosyasının tamamını Github'ımda bulabilir veya aşağıdan kopyalayıp yapıştırabilirsiniz.
param(
[Parameter(
Mandatory = $false,
HelpMessage = "Get the users manager"
)]
[switch]$getManager = $true,
[Parameter(
Mandatory = $false,
HelpMessage = "Get accounts that are enabled, disabled or both"
)]
[ValidateSet("true", "false", "both")]
[string]$enabled = "true",
[Parameter(
Mandatory = $false,
HelpMessage = "Enter path to save the CSV file"
)]
[string]$path = ".\ADUsers-$((Get-Date -format "MMM-dd-yyyy").ToString()).csv"
)
$ErrorActionPreference = "Stop"
Function Get-Users {
<#
.SYNOPSIS
Get users from the requested DN
#>
process{
# Set the properties to retrieve
$properties = @(
'ObjectId',
'DisplayName',
'userprincipalname',
'mail',
'jobtitle',
'department',
'telephoneNumber',
'PhysicalDeliveryOfficeName',
'mobile',
'streetAddress',
'city',
'postalcode',
'state',
'country',
'AccountEnabled'
)
# Get enabled, disabled or both users
switch ($enabled)
{
"true" {$filter = "AccountEnabled eq true"}
"false" {$filter = "AccountEnabled eq false"}
"both" {$filter = ""}
}
# Get the users
Get-AzureADUser -Filter $filter | select $properties
}
}
Function Get-AllAzureADUsers {
<#
.SYNOPSIS
Get all AD users
#>
process {
Write-Host "Collecting users" -ForegroundColor Cyan
$users = @()
# Collect users
$users += Get-Users
# Loop through all users
$users | ForEach {
$manager = ""
If (($getManager.IsPresent)) {
# Get the users' manager
$manager = Get-AzureADUserManager -ObjectId $_.ObjectId | Select -ExpandProperty DisplayName
}
[pscustomobject]@{
"Name" = $_.DisplayName
"UserPrincipalName" = $_.UserPrincipalName
"Emailaddress" = $_.mail
"Job title" = $_.JobTitle
"Manager" = $manager
"Department" = $_.Department
"Office" = $_.PhysicalDeliveryOfficeName
"Phone" = $_.telephoneNumber
"Mobile" = $_.mobile
"Enabled" = if ($_.AccountEnabled) {"enabled"} else {"disabled"}
"Street" = $_.StreetAddress
"City" = $_.City
"Postal code" = $_.PostalCode
"State" = $_.State
"Country" = $_.Country
}
}
}
}
Get-AllAzureADUsers | Sort-Object Name | Export-CSV -Path $path -NoTypeInformation
if ((Get-Item $path).Length -gt 0) {
Write-Host "Report finished and saved in $path" -ForegroundColor Green
# Open the CSV file
Invoke-Item $path
}else{
Write-Host "Failed to create report" -ForegroundColor Red
}Kapanış
Get AzureADUser cmdlet'i Get-ADUser cmdlet'inden oldukça farklıdır. Kullanıcıları filtrelemek biraz zordur, ancak her zaman tüm kullanıcı hesaplarını alabilir ve filtrelemeyi PowerShell'de yapabilirsiniz.
Get-AzureADUser cmdlet'inin varsayılan olarak yalnızca 100 kayıt döndürdüğünü unutmayın. Bu nedenle, daha fazla sonuç beklediğiniz zaman -all parametresini ekleyin.
Umarım bu makaleyi faydalı bulmuşsunuzdur, herhangi bir sorunuz varsa aşağıya yorum bırakmanız yeterli.



