AD'yi Öğrenirken PowerShell'de LDAP Filtrelerinizde uzmanlaşın
Active Directory'yi PowerShell ile sorgularken en sık karşılaşılan sorunlardan biri, filtre sözdiziminin düzgün şekilde nasıl oluşturulacağıdır. Tüm ActiveDirectory PowerShell modülü cmdlet'lerindeki Filtre ve LDAP Filtresi parametreleri, çoğu kişi için kara kutudur.
Bu blog yazısında Active Directory filtrelerinin nasıl kullanılacağını anlamanın derinliklerine ineceğiz. Umarım bu yazının sonunda artık Nerede-Nesne'yi kullanmaya ve doğru filtrelemeye çalışmazsınız!
Önkoşullar
Size çalışmanızı göstereceğim herhangi bir kod için birkaç şeyi varsayacağım:
- PowerShell ActiveDirectory modülünü yüklediniz
- etki alanına katılmış bir bilgisayardasınız
- bir AD etki alanı denetleyicisine başarıyla bağlanıp kimlik doğrulaması yapabilirsiniz
Active Directory cmdlet'lerinin çoğunu kullanarak nesneleri ararken kullanabileceğiniz iki farklı filtre dili vardır: PowerShell filtreleri ve LDAP filtreleri.
PowerShell Filtreleri
PowerShell filtreleri standart PowerShell ifadesi sözdizimini kullanır. Buna genellikle Active Directory arama filtresi sözdizimi denir.
Bu filtreler Filtre parametresiyle birlikte kullanılır. Filtre parametresi söz dizimi
Operatörler
Filtre parametresi için filtre oluştururken en az bir operatör kullanmanız gerekecektir. Burada kullanılan operatörler, Nesne-Nerede gibi komutları kullanırken alışık olabileceğiniz tanıdık operatörlerdir.
Filtre parametresinin içinde aşağıdaki operatörleri kullanabilirsiniz.
- -eq
Eşittir
- -le
Küçük veya eşit
- -ge
Büyük veya eşittir
- -ne
Eşit değil
- -lt
Daha az
- -gt
Şundan büyük:
- -approx
Yaklaşık olarak eşit
- -bor
-
Bitsel VEYA
- -band
Bitsel VE
- -recursivematch
Özyinelemeli eşleşme
- -like
Beğenmek
- -notlike
Gibi değil
- -and
Boole VE
- -or
Boole VEYA
- -not
Boole DEĞİL
Referans AD Nesnesi Özellikleri
Filtrenin içinde operatörleri kullanarak çeşitli AD nesnesi özelliklerini karşılaştıracaksınız. Örneğin, Get-AdUser cmdlet'i bir Ad özelliği döndürür. Belirli bir adla eşleşen tüm kullanıcıları bulmak istiyorsanız şunu kullanırsınız:
PS51> Get-Aduser -Filter "Name -eq 'Adam Bertram'"Özellik adları, AD cmdlet'iyle döndürülen özelliğin adı veya LDAP filtre adı olabilir.
Özellik değerleri normalde tek veya çift tırnak içine alınır. Kabul edilen tek joker karakter yıldız işaretidir (*). Yukarıda filtrenin çift tırnakla, Adam Bertram'in ise tek tırnakla çevrelendiğini görebilirsiniz.
Filtrelerde kullanıldığında belirli karakterlerin 'kaçması' gerekir. Bunlar:
| Character | Escaped As | Notes |
|---|---|---|
| “ | `” | Only required if the data is enclosed in double quotes. |
| ‘ | \’ | Only required if the data is enclosed in single quotes. |
| NUL | \00 | This is a standard LDAP escape sequence. |
| \ | \5c | This is a standard LDAP escape sequence. |
| * | \2a | Automatically escaped. Only in -eq and -ne comparisons. You should use -like and -notlike operators for wildcard comparison. |
| ( | /28 | Automatically escaped. |
| ) | /29 | Automatically escaped. |
| / | /2f | Automatically escaped. |
Active Directory LDAP nedir?
LDAP veya Basit Dizin Erişim Protokolü, dizin verilerine erişmek ve bunları değiştirmek için satıcıdan bağımsız bir protokoldür. Dizin kelimesini duyduğunuzda aklınıza bir telefon rehberi gelebilir, ancak Active Directory bağlamında bu çok daha fazlası anlamına gelir. Birçok farklı nesne türü, LDAP protokolünün bu verilere erişme aracı olarak işlev görmesi ile Active Directory tarafından depolanır ve erişilebilir hale getirilir.
Active Directory birçok farklı veri türünü depolayabildiğinden, uygulamalar ve kullanıcılar bu dizini kolayca sorgulayabilecek bir yola ihtiyaç duyarlar. LDAP Filtrelerinin bu verileri filtrelemeye nasıl yardımcı olduğunu öğrenmek için okumaya devam edin!
LDAP Filtreleri
Active Directory, Hafif Dizin Erişim Protokolü olan LDAP'yi uygular. Cmdlet'lerle LDAPFilter parametresini kullanmak, Active Directory Kullanıcıları ve Bilgisayarları'da oluşturulanlar gibi LDAP filtrelerini kullanmanıza olanak tanır.
LDAP filtrelerinin sözdizimi RFC numarası 4515'te tanımlanmıştır.
Her filtre kuralı ( ) parantezleri içine alınır. Filtre kuralları, grubu parantez içine alarak ve aşağıdakilerden bir karşılaştırıcı ekleyerek gruplandırılabilir:
- &
Ve
- |
veya
- !
Olumsuz
LDAP filtrelerinin ayrıca özel bir eşleştirme kuralı Nesne Tanımlayıcıları (OID'ler) vardır:
- 1.2.840.113556.1.4.803
Bitsel VE
- 1.2.840.113556.1.4.804
Bitsel VEYA
- 1.2.840.113556.1.4.1941
Zincir eşleştirme (ayırt edici ad nitelikleri için)
Dört filtre türü vardır:
- =
Eşittir
- ~=
Yaklaşık olarak eşit
- >=
Büyük veya eşittir
- <=
Küçük veya eşit
Dört öğe türü vardır:
- =
Basit
- =*
Sunmak
- =something*
Alt dize
- Extensible
türüne göre değişir
LDAP filtre kuralları, özniteliklerin LDAP adlarıyla birlikte kullanılmalı ve bir LDAP filtresinde kullanılıyorsa belirli karakter değerlerinden "çıkış" yapılmalıdır. Bunlar:
- *
\2a
- (
\28
- )
\29
- \
\5c
- NUL
\00
Karşılaştırma için özellik değerlerinin normalde tırnak içine alınmasına gerek yoktur.
LDAP Filtre Örnekleri
LDAP filtreleri oluşturmak zor olabilir. Kendi grubunuzu oluşturmaya başlamak için temel olarak kullanabileceğiniz aktif dizin grubu filtrelerini kullanan bazı örnekleri burada bulabilirsiniz.
Adı (cn) 'Profesyonel Hizmetler Departmanı' olan tüm gruplar
'cn -eq "Profesyonel Hizmetler Departmanı"'veya `'(cn=Profesyonel Hizmetler Departmanı)''Profesyonel Hizmetler Departmanı' adı ve 'Canlı' açıklaması olan tüm gruplar
'(cn -eq "Profesyonel Hizmetler Departmanı") -ve (description -eq "Canlı")'veya'(&(cn=Profesyonel Hizmetler Departmanı)(description=Canlı))''Profesyonel Hizmetler Departmanı' veya 'Tüm Departmanların Paylaşımlı Erişimi' adındaki tüm gruplar
'(cn -eq "Profesyonel Hizmetler Departmanı") -veya (cn -eq "Tüm Departmanlar Paylaşımlı Erişim")'veya'(|(cn=Profesyonel Hizmetler Departmanı)(cn=Tümü) Departmanlar Erişimi Paylaş))'Tüm gruplarda 'Canlı' açıklaması bulunmuyor. Hiçbir açıklama alanı olmayanları dahil eder
'(!(description=Canlı))'Tüm gruplarda 'Canlı' açıklaması bulunmuyor. Hiç açıklama alanı olmayanları hariç tutar
'açıklama -ne "Canlı"''Canlı' tanımına sahip ancak adı 'Profesyonel Hizmetler Departmanı' olmayan tüm gruplar
'(description -eq "Live") -and (cn -ne "Profesyonel Hizmetler Departmanı")'veya'(&(description=Live)(!(cn=Profesyonel Hizmetler Departmanı) ))'Açıklaması '\\fileserver1\fileshare' olan tüm gruplar
'description -eq "\5c\5cfileserver1\5cfileshare"'veya'(description=\5c\5cfileserver1\5cfileshare)'
RecursiveMatch veya Zincir Eşleştirmeyi Kullanma
Eşleştirme kuralı OID'sini veya RecursiveMatch parametresini kullanmak, AD'yi sorgulamayla ilgili sıklıkla sorulan bir soruyu çözmenin güçlü bir yoludur: 'Bir kullanıcının üyesi olduğu tüm grupları nasıl anlarım, hem doğrudan hem de dolaylı olarak mı?' Bunu öğrenmek için Active Directory Arama Filtresi memberOf özelliğini kullanırsınız.
Basit bir LDAP eşleştirme kuralı kullanmak, büyük bir komut dosyasından çok daha verimli olabilir. Örnek alanımız domain.local'i kullanan Kristin Diaz, Profesyonel Hizmetler Departmanı güvenlik grubunun doğrudan üyesidir. AD'deki memberOf özelliğine bakıldığında bunu yansıtıyor; yalnızca Profesyonel Hizmetler Departmanı gösterilir.
PS51> Get-ADUser -Identity Kristin.Diaz -Property memberOf
DistinguishedName : CN=Diaz Kristin,OU=Professional Services,OU=All User Accounts,DC=domain,DC=local
Enabled : True
GivenName : Kristin
MemberOf : {CN=Professional Services Department,OU=All Groups,DC=domain,DC=local}
Name : Diaz Kristin
ObjectClass : user
ObjectGUID : 04fe6336-c541-4e71-b7ed-6fee7db23482
SamAccountName : Kristin.Diaz
SID : S-1-5-21-447422785-3715515833-3878445295-1186
Surname : Diaz
UserPrincipalName :Eşleştirme kuralı OID'sini veya RecursiveMatch parametresini kullanarak bu kişilerin dolaylı olarak Tüm Departmanların Paylaşım Erişimi üyesi olduklarını göreceksiniz. Bunun nedeni, Profesyonel Hizmetler Departmanı grubunun Tüm Departmanların Paylaşım Erişimi'nin üyesi olmasıdır.
PS51> Get-ADGroup -LDAPFilter '(member:1.2.840.113556.1.4.1941:=CN=Diaz Kristin,OU=Professional Services,OU=All User Accounts,DC=domain,DC=local)'PS51> Get-ADGroup -Filter 'member -RecursiveMatch "CN=Diaz Kristin,OU=Professional Services,OU=All User Accounts,DC=domain,DC=local"'Her ikisi de aşağıdakileri döndürür:
DistinguishedName : CN=All Departments Share Access,OU=All Groups,DC=domain,DC=local
GroupCategory : Security
GroupScope : Universal
Name : All Departments Share Access
ObjectClass : group
ObjectGUID : 8ac0e0b7-9225-40a4-b168-a0330960e182
SamAccountName : All Departments Share Access
SID : S-1-5-21-447422785-3715515833-3878445295-1254
DistinguishedName : CN=Professional Services Department,OU=All Groups,DC=domain,DC=local
GroupCategory : Security
GroupScope : Universal
Name : Professional Services Department
ObjectClass : group
ObjectGUID : a8432583-7cac-4e8e-8d94-51e1c5bb1989
SamAccountName : Professional Services Department
SID : S-1-5-21-447422785-3715515833-3878445295-1255SearchBase ve SearchScope Parametreleri
Büyük ortamlarda AD binlerce nesneyi içerebilir. Performansı artırmanın ve herhangi bir sorgu için döndürülen nesne sayısını azaltmanın bir yolu, aramanın kapsamını belirlemektir.
SearchBase parametresi herhangi bir aramanın AD hiyerarşisinde nerede başlayacağını belirler. Cmdlet'leri kullanırken bu, ayırt edici bir adın dize temsilidir (ve varsayılan olarak etki alanının "üst kısmıdır"). Ayrıca Arama Kapsamı'nın üç düzeyi vardır:
- Taban - SearchBase olarak belirtilen nesne.
- Tek Düzey - SearchBase'in hemen içerdiği ancak herhangi bir alt kapsayıcıda bulunmayan nesneleri arar.
- SubTree - SearchBase tarafından ve herhangi bir alt kapsayıcıda bulunan nesneleri, AD hiyerarşisinde yinelemeli olarak arar.
Yukarıdaki örnekte, SearchBase OU=Tüm Kullanıcı Hesapları,DC=domain,DC=local olarak ayarlandığında, Base'in SearchScope'u şu şekilde olacaktır: kuruluş birimi nesnesinin kendisini sorgulamayı denediğinizde, OneLevel'in SearchScope'u yalnızca Tüm Kullanıcı Hesapları kuruluş biriminde arama yapar ve SearchScope SubTree'nin kodu hem Tüm Kullanıcı Hesapları hem de Profesyonel Hizmetler kuruluş birimlerinde arama yapar.
Özet
Artık Active Directory PowerShell cmdlet'leriyle nasıl filtreleme yapacağınızı iyi anlamış olmalısınız. Mükemmel filtre sözdizimini oluşturmanın çok fazla yolu olduğunu görebilirsiniz. Uygun filtreyi oluşturmak Where-Object cmdlet'ini kullanmaktan çok daha zordur.
Ancak AD nesnelerini filtrelemenin 'doğru' yolunu öğrenmeye zaman ayırın ve mükemmel performans ve verimliliğin ödüllerini toplayın!
Daha fazla okuma
- Her Şeyi Otomatikleştirmek için 32 Active Directory Komut Dosyası
- TechNet'teki LDAP Söz Dizimi Filtreleri