PowerShell, ActiveDirectory ve bulunması zor Filtre parametresi


PowerShell kullanarak Active Directory'de kullanıcı ararken genellikle akla ilk gelenlerden biri ActiveDirectory modülüdür. Modül bir süredir ortalıkta dolaşıyor ancak birçok kullanıcının hala karşılaştığı bir sorun var: Filtre parametresi. Get-ADUser ile bir kullanıcıyı aramak için temel olarak üç yöntem vardır.

tl;dr;** Bu makalede, AD'de arama yaparken -Filter parametresinin nasıl kullanılacağı açıklanmaktadır; yalnızca yanıt istiyorsanız, **Çözüm'e geçin .

Kimlik parametresini kullanma

Bir anahtar özelliğinin bilindiği belirli bir kullanıcıyı ararken Kimlik parametresi iyi çalışır. Aşağıdaki özelliklerden birinin değerini kabul eder:

  • Ayırt edici adı
  • GUID (nesne GUID'i)
  • SID (nesneSID)
  • SAM HesapAdı (sAMAccountName)

LDAPFilter parametresini kullanma

LDAPFilter parametresi bir LDAP sorgu dizesini kabul eder. LDAP sorgularının sözdizimi oldukça kapsamlıdır ve iyi belgelenmiştir. Bununla birlikte, LDAP filtrelerini kullanmaya başlamak biraz zorlu olabilir ve bazı özellikleri filtrelemek için bit işaretlerinin anlaşılmasını gerektirir; etkin kullanıcılar.

Aşağıdaki örnek, LDAP filtresiyle tüm etkin kullanıcıların nasıl bulunacağını gösterir. LDAP filtrelerine alışkın olmayan biri için anlaşılması kolay bir şey değil.

Get-ADUser -LdapFilter '(!userAccountControl:1.2.840.113556.1.4.803:=2)'

Filtre parametresini kullanma

AD'yi PowerShell ile ararken üçüncü seçenek Filter parametresini kullanmaktır. Bu parametre, çoğu PowerShell kullanıcısının çok rahat olması gereken bir sözdizimi olan PowerShell İfade Dili'ni kullanan bir filtreyi kabul eder. Ama yine de bu, insanların sıklıkla uğraştığını gördüğüm bir şey.

Yeni bir komutu ilk kez kullanırken çoğu kullanıcı Get-Help'e başvurur. Bir bakalım:

Buraya kadar her şey yolunda, ama gelin biraz daha aşağıda yer alan örneklerden birine bakalım:

Get-ADUser -Filter {mail -like “*”}

Genellikle işlerin ters gittiği yer burasıdır. Filter parametresi yalnızca bir dizeyi kabul ediyor ve bu örnekte ona bir komut dosyası bloğu mu veriyoruz? Bu spesifik örnekte işe yarıyor ancak bu tekniği kullanmadan önce neden işe yaradığını gerçekten anlamamız gerekiyor. Hadi baştan başlayalım.

Parametre türü

Bir komuttaki her parametrenin belirli bir türü vardır; bu, PowerShell'in parametreye verilen girişi bu nesne türüne dönüştüreceği anlamına gelir. Bu dönüşüme döküm denir. Filter parametresine tekrar bakalım:

Kırmızıyla işaretlenmiş metin, Filter parametresinin String türünde olduğunu gösterir; bu, Get-ADUser belirttiğimiz filtreyi almadan önce PowerShell'in onu bir dizeye dönüştüreceği (bunu bir dizeye dönüştüreceği) anlamına gelir. Get-ADUser'ın ne göreceğini görmek için bu dönüşümü aslında kendimiz gerçekleştirebiliriz. Bu nasıl:

[string] {posta benzeri “*”}

$mail='[e-posta korumalı]'

[string] {mail -like $mail}

Çözüm

-Filter parametresi için değer olarak bir komut dosyası bloğu kullanmak bazen işe yarasa da, her zaman bir dize kullanmayı alışkanlık haline getirin. Zaten bir dizgeye dönüştürülecek. Diziyi nasıl oluşturacağınızdan emin değilseniz, işte birkaç başlangıç ipucu:

  • Çift tırnaklı dizeler kullanın Filtrenin etrafında çift tırnak işareti (") kullanılması, dizenin içine yazılan herhangi bir değişkeni genişletecektir.
  • Filtredeki herhangi bir değerin etrafında tek tırnak işaretleri (') kullanın Çift tırnaklı bir dize içinde, diğer karakterler gibi tek tırnak işaretleri de kullanılabilir.
  • Şüpheniz varsa filtreyi bir değişkene kaydedin ve ekrana yazın.

Bu ipuçlarını kullanarak bir örneğe bakalım.

$İsim='Simon'

$Filter=” Ad - '$İsim*' gibi ”

Write-Verbose -Message “Filtre kullanılıyor: [$Filter] ” -Verbose

$Kullanıcı=Get-ADUser -Filter $Filter

İkinci satırda bir filtre dizisi oluşturuyorum ve bunu $Filter değişkenine atıyorum. Okumayı kolaylaştırmak için dizenin hem başına hem de sonuna fazladan boşluk ekledim, bunlar bir fark yaratmayacaktır. Değerin etrafındaki tek tırnak işaretlerine dikkat edin.

Üçüncü satır, filtremi açık metinle gösteren ayrıntılı bir mesaj yazıyor; bu şekilde filtrenin istediğim gibi göründüğünden emin olabiliyorum. Betiğimle işim bittiğinde -Verbose'u Write-Verbose'dan kaldırabilirim ve mesaj yalnızca betiğimin -Verbose ile çalıştırılması durumunda gösterilir.

Dördüncü satır Get-ADUser'ı filtremle çalıştırır ve sonucu $User'a atar. İşler tamamlandı!

PowerShell'i kullanarak Active Directory'deki nesneleri aramak gerçekten basittir, ancak ne yazık ki sizi yanlış yola sürükleyebilecek bazı örnekler vardır. Şüpheniz varsa, ağacın basit ipuçlarını takip edin ve iyi bir başlangıç yapın.

İlgili makaleler