Perbedaan utama antara keduanya adalah perintah pertama tidak melibatkan perbandingan nilai langsung untuk mendapatkan semua hasil, dan perintah kedua tidak. Perintah pertama termasuk hasil NULL dan yang kedua tidak (seperti MDMarra sudah ditemukan). Kedua perintah mulai dengan cmdlet ini:
get-aduser
Saat menelusuri di bawah, ingat bahwa hasil cmdlet ini mencakup semua pengguna AD terlepas dari apa pun di -filter
parameter setelahnya.
Sekarang mari kita hancurkan dua bagian yang berbeda. Yang pertama:
{-not (description -eq "auto")}
...cara
- "cari tahu di mana atribut deskripsi sama dengan string teks" otomatis ". Agar perbandingan ini berfungsi, string harus ada di bidang deskripsi agar
-eq
operator dapat membandingkannya dengan" otomatis ". Nilai NULL dikeluarkan dari ini perbandingan karena tidak dapat membandingkan NULL dengan nilai string.
- terlepas dari
-eq
parameter filter memberi saya SEMUA yang BUKAN hasil (description -eq "auto")
, yang akan mencakup NULL, karena cmdlet asli get-aduser
,, mencakup semua pengguna AD. Itu tidak harus membandingkan apa pun dengan apa pun dengan -not
operator. Itu memberi Anda segalanya selain apa hasil (description -eq "auto")
filter itu.
Dalam contoh Anda anggap Anda memiliki 1 pengguna AD yang memiliki deskripsi mereka sama dengan "otomatis", beberapa ratus dengan sesuatu selain "otomatis" dan beberapa ratus dengan deskripsi NULL. Melangkah melalui logika perintah itu akan dilakukan:
- Beri saya semua pengguna AD (get-aduser) di mana deskripsi sama dengan "otomatis" - menghasilkan 1 pengguna
- Beri saya semua pengguna AD yang BUKAN apa yang baru saja Anda berikan kepada saya - hasilnya adalah beberapa ratus dengan sesuatu yang lain DAN beberapa ratus yang memiliki NULL.
Karena tidak perlu membandingkan apa pun dengan hal lain menggunakan -not
operator, hasilnya termasuk deskripsi pengguna NULL yang ditangkap dalam get-aduser
cmdlet asli .
Perintah kedua:
{description -ne "auto"}
...cara
- " cari tahu di mana atribut deskripsi tidak sama dengan string" auto "yang tepat. Sekali lagi, agar perbandingan ini berfungsi, string harus ada di bidang deskripsi agar
-ne
operator dapat membandingkannya dengan" otomatis ". Nilai NULL dikeluarkan dari perbandingan ini karena tidak dapat membandingkan NULL dengan nilai string.
Dalam contoh Anda lagi anggap Anda memiliki 1 pengguna AD yang memiliki deskripsi mereka sama dengan "otomatis", beberapa ratus dengan sesuatu selain "otomatis" dan beberapa ratus dengan deskripsi NULL. Melangkah melalui logika perintah itu akan dilakukan:
- Beri saya semua pengguna AD yang uraiannya tidak sama dengan "otomatis" - menghasilkan beberapa ratus pengguna dengan sesuatu selain "otomatis" dalam uraian mereka. Itu tidak menarik pengguna dengan deskripsi NULL karena tidak dapat membandingkan NULL dengan string teks.
Apa pun perbedaan antara kedua perintah itu jelas tidak intuitif.
Dengan menggunakan perintah ini, Anda harus dapat menangkap NULL dengan "-and" di sana juga seperti ini:
{description -ne "auto" -and description -ne $NULL}
Saya tidak 100% menggunakan sintaks karena saya tidak bisa mengujinya sekarang, dan mungkin ada cara yang lebih baik untuk melakukannya daripada ini juga. Ketika semuanya rusak itu cukup anti-iklim dan butuh banyak mengetik untuk menjelaskan, tapi saya sudah mengalami hal-hal aneh seperti ini sebelum menggunakan berbagai operator dan banyak trial and error karena saya tidak pernah bisa mengingat semua peringatan yang sejalan dengan menggunakan masing-masing.
Referensi: http://technet.microsoft.com/en-us/library/hh847732.aspx :
Operator Perbandingan
Gunakan operator pembanding (-eq, -ne, -gt, -lt, -le, -ge) untuk membandingkan nilai dan kondisi pengujian. Misalnya, Anda dapat membandingkan dua nilai string untuk menentukan apakah keduanya sama.
Operator pembanding termasuk operator pertandingan (-match, -notmatch), yang menemukan pola dengan menggunakan ekspresi reguler; ganti operator (-letakkan), yang menggunakan ekspresi reguler untuk mengubah nilai input; operator sejenis (-seperti, -tidak suka), yang menemukan pola menggunakan karakter wildcard (*); dan operator kontainmen (dalam, -notin, -contains, -notcontains), yang menentukan apakah nilai tes muncul dalam set referensi.
Mereka juga termasuk operator bitwise (-bAND, -bOR, -bXOR, -bNOT) untuk memanipulasi pola bit dalam nilai.
Untuk informasi lebih lanjut, lihat about_Comparison_Operators
Operator yang logis
Gunakan operator logis (-dan, -atau, -xor, -not,!) Untuk menghubungkan pernyataan kondisional ke kondisional kompleks tunggal . Misalnya, Anda bisa menggunakan logika-dan operator untuk membuat filter objek dengan dua kondisi berbeda.
Untuk informasi lebih lanjut, lihat about_Logical_Operators.