ความแตกต่างที่สำคัญระหว่างทั้งสองคือคำสั่งแรกไม่เกี่ยวข้องกับการเปรียบเทียบค่าโดยตรงเพื่อรับผลลัพธ์ทั้งหมดและคำสั่งที่สองทำ คำสั่งแรกรวมผลลัพธ์ NULL และคำสั่งที่สองไม่ได้ (ตามที่ MDMarra ค้นพบแล้ว) คำสั่งทั้งสองเริ่มต้นด้วย cmdlet นี้:
get-aduser
เมื่อทำตามด้านล่างโปรดจำไว้ว่าผลลัพธ์ของ cmdlet นี้รวมผู้ใช้ AD ทั้งหมดโดยไม่คำนึงถึงสิ่งอื่นใดใน-filter
พารามิเตอร์หลังจากนั้น
ทีนี้ลองแยกสองส่วนที่แตกต่างกัน คนแรก:
{-not (description -eq "auto")}
... หมายถึง
- "รูปที่แอตทริบิวต์ description เท่ากับสตริงข้อความ" auto "เพื่อเปรียบเทียบการทำงานสตริงจำเป็นต้องมีอยู่ในฟิลด์คำอธิบายสำหรับ
-eq
โอเปอเรเตอร์เพื่อให้สามารถเปรียบเทียบกับ" auto "ค่า NULL จะหายไปจากสิ่งนี้ การเปรียบเทียบเนื่องจากไม่สามารถเปรียบเทียบ NULL กับค่าสตริงได้
- เป็นอิสระจาก
-eq
พารามิเตอร์ตัวกรองให้ฉันทุกอย่างที่ไม่ใช่ผลลัพธ์(description -eq "auto")
ซึ่งจะรวม NULL เนื่องจาก cmdlet ดั้งเดิมget-aduser
รวมผู้ใช้ AD ทั้งหมด มันไม่จำเป็นต้องเปรียบเทียบอะไรกับสิ่งอื่นใดกับ-not
ผู้ให้บริการ มันให้ทุกสิ่งนอกเหนือจากผลลัพธ์ของ(description -eq "auto")
ตัวกรอง
ในตัวอย่างของคุณสมมติว่าคุณมีผู้ใช้ AD 1 รายที่มีคำอธิบายเท่ากับ "อัตโนมัติ" สองสามร้อยกับสิ่งอื่นที่ไม่ใช่ "อัตโนมัติ" และอีกสองสามร้อยด้วยคำอธิบายที่เป็นโมฆะ การก้าวผ่านลอจิกคำสั่งมันจะทำ:
- ให้ผู้ใช้โฆษณา (get-aduser) ทุกคนที่คำอธิบายเท่ากับ "อัตโนมัติ" - ให้ผู้ใช้ 1 คน
- ให้ผู้ใช้ AD ทั้งหมดที่ไม่ใช่สิ่งที่คุณเพิ่งให้ฉัน - ผลลัพธ์คือไม่กี่ร้อยกับอย่างอื่นและอีกสองสามร้อยที่มีค่า NULL
เนื่องจากไม่จำเป็นต้องเปรียบเทียบสิ่งใดกับสิ่งอื่นโดยใช้-not
โอเปอเรเตอร์ผลลัพธ์จึงรวมผู้ใช้ NULL description ที่ถูกจับในget-aduser
cmdlet ดั้งเดิม
คำสั่งที่สอง:
{description -ne "auto"}
... หมายถึง
- "เข้าใจว่าแอตทริบิวต์คำอธิบายไม่เท่ากับสตริง" auto "ที่แน่นอนอีกครั้งเพื่อให้การเปรียบเทียบนี้ใช้งานได้สตริงจำเป็นต้องมีอยู่ในฟิลด์คำอธิบายเพื่อให้
-ne
ผู้ปฏิบัติงานสามารถเปรียบเทียบกับ" auto "ได้ค่า NULL ถูกดร็อปจากการเปรียบเทียบนี้เนื่องจากไม่สามารถเปรียบเทียบ NULL กับค่าสตริง
ในตัวอย่างของคุณอีกครั้งสมมติว่าคุณมีผู้ใช้ AD 1 รายที่มีคำอธิบายเท่ากับ "อัตโนมัติ" สองสามร้อยกับสิ่งอื่นที่ไม่ใช่ "อัตโนมัติ" และอีกสองสามร้อยด้วยคำอธิบายที่เป็นโมฆะ การก้าวผ่านลอจิกคำสั่งมันจะทำ:
- ให้ผู้ใช้โฆษณาทุกคนที่คำอธิบายไม่เท่ากับ "อัตโนมัติ" - ส่งผลให้ผู้ใช้ไม่กี่ร้อยรายที่มีคำอื่น ๆ นอกเหนือจาก "อัตโนมัติ" ในคำอธิบายของพวกเขา ไม่ดึงผู้ใช้ที่มีคำอธิบาย NULL เนื่องจากไม่สามารถเปรียบเทียบ NULL กับสตริงข้อความได้
ความแตกต่างทั้งหมดระหว่างคำสั่งทั้งสองนั้นไม่สามารถหยั่งรู้ได้
การใช้คำสั่งนี้คุณควรจะสามารถจับ NULL ด้วย "- และ" ในนั้นเช่นกัน:
{description -ne "auto" -and description -ne $NULL}
ฉันไม่ใช่ไวยากรณ์ 100% เนื่องจากฉันไม่สามารถทดสอบได้ในตอนนี้และอาจมีวิธีที่ดีกว่าที่จะทำเช่นนี้ เมื่อมันพังลงมันก็ค่อนข้างต่อต้านภูมิอากาศและใช้การพิมพ์จำนวนมากเพื่ออธิบาย แต่ฉันพบเจอกับสิ่งแปลก ๆ เช่นนี้ก่อนที่จะใช้ตัวดำเนินการต่าง ๆ และการลองผิดลองถูกมากมายเพราะฉันจำไม่ได้ว่าถ้ำทั้งหมด ที่ไปพร้อมกับการใช้แต่ละคน
การอ้างอิง: http://technet.microsoft.com/en-us/library/hh847732.aspx :
ผู้ประกอบการเปรียบเทียบ
ใช้ตัวดำเนินการเปรียบเทียบ (-eq, -ne, -gt, -lt, -le, -ge) เพื่อเปรียบเทียบค่าและเงื่อนไขการทดสอบ ตัวอย่างเช่นคุณสามารถเปรียบเทียบสองค่าสตริงเพื่อตรวจสอบว่าพวกเขามีความเท่าเทียมกัน
ตัวดำเนินการเปรียบเทียบรวมตัวดำเนินการจับคู่ (-match, -notmatch) ซึ่งค้นหารูปแบบโดยใช้นิพจน์ทั่วไป แทนที่โอเปอเรเตอร์ (-replace) ซึ่งใช้นิพจน์ทั่วไปเพื่อเปลี่ยนค่าอินพุต ตัวดำเนินการ Like (-like, -notlike) ซึ่งค้นหารูปแบบโดยใช้อักขระตัวแทน (*); และตัวดำเนินการบรรจุ (ใน, -notin, -contain, -notcontain) ซึ่งกำหนดว่าค่าทดสอบจะปรากฏในชุดอ้างอิงหรือไม่
พวกเขายังรวมถึงตัวดำเนินการบิต (-bAND, -bOR, -bXOR, -bNOT) เพื่อจัดการรูปแบบบิตในค่า
สำหรับข้อมูลเพิ่มเติมดู about_Comparison_Operators
ผู้ประกอบการเชิงตรรกะ
ใช้ดำเนินการทางตรรกะ (และอื่น, -or, -xor, -Not!) เพื่อเชื่อมต่องบเงื่อนไขเป็นเงื่อนไขที่ซับซ้อนเดียว ตัวอย่างเช่นคุณสามารถใช้ตัวดำเนินการเชิงตรรกะและตัวกรองวัตถุสร้างเงื่อนไขที่แตกต่างกันสอง
สำหรับข้อมูลเพิ่มเติมดู about_Logical_Operators