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:

CharacterEscaped AsNotes
“`”Only required if the data is enclosed in double quotes.
‘\’Only required if the data is enclosed in single quotes.
NUL\00This is a standard LDAP escape sequence.
\\5cThis is a standard LDAP escape sequence.
*\2aAutomatically escaped. Only in -eq and -ne comparisons. You should use -like and -notlike operators for wildcard comparison.
(/28Automatically escaped.
)/29Automatically escaped.
//2fAutomatically 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-1255

SearchBase 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:

  1. Taban - SearchBase olarak belirtilen nesne.
  2. Tek Düzey - SearchBase'in hemen içerdiği ancak herhangi bir alt kapsayıcıda bulunmayan nesneleri arar.
  3. 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

İlgili makaleler