İkisi arasındaki anahtar fark, ilk komutun tüm sonuçları almak için değerlerin doğrudan karşılaştırılmasını içermemesi ve ikinci komutun olmasıdır. İlk komut NULL sonuçları içerir ve ikincisi içermez (MDMarra'nın zaten keşfettiği gibi). Her iki komut da bu cmdlet ile başlar:
get-aduser
Aşağıdakilerden geçerken, bu cmdlet'in sonuçlarının, -filter
parametredeki herhangi bir şeyden bağımsız olarak tüm AD kullanıcılarını içerdiğini unutmayın.
Şimdi farklı olan iki parçayı parçalayalım. İlki:
{-not (description -eq "auto")}
...anlamına geliyor
- "description özelliğinin " auto "metin dizesine eşit olduğunu anlayın . Bu karşılaştırmanın çalışması için,
-eq
operatörün bunu" auto "ile karşılaştırabilmesi için açıklama alanında bir dize bulunması gerekir . NULL değerler bundan düşüyor NULL değerini dize değeriyle karşılaştıramadığı için karşılaştırma.
- bağımsız olarak
-eq
filter parametresi , sonuçta OLMAYAN HERŞEYİ verir (description -eq "auto")
, bu da NULL'leri içerecektir, çünkü orijinal cmdlet, get-aduser
tüm AD kullanıcılarını içerir. -not
Operatör ile başka hiçbir şeyi karşılaştırmak zorunda değildi . Sadece (description -eq "auto")
filtrenin sonuçlarının yanı sıra size her şeyi verdi .
Örneğinizde, açıklamalarının "otomatik" e eşit olan 1 AD kullanıcısı, birkaç "otomatik" dışında bir şeyle ve birkaç yüz NULL açıklamalarla eşleştiğini varsayalım. Komut mantığında adım adım yapacaktır:
- Bana açıklamanın "otomatik" e eşit olduğu tüm AD kullanıcılarını (get-aduser) ver - 1 kullanıcıyla sonuçlanır
- Bana verdiğiniz tüm AD kullanıcılarını ver - sonuç başka bir şeyle birkaç yüz VE NULL olan birkaç yüz.
-not
Operatörü kullanarak başka bir şeyle karşılaştırmak zorunda olmadığından , sonuç, orijinal get-aduser
cmdlet'te yakalanan NULL açıklama kullanıcılarını içeriyordu .
İkinci komut:
{description -ne "auto"}
...anlamına geliyor
- msgstr "" "açıklama özelliğinin tam olarak" auto "dizesine eşit olmadığını anlayın . Yine, bu karşılaştırmanın çalışması için,
-ne
operatörün" auto "ile karşılaştırabilmesi için açıklama alanında bir dize bulunması gerekir . NULL değerler NULL değeri bir dize değeriyle karşılaştırılamadığından bu karşılaştırmadan çıkarılır.
Örneğinizde, açıklamaları "otomatik" e eşit olan 1 AD kullanıcısı, birkaç "otomatik" dışında bir şeyle ve birkaç yüz NULL açıklama ile sahip olduğunu varsayalım. Komut mantığında adım adım yapacaktır:
- Bana tüm AD kullanıcılarına açıklamanın "otomatik" değerine eşit olmadığı bir yer verin - birkaç yüz kullanıcının açıklamasında "otomatik" dışında bir şeyle sonuçlanır. Kullanıcıları NULL açıklamalarla çekmez çünkü NULL ile bir metin dizesini karşılaştıramaz.
Her iki durumda da iki komut arasındaki tüm fark kesinlikle sezgisel değildir.
Bu komutu kullanarak, NULL'ları bir "-ve" ile şu şekilde yakalayabilmelisiniz:
{description -ne "auto" -and description -ne $NULL}
Şu anda test edemediğim için sözdiziminde% 100 değilim ve muhtemelen bunu yapmanın daha iyi bir yolu var. Her şey bozulduğunda, oldukça anti-iklimsel ve açıklamak için çok fazla yazım yaptı, ancak çeşitli operatörleri ve çok sayıda deneme yanılma kullanmadan önce böyle garip şeylerle karşılaştım, çünkü tüm uyarıları asla hatırlayamıyorum her birini kullanmaya devam ediyor.
Referans: http://technet.microsoft.com/en-us/library/hh847732.aspx :
Karşılaştırma Operatörleri
Değerleri ve test koşullarını karşılaştırmak için karşılaştırma işleçlerini (-eq, -ne, -gt, -lt, -le, -ge) kullanın. Örneğin, eşit olup olmadığını belirlemek için iki dize değerini karşılaştırabilirsiniz.
Karşılaştırma işleçleri, düzenli ifadeler kullanarak kalıpları bulan eşleme işleçlerini (-match, -notmatch); giriş değerlerini değiştirmek için düzenli ifadeler kullanan değiştir operatörü (-replace); joker karakterler (*) kullanarak kalıplar bulan benzer işleçler (-like, -notlike); ve bir test değerinin referans kümesinde görünüp görünmeyeceğini belirleyen sınırlama işleçleri (in, -notin, -contains, -notcontains).
Ayrıca değerlerde bit kalıplarını işlemek için bitsel operatörler (-bAND, -bOR, -bXOR, -bNOT) içerir.
Daha fazla bilgi için, bkz. About_Comparison_Operators
Mantıksal operatörler
Koşullu ifadeleri tek bir karmaşık koşullu duruma bağlamak için mantıksal işleçler (-ve, -veya, -xor, -not,!) Kullanın . Örneğin, iki farklı koşullu bir nesne filtresi oluşturmak için mantıksal -ve işleci kullanabilirsiniz.
Daha fazla bilgi için bkz. About_Logical_Operators.